The first version of the Bingo Card Creator CMS needed to create PNGs and PDFs of bingo cards given word lists, but it was my first Ruby/Rails project.
I did not yet actually have a functioning SaaS version of the app, just the downloadable Java swing app.
Freelancer uses CMS to write new word list. It gets saved to database.
Periodically, I log in and run a rake task which dumps text files containing word lists which don’t have associated PNGs/PDFs created yet.
I then download them to a windows machine.
On that machine, I run a scripting thing (have forgotten name) which allows the computer to software automate the mouse and keyboard.
It then: opens the Java swing app, moves the mouse to X, Y whatever, clicks “New bingo card”, moves to the input area, clicks, types first…
word, hits enter, types second word, hits enter, etc.
It then hits Ctrl-P and prints the cards to a virtual printer driver that saves them as a PDF. It opens that PDF in the default PDF viewer and hits the screenshot key.
It opens that screenshot in MS Paint.
It uses MS paint to crop out all the parts of the screen except the actual bingo card, which it saves as a BMP.
It then uses GraphicsMagick to convert to a PNG for use on the website.
Script repeats for each downloaded list, then zips up deliverables. I upload to server.
I then fire a rake task which unzips file, copies PDFs/PNGs to appropriate places, and marks those cards as live in the CMS. Pages representing them go live on the website.
A few hours later, SEO traffic starts coming in.
How janky was this? Oh boy:
Because everything was pixel sensitive any touching of mouse or keyboard would ruin a run, and because the script had no ability to see what it was doing it had to go very slowly and rely on everything working.
So runs took an hour and being one pixel off blew up.
Since I had a day job at the time and didn’t want to spend my entire Saturday re-doing this in the event of e.g. a slight breeze or other gremlins, I would turn off screensaver/etc, turn on script, grab coffee, and babysit machine as it ran, aborting and retrying if it failed.
“Why’d you do this to yourself!?!”
I was a young engineer, didn’t have better options until I leveled up enough at Ruby to SaaS-ify the bingo card generation (about… a year later? Two?), and this jank made me more money than my actual job.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
None of this is all that surprising to anyone who knows the words “binary options” given the company kept there, and shady characters abound in crypto but were largely forced out / marginalized / conveniently ignored as the industry has may a play for legitimacy.
Celsius is not marginalized. They’re tied at the hip with Tether, the central bank of crypto, and there is a thin DeFi fig lead between them and centralized, ~indisputably legitimate organizations who are now offering crypto “earn” products.
This sounds like an extremely we're-living-in-the-future medical treatment, for depression: kqed.org/news/11898991/…
I have (currently relatively well-managed) depression, and an *extremely* disconcerting realization last year was that my brain was hardware with some number of parts and that some of those parts might be degraded, impairing my desire to continue running MeOS.
s/desire/ability/ ; Wow that's a bad editing error on this subject. Never had that issue.
Anyhow, very, very glad that we continue finding new treatments here. Severe depression is, and this is the understatement of all time, no fun at all.
I'm fascinated by the ritual of interbank verifications of transactions, which sometimes look like:
Bank A: Prove you're you.
You: *does*
Bank A: Alright let me put you on hold while I call Bank B's 1-800 number and explain situation.
*20 minutes passes*
Bank A: OK.
Bank B: Prove you're you.
You: *does*
Bank B: I'm satisfied. OK, what do you want to know?
Bank A: Can you confirm they have an account with you and read the most current balance?
Bank B: Yes. $X.
Bank A: OK we're done.
Bank B: Bye.
Bank A: Thanks for banking with us.
You: So what about that transaction?
Bank A: Oh we're going to bank the heck out of it now.
After encountering it in, goodness, late 2000s or so, added “New rule: no long-lived URL objects anywhere. Instantiate them from string immediately prior to doing an HTTP request using them.”
(We sadly had no linter at my employer, or rather we used fellow salarymen as linters.)
The amount of the Java stdlib that we had marked as Considered Harmful was far higher than my early career expectation.
As I’ve gotten more experience in my career, I’ve found this sort of thing is relatively common and, particularly at scaled shops, local standards emerge.
We expanded Stripe Tax coverage to Japan, helping Japanese businesses deal with the bewildering complexity of jurisdictions in the U.S. and 34 other countries (plus domestic consumption tax, naturally).
This sort of thing makes the world feel a little bit smaller, one step at a time.
As an entrepreneur in Japan, I was always happy that consumption tax was very predictable and that forms for submitting it were not complicated. This is not the case if you do business abroad, too.
This helps businesses feel like selling internationally is a natural linear extension of their domestic business, rather than a confusing tangle of rules suggesting maybe one should just not bother.
An observation I've made before: Microsoft should pay any amount of money required to clone homebrew.
And then it should make one of these for every popular stack.
It would presumably cost less than their soft drink budget for a few weeks.
"Do you care if they do?"
Yes, because until we solve usefully programming from a phone, kids are overwhelmingly more likely to have a PC than a mac, particularly the kids who we can most effectively nudge into engineering at margin (i.e. who are not tracked towards it already).