HackerTrans
TopNewTrendsCommentsPastAskShowJobs

axby

no profile record

Submissions

Show HN: AlexCalc, a scientific calculator with LaTeX equation display

alexbarry.github.io
58 points·by axby·4 ปีที่แล้ว·20 comments

comments

axby
·4 ปีที่แล้ว·discuss
How big is their dev team? Does their app change much? Could they have contracted it out and now only have one or two people who still push updates to it?
axby
·4 ปีที่แล้ว·discuss
As another commenter mentioned, it's at least a good marketing campaign, causing me to open the app for the first time in months. Or it might be to gather a baseline of how many people react to their notifications, regardless of their contents? (Perhaps to immediately go to the notifications settings to disable them)

Edit: if the notification is sent by an attacker, does the attacker get access to firebase metrics as well? (Guessing they at least contain info about how many people opened the app)
axby
·4 ปีที่แล้ว·discuss
Oh could the attacker get information about whether or not I opened the app? Is the same key used to send notifications and access metrics that Firebase collects?
axby
·4 ปีที่แล้ว·discuss
Haha I considered this as a possibility for why it was sent... I don't ever open their app otherwise, I only ever installed it to receive messages from a host on a trip.

At the very least they might have wanted to understand a baseline for how many people will open a notification just to dig into the app and try to disable future notifications, regardless of how annoying the text in the notification was.
axby
·4 ปีที่แล้ว·discuss
But if so, why not try to camouflage it as something more generic, to try to avoid notifying Airbnb? I am tech savvy enough and have marketing notifications turned off, but I would assume that they are simply not honouring the setting somehow if I received an ad for Airbnb.

Now Airbnb knows to change their key or something if possible, and I'll be very suspicious of any notifications from any app in the future, especially Airbnb.
axby
·4 ปีที่แล้ว·discuss
Interesting, but why would an attacker push a notification like this to so many people?

Or did not many people get it? Could I be targeted, along with the others in this thread?

If the attacker really intended to send the notification to everyone (or even 10%), wouldn't that very likely get the attention of Airbnb, and then they'd know about the issue and be able to mitigate it?

Edit: assuming everyone got it, this seemed much more likely to be a mistake, to me. For example, someone working at Airbnb was testing something and accidentally did it in prod instead of dev. Otherwise, why not camouflage this as something more innocent, like an ad for Airbnb, saying something generic like "Check out our listings near you"?
axby
·4 ปีที่แล้ว·discuss
Thanks, this looks great. I'll definitely read this later.

But why doesn't the base macbook install support more of these features? I was led to believe (perhaps incorrectly) that I wouldn't have to tinker with a mac as much as I have with Linux. (I suppose that fine tuning keyboard shortcuts is very different from trying to desperately fix a video or wireless driver)

I assumed that apple optimized for a good user experience. Are "power users" (or even people that just want alt tab) not included in apple's UX goals?
axby
·4 ปีที่แล้ว·discuss
I've seen a lot of people recommend this approach when searching for solutions online. I was trying to embrace the apple way, rather than forcing it to match what I'm used to. Your comment might be the push I need to just give up and force it to match what I'm used to.

But if this is the case, why do so many developers buy and enjoy macbooks? It seems ridiculous that you have to pay such a premium for a nice laptop, and then find random 3rd party applications to make it work the way you want.

If I wanted to endlessly tinker then I'd be happy with Linux. I was under the impression that macbooks would "just work". I've also been disappointed by poor UX in some cases, like randomly showing "enter your password" dialogs.
axby
·4 ปีที่แล้ว·discuss
I recently got a macbook for work and I can't believe how many minor things just can't be changed. I don't think you can change the date format in the top right. It seems like you can't get rid of that damn dock entirely without killing important processes and breaking things. (I'm able to hide it and put it in the left, so it's mostly out of the way, but it seems so anti-user to force this interface on everyone).

I haven't yet looked for a "how to effectively use mac keyboard shortcuts" comprehensive guide, instead I've looked for things as I need them. I can see the benefits for introducing "cmd" where "Ctrl" is usually used on other operating systems.

But I'm very disappointed by cmd tab and cmd backtick. Often I want to press a single keyboard shortcut to switch between three windows or so: usually a few browser windows, a terminal, and an IDE. cmd backtick switches between windows of the same program, cmd tab switches between programs.

Can any more experienced mac user tell me the way to do this properly? How to switch between a few separate windows, like alt tab, without having to think about what program they are?
axby
·4 ปีที่แล้ว·discuss
Agreed about the intro question, it took me from "I should know more about what tty means (after seeing it for many years)" to "I want to know!"
axby
·4 ปีที่แล้ว·discuss
In 2010 I first got into Linux because of Microsoft making (what seemed to me at the time to be) user hostile decisions: my netbook came with "windows 7 starter edition", which did not allow you to change the wallpaper. They claimed that this was to accommodate the less powerful hardware of the netbook... but they went out of their way to enforce it. If you found the default wallpaper file and modified it, they would detect it and show a black screen.

Now 12 years later I have many Microsoft accounts, because I don't really use their services, I think they just strongly pushed me into making one when I setup windows laptops over the years. I also probably have one for Skype, I've created a few when playing Halo MCC on a new computer (every damn time it asks me to log in, even if I just want to play single player). Oh and another from when I played Xbox 360 a long time ago. Plus a few from high school when I used MSN messenger.

I've never actually tried to clean this up and merge them, and your comment has scared me from even trying. And more on topic, I'm sad that a game like Minecraft is likely going to be lost in this mess. It's the kind of game that I might open every few years and mess around for an hour. Now it will likely be like my experience when trying to recover my old Microsoft accounts... Extremely painful, mandatory phone number, new login from suspicious location, security questions... Ugh. At least with Minecraft it will be for a game that isn't already tied to another account that I actually use, like steam.

Maybe people don't want their game accounts to be attached to an email account and their OS. Hell, I don't want an account on my OS at all-- what is the benefit, if I don't use Outlook or OneDrive or any of their devices? If anything it's probably a liability, could I get locked out of my own PC if my (otherwise unused) Microsoft account was compromised?
axby
·4 ปีที่แล้ว·discuss
Thanks a lot! I see now, I am able to reproduce the issue if I go into chrome://flags, search for "Auto Dark Mode for Web Contents", and select "Enabled with simple HSL-based inversion". Just choosing "Enabled" seemed to break the LaTeX entirely. (Please let me know if that isn't roughly what you did)

I don't know how I'll fix this (I've never really debugged mobile web specific stuff before), but I'll look into it this weekend.

There must be a way to fix it, since I don't see the issue when going to https://www.mathjax.org/#demo and entering something like this: $$\frac{1}{\sqrt{2}}$$

EDIT: I actually have no idea why this would be happening, unless there is some sort of metadata that I should be providing on the page to tell chrome how to enable dark mode on my content. I don't think I'm messing with the styling on the web version at all.
axby
·4 ปีที่แล้ว·discuss
Thanks for letting me know, is this in the web version? If so, what browser? I tried Chrome and Firefox and I don't see this issue. I use a plugin to make sites dark ("Dark Reader") and it seems to work for my web calculator in Firefox.

Or is it Android? On my phone 1/sqrt(2) looks fine in "dark" and "very dark". If it doesn't for you, could you tell me what type of phone you have? I put some contact info in the "about" section of the app if you'd rather respond privately.

For dark mode on Android I just set the color and background-color attributes of the HTML display elements. (I didn't actually fully implement dark mode in the HTML version, though there are some commented out CSS files). But it's possible that something else is needed to work with MathJax in some cases.
axby
·4 ปีที่แล้ว·discuss
Thanks! And that is so cool! It looks like the intended use case of this is to generate documents or short snippets of LaTeX, but not have to hard code the answers?

I wish I had something like this back when I actually wrote reports and stuff in LaTeX. Now I barely have any use case for my own calculator, except occasional unit conversions.

The use case that I had in mind for mine was electrical engineering students, where I had to often use complex numbers in polar form, in degrees, for circuit questions. My calculator at the time had no obvious way of entering polar complex numbers in degrees, I ended up typing things like `e^(i*angle/1r)`, where the r was "radian", and when the calculator was in degrees mode, "1 r" would evaluate to "180/pi".

It was also cumbersome to write long expressions for. It showed something like 24 characters per line, enough that I'd often get multi line expressions. These expressions would be full of brackets, and sometimes I'd hit enter and not be sure if I missed a bracket. (Hence my goal of having a LaTeX display to show you what you're entering).
axby
·4 ปีที่แล้ว·discuss
> I've setup my keyboard (on linux) so that the CAPS-LOCK key acts as a "dead greek" composer. If I press "CAPSLOCK+a" it types "α", and so on.

Cool! Is this because you type a lot of Greek (or math)?

> My unpopular opinion is that typing "alpha" should compute the product of the five values, equivalent to "a^2lph".

I wouldn't call it an unpopular opinion, that's how my physical graphing calculator worked, though it only had single letter variable names. The programmer in me likes my current way, though the (nearly long gone) engineering student cringes when I have to write things like "i*2*pi*f".

If people were mostly universally happy with single letter variable names then I could probably switch to this. If they were space separated then it would be a fairly simple change (except for the way units works, is "1 s" 1 times variable s, or 1 second? This is why I don't support 1 m/s to mean metre per second, it means "1 metre divided by variable s". 1 metre per second is "1 m s^-1").

I tried to compromise by making the UI automatically enter a multiplication symbol when entering tokens that aren't valid.

Perhaps if I added an additional input layer when typing then this would be feasible. Maybe something like pressing a special character, then typing "alpha" will convert it to the alpha character, and non greek letter variables could be wrapped in quotes or square brackets or something.

The one thing that would be lost is the ability to name a variable "x2". Maybe that's fine since "x_2" would still work.

As an update on unicode parsing, I still think it should be easy, but I'm running into issues. I quickly tried https://stackoverflow.com/a/11255698/9596600 but I'm seeing this:

    terminate called after throwing an instance of 'std::regex_error'
      what():  Unexpected escape character.
I suspect I just need to dig in on how to use these extended regexes (and remove some of my existing regexes). This weekend I might have more time to try it.
axby
·4 ปีที่แล้ว·discuss
Wow, thanks. This is way more complex than I expected. When I started working on this I thought that I might want to switch to "binary coded decimal"[0] to avoid issues with inputs like (0.1 + 0.2 - 0.3).

I haven't had a chance yet to read the full paper, but it talks about fixing trig issues too. Would this fix my (unfortunate) result for `e^(ipi) + 1` to be exactly 0, too (instead of something ugly like (-210^-16 + j1.22*10^-16)).

And is there an implementation I could use?

At some point I plan on open sourcing this code, so if I never manage to fix this then maybe someone else might someday do it. Originally I figured I could finish this whole project in a few months, especially after figuring out webassembly and discovering MathJax. But it ended up taking way longer than that, with little things constantly popping up that I wanted to fix before I could even think about sharing it.

[0]: https://en.wikipedia.org/wiki/Binary-coded_decimal
axby
·4 ปีที่แล้ว·discuss
Thanks a lot for trying it and the feedback!

Assuming C++ standard regex supports unicode, then this should be easy enough. I never thought to try this. I'll see if I can implement it later today or this weekend. Do you think the spelled out "alpha" should map to the same thing as "<unicode alpha character>"?

Also, do you mind if I ask how you are entering Greek letters directly? (e.g. are you a Greek speaker, using a Greek keyboard?) I'd like to better understand how people would like to use this. I'm happy to accommodate whatever I can, and I'm relying on people asking for it directly since I don't have any sort of tracking implemented. (The android version doesn't even request any INTERNET permission (or any permission).)
axby
·4 ปีที่แล้ว·discuss
Thanks! If you right click on any LaTeX you can access the raw TeX code. Admittedly this is just the default MathJax behaviour though haha. If people wanted it then I could probably make it easier to get the TeX in fewer clicks.

I thought that it might be useful to use this application to generate TeX, so one feature I'm working on is to fine tune the output format (e.g. choosing the multiplication symbol, instead of \cdot, maybe \times or \,).

Thanks for trying it!
axby
·4 ปีที่แล้ว·discuss
TL;DR: try pressing the "vars" and "units" buttons. Also complex numbers by "i" button or pressing "alt" then the now shown "angle" button.

For choosing the desired output unit, press "alt" and the now shown "to units" button. Then enter the desired unit.
axby
·4 ปีที่แล้ว·discuss
Hi all, as a hobby I've been developing a scientific calculator with some neat features.

Available on:

* web (mobile or desktop): https://alexbarry.github.io/AlexCalc/

* Android: https://play.google.com/store/apps/details?id=net.alexbarry....

Some neat features:

* LaTeX equation display (I hated counting brackets on my old graphing calculators back in college, now I wouldn't have to if I wasn't ~10 years late in making this)

* variables (you can store variables with `1 + 2 -> x`, then access them `x^2 - 3`)

* unit operations, and unit conversions, e.g. `10 km / 2 minutes to mph`, or more fancily: `sqrt((3 kOhm + j*100 mH * 1000 kHz)/(1 S + j * 1 nF * 1000 kHz))`

* complex numbers (specifically focused on making it easy to enter complex numbers in polar form, in degrees, e.g. `5 angle 90`, but press the "degree" button)

* can enter input either via button presses or typing, so copying and pasting inputs works well

The core calculator parsing, evaluating, and LaTeX generation is in C++, with CMake build files. Using emscripten[0], this compiles to webassembly for the web version, and I can also compile this for Android and use JNI.

The library converting my generated LaTeX code to graphics is "MathJax"[1], a really nice browser library that I loved working with both in the web version and in the Android WebView.

I'm happy to receive any feedback at all. One big weakness currently are the syntax error messages, I haven't yet implemented a way to point to a particular position where an error occurs. If there is some nice parsing library that I could use instead, I might consider switching to that if it isn't too difficult. Currently the parsing uses a bunch of (fairly simple) regular expressions (e.g. check for number, check for optional unit, check for binary operator, add to stack, collapse stack. This ends up with a tree of nodes, and then this tree can either be evaluated or converted to LaTeX.)

I'm also interested in hearing any strategies for a decent cross platform UI. I didn't want to just include the HTML UI in a WebView on Android, since I figured it wouldn't be a great user experience. Originally I thought it would be small enough that I could just write two separate copies... but it turns out that there is a lot more UI code than I expected (automatically insert multiplication symbols on button presses, input history, storing "recently used units" when the button is pressed, etc...)

[0]: https://emscripten.org/

[1]: https://www.mathjax.org/