
@lstrojny@phpc.social Short-term pessimist, long-term optimist.
Munich, Bavaria
Joined March 2007
- Tweets8K
- Following1.6K
- Followers857
- Likes1.1K
Pinned Tweet
Broken window for software engineering: notices become warnings, warnings become errors, errors become outages, outages become bankruptcies. – at Munich, Germany
Lars Strojny retweeted
Hey #PHP,
Casual Saturday morning ...
0.03 seconds on bare metal with avx2, 0.05 (if the timer can be believed) in your browser with wasm simd ...
krakjoe.github.io/ort/
"The Solution" tab is where you run code ...
#php #ai
Lars Strojny retweeted
> our implementation was not developed by Mozilla employees, but was contributed entirely by a single volunteer, André Bargull.
Temporal is an absolutely massive spec and complicated implementation - it's been YEARS in the making.
André out here just beating out billion dollar corps
Lars Strojny retweeted
I was talking with my friend @nealriley about how much fun I’m having with LLMs lately, including the project I've written about before to interpret screenshots of podcasts and YouTube videos. I made the observation that working with LLMs seems to boil down to a pattern of creating ETL pipelines, over and over again.
He quickly corrected me, suggesting, "Don't you mean ELT pipelines?"
I laughed at his curious and unexpected comment, which seemed unusually pedantic. However, I found myself thinking about his comment for days afterward.
It reminded me of a quip from Rich Hickey, inventor of the Clojure programming language: "Information is simple. The only thing you can do with information is ruin it."
In my experience, what Rich said is so true, and shows that Neal was absolutely correct. What I meant to say is "ELT," not "ETL." In other words, you should Extract, Load/Store, and then Transform data, in that order (ELT). Unless you love misery, you should not Transform before you Load/Store (ETL).
Over the last many decades, I've ruined data in so many many ways, for me, the “T” in “ETL” stands for tarnish, trash, taint, etc.
I’ve accidentally converted date-time strings incorrectly (turning them all into nils), I’ve discarded data fields that I thought were irrelevant, but years later, I wish I had kept them because it is priceless information, impossible to reconstruct. I’ve accidentally overwritten data, deleted data, and so many more terrible things, Thankfully, I've wiped those episodes from my memory, lest I start kicking myself again.
This is because I was Transforming the data (or Trashing it) before storing it.
One of the things I've learned from the Clojure and cloud community is the value of just storing data in its original form, often in storage buckets, deferring any transformation of the data to afterward, often at runtime (i.e., Extract, Load/Store, then Transform).
I almost made this mistake last week: I mentioned how I use @revai and @deepgram and to create podcast audio transcripts. At first, I converted the audio transcripts to match the format used by the python-transcript-api program. That way, I could use the same code to render the transcript, regardless of what the transcript source was.
This is when I once again learned that the only thing I could do to the data is to ruin it.
So instead, I saved the entirety of the transcript in its original format, including the full API return payload. That way, I’m preserving optionality, enabling myself to use that data in new ways in the future. By discarding the data, I destroy that optionality.
Today, I saw one such potential option: I realized that transcript diarization could be helpful (this is when transcripts detect when there are multiple speakers talking, and ideally labels them). The YouTube-transcription-api doesn’t support speaker labels, and I would have discarded that data to match it.
My lessons:
- Store your data in as close to its original form
- Defer data transformation to after you load/store it
Lars Strojny retweeted
Last January, I noticed something peculiar in my 2yo’s bedroom that - after a year of obsessive reporting - led me to a profound cosmic revelation about what’s even possible in our universe. A 🧵.
Lars Strojny retweeted
ssh has secrets. Too many to share in one tweet. One of which is how it acts as a serial-line processor for secret keyboard functionality you probably never knew about. For example, why, when you press ENTER and then ~ immediately after, does the ~ not appear right away? Thread…
If you are handling unicode user input you are likely doing it half wrong without realizing it until it’s pretty costly to fix.
Congrats, you earned yourself a data migration project.
This is what uffff solves, a PHP library to filter unicode user input uffff.readthedocs.io/en/late…
Lars Strojny retweeted
So there's a great Thai restaurant in my neighborhood called Kiin. Yesterday, I searched for their website to order some takeout. Here's the Google result.
Lars Strojny retweeted
It's wintertime, which means Scotland's beautifully named salt trucks are out and about
TIL. Also WAAAAT
Just because you can doesn’t mean you should
![Horribly complicated ansible jinja2 snippet
{{
custom_kernel_boot_entries.stdout_lines |
map('regex_replace', '^(Timeout|BootOrder|BootCurrent).+$', '') |
select | map('regex_replace', '^Boot([0-9a-fA-F]+)\*?\s+(.+)$', '\1%-%-%-%-%-%\2') |
map('split', '%-%-%-%-%-%') |
json_query('[*].{ bootnum: [0], name: [1] } | [?name == `Linux Boot Manager` || contains(name, `systemd-boot`)]')
}}](https://pbs.twimg.com/media/FjkDmWmWYAIpOtX.jpg?name=small&format=webp)
ALT Horribly complicated ansible jinja2 snippet {{ custom_kernel_boot_entries.stdout_lines | map('regex_replace', '^(Timeout|BootOrder|BootCurrent).+$', '') | select | map('regex_replace', '^Boot([0-9a-fA-F]+)\*?\s+(.+)$', '\1%-%-%-%-%-%\2') | map('split', '%-%-%-%-%-%') | json_query('[*].{ bootnum: [0], name: [1] } | [?name == `Linux Boot Manager` || contains(name, `systemd-boot`)]') }}
.@nabijaczleweli’s tzpfms to unlock ZFS from TPM(2) (git.sr.ht/~nabijaczleweli/tz…) provides a really lovely user experience. Well integrated with both initramfs-tools and dracut, integrates well with zfs-mount-generator for systemd. So happy I stumbled upon it.
After a good long break I am ready to get back into the saddle and I am looking for my next role. While I have a few ongoing conversations, hints are very welcome. I am looking for either high impact people management roles or deeply technical IC roles. Remote is a requirement.
You are not strengthening your criticism of Musk with reference to it being bad business. If basic human decency turns out to be less profitable, that’s not an argument against decency.
Lars Strojny retweeted
Unter dem Vorwand der „Terrorabwehr“ greift der Nato-Partner Türkei direkt nach dem G20-Gipfel kurdische Gebiete an, mit Kobane – einer Stadt, die wie keine andere für den Kampf gegen den islamischen Staat steht – als einem der Hauptziele. Wo bleibt der Aufschrei?
Lars Strojny retweeted
Wrote a blog on why AWS never dove seriously into blockchain. Features groovy pix from a trip to New York, which is part of the story: tbray.org/ongoing/When/202x/…

























