The work of software dev has switched from
mainly "how do I make it work" to
mainly "how will I know it works?"
and I am here for it. This part of the problem is hard and juicy.
So, a few weeks back I needed to make some AI images and wanted to try out OpenAI's new model. Didn't have a ChatGPT sub, so I coded a little tool to mess around with its API. Just threw it up on GitHub if anyone wants to play. More info here: https://t.co/fwAp7HSZtb
Node-based UI, supports text-to-image & multiple image-to-image (perfect for consistent characters). It also does inpainting (but with gpt-image-1 results may vary 😜). All browser-based, no server. Files stay on your device. You'll need your own OpenAI key.
It's done. Now it’s your turn, @Oracle.
We’ve submitted a formal petition to cancel the JavaScript trademark: it is generic, Oracle has abandoned it, and Oracle committed fraud on the USPTO during the last trademark renewal.
Oracle has until January 4th to respond, or the case will go into default, which will result in the trademark being canceled.
It's time to #FreeJavaScript.
https://t.co/fBYOIBMOIf
I’ve just finished a little project called Duel Times! 🎉 It’s a little web-based game I made to help my kids practice with multiplication tables. It’s free and open source, so feel free to check it out and share it: https://t.co/Vr0ABWFAbx 😁
I’ve just finished a little project called Duel Times! 🎉 It’s a little web-based game I made to help my kids practice with multiplication tables. It’s free and open source, so feel free to check it out and share it: https://t.co/Vr0ABWFAbx 😁
Shopify increased their write throughput by 50% moving one of their MySQL keys from UUIDv4 to ULID.
But How?
When you make a purchase, Shopify guarantees idempotency by having the client uniquely tagging the request using UUID. If you accidentally replay the request and they check if the request exists or not and no-op.
UUIDs (at least version 4) are random while order placements are ordered, this leads to thrashing pages in and out of the buffer pool as it fills up dramatically slowing down writes.
Shopify replaced their primary key to ULID which is ordered and timestamped so now requests are chronologically ordered and as a result requests in a given time period live almost in the same pages and recent request (which is the common query) live in tail pages keeping those hot in memory.
Also worth mentioning that UUIDv7 and 8 are ordered and work as well, this is specific to UUIDv4.
Watch my full coverage on this amazing change, truly show engineers knowing what they are doing
The topic of UUID is surfacing again so I thought I’d share this again
The biggest problem with Unit Tests is that most folks define a Unit as being way too small.
I wonder if it’s because the toy problems used for teaching it inadvertently scope the biggest unit available for testing to be so small to begin with.
I wrote this Format dialog back on a rainy Thursday morning at Microsoft in late 1994, I think it was.
We were porting the bajillion lines of code from the Windows95 user interface over to NT, and Format was just one of those areas where WindowsNT was different enough from Windows95 that we had to come up with some custom UI.
I got out a piece of paper and wrote down all the options and choices you could make with respect to formatting a disk, like filesystem, label, cluster size, compression, encryption, and so on.
Then I busted out VC++2.0 and used the Resource Editor to lay out a simple vertical stack of all the choices you had to make, in the approximate order you had to make. It wasn't elegant, but it would do until the elegant UI arrived.
That was some 30 years ago, and the dialog is still my temporary one from that Thursday morning, so be careful about checking in "temporary" solutions!
I also had to decide how much "cluster slack" would be too much, and that wound up constraining the format size of a FAT volume to 32GB. That limit was also an arbitrary choice that morning, and one that has stuck with us as a permanent side effect.
So remember... there are no "temporary" checkins :)
Follow me for more random code musings!
Grain v0.6 Emmer is finally here! This release is absolutely stacked with new features, including a new module system, early return, labeled + default arguments, and much more. Check out our official blog post to read all about it! https://t.co/4MmdMZYsIz