When I tried doing mechanical turk jobs out of curiosity, one of the tasks was checking/amending OCR'd receipts. (image on the left, textbox on the right)
It was less than a cent per receipt, but doing each was much quicker than 30 seconds. This was in 2017, to give you some idea how good OCR was.
Even before then, I've been disappointed no major chain encodes the receipt data into a QR code or something at the bottom of the receipt to side-step this whole thing. The closest you get is some places doing digital receipts nowadays.
Have you tried using the restrict keyword everywhere you can in c?
In Fortran, arrays are not allowed to overlap which allows some optimisations. c has rules in the spec about how memory accesses must occur, and overlapping arrays being possible prevents some compiler optimisations. The restrict keyword is you promising that the memory at some pointer won't be accessed through another pointer.
You can compare two implementations in Fortran/c using godbolt to see how each of them compile.
i apologize i missed this. the core hot loop was fairly straightforward to optimize and audit all aliasing. we ported from c89 to all cutting edge (at time) c99+ compilers. we still couldnt quite eek out that minor difference. the intel compiler unsurprisingly generated the most close asm for the machine
the fortran library we only had one license on a physical machine, i had to travel for one extensive recompilation of that side lol! it wasnt the library mentioned below, i would have to ask a collegue.
Dummy arguments may not alias anything else, including other dummy arguments, in conforming Fortran if either are modified, with some exceptions. But there are many ways in which arrays can overlap that don’t involve dummy arguments. GNU Fortran optimizes ASSOCIATE names as if they were free of aliasing, too, but that is a bug.
If the hash changes after every character, doesn't that make it possible for someone to determine your password one character at a time if they know what each hash was?
I'm guessing that wasn't in the threat model at the time.
Hmm. Let's say you have 64 possible characters you can use in a password and four different images. You look over someone's shoulder and see that they go "RGBYYBRYG".
What this means is that you can now reduce your search space to approximately 16^9 passwords instead of 64^9 passwords. Which is probably very helpful if you have stolen the password hash, but not if you have to guess it by entering the password manually.
Makes sense. I was under the impression there were more than 4 outputs based on what you entered. (I've seen a similar setup that shows two hex digits)
reply