Puma, Falcon, or Pitchfork? Choosing the right web server for your Ruby app is a big decision.
In my @railsconf talk, I break down the key differences, performance trade-offs, and how to choose the right one for your specific application.
https://t.co/3xh4hOzOjF
Elixir v1.20 released! Now officially a gradually typed language: Elixir type checks every single line of code, finding bugs and dead code, without developer overhead (no typing signatures) and extremely low false positives rate. Plus a faster compiler! Links and reports below.
Super cool news tonight: Rails realtime now runs on the server of your choice 🔥🔥🔥
Vova’s Action Cable server adapterization PR was merged 🥳. Same Channel and Connection code, swappable runtime underneath: Falcon, Fibers, async-cable.
This is the groundwork AnyCable has been proving in production for years, now landing in Rails itself.
People credit Rails’ longevity to DX. I think the secret behind it is adapterization pattern: every layer hides a default behind an interface, so the framework absorbs each new wave of innovation without a rewrite. Others wire it up with extra services. In Rails you swap the implementation as you wish, keeping the code intact.
Two years in the making, with
@ioquatix, @matthewd and @rafaelfranca steering the reviews. Congrats @palkan_tula 🥳
I've got an agent in a loop optimizing a renderer with the goal to minimize frame times (and tests to measure). It got times down from 88ms to 2ms and allocations down from ~150K to 500. Sounds good, right? Wrong. This is exactly why agent psychosis is a big fucking problem.
As an experiment, I rewrote the Ghostty core render state in Go, with access to identically laid out data structures as Ghostty and the exact same validation tests. I made a purposely naive renderer (simple, correct, but slow). 88ms per frame with 150,000 allocations (horrendous, lol)!
I then kickstarted a Ralph loop to bring the frame times down. I told it it can't modify input data structures or the public API or tests (they're correct), but it can do anything else it wants. It got to work.
It has worked for about 4 hours. I've spent around $350 on this experiment so far. The results?
88ms => 1.5ms
150K allocs => ~500 allocs
Incredible right? Nope.
My hand-written renderer I ported has frame times (same benchmark) of ~20us (0.020ms) and 0 allocations in the update path.
This is the problem with psychosis and lacking systems understanding. If you don't understand the system, you're going to accept that this is an incredible result. If you understand the system, you'll see better solutions immediately and can do roughly 75x better on throughput.
The people who blindly trust agent output are in the former camp. They're sheeple, overdrinking from a fountain of mediocrity.
Standard disclaimer: I use AI all the time. I like AI. The point I'm making is to not blindly accept results. Think. Analyze. Learn.
I had hacked CBSE's OSM (On-Screen Marking Portal) in February and had reported the vulnerabilities to CERT-In, but they were unable to patch most of them.
I've written a detailed blog post about it here: https://t.co/qyT23GkTEJ
Just added Skills to https://t.co/ZpFQtfR5v5!
Every article now has a Markdown version built for agents.
Over time, I’ll be curating a living performance skill from everything I’ve learned along the way.
Introducing https://t.co/ycxJEf1z7w!
A new space where I explore how the best apps in the world are built.
First piece:
How's Linear is so fast? a technical breakdown.
https://t.co/9Vu1syrn1i
I've been recently experimenting with a new way to run e2e flows in React Native. Same maestro e2e test, same yaml, but 2-3x faster.
learn about Ennio 🧵
Her name was Lini Puthussery.
She was 31 years old. A nurse at the Perambra Taluk Hospital in Kozhikode Kerala. She had been working there for six years.
She had two sons. Ritul was five years old. Sidharth was two years old.
In May 2018 the Nipah virus arrived in Kerala. Two brothers and a relative were brought to the hospital with symptoms nobody had seen before.
Lini was on night duty when they arrived. She cared for them through the night.
They died soon after. Confirmed Nipah positive.
By Friday Lini herself had fallen ill.
She was shifted to the ICU at Kozhikode Medical College Hospital.
When she learned she had contracted the Nipah virus she asked the hospital not to allow her two sisters to visit. She did not want them exposed.
From the ICU she wrote a note to her husband Sajeesh.
“Sajeesh I am almost on my way. I don’t think I will be able to see you. Sorry. Please look after our little ones and take them to the Gulf. They should not be alone like our father. Lots of love.”
She died on May 21, 2018.
Her body was cremated quickly to prevent the spread of infection. Her family could not say a proper goodbye.
She did not hesitate when the patients arrived.
She did not ask who would care for her sons if she fell ill.
She showed up for her shift and did her job.
Today is International Nurses Day.
Her name was Lini Puthussery. She deserves to be remembered.
Pulled 120+ malicious packages from @rubygems today.
The target wasn't end users - it was RubyGems itself (XSS, data exfiltration).
Reminder: sometimes the registry is the one under attack.
#ruby#rubygems#security
Carbon Fiber is a high performance Ruby Fiber Scheduler powered by Zig and libxev (same as used in Ghostty).
I've just released a new version: updated to Zig 0.16, latest libxev. Some optimizations, too—it's now faster! (benchmarks in README)
https://t.co/Z1wCIOjAbG
Really exciting to see Herb being adopted at GitHub! 🌿
Over the past months, the GitHub team has been running Herb across one of the largest Rails codebases out there where Herb helped uncover real issues missed by existing tooling while also providing invaluable feedback. 🙌
Claiming that "all my code is now written by an agent" is ambiguous. It includes:
1. Folks who know what they are doing and care about software design, who can now produce code much faster.
2. Vibe coders who treat the agent as a black box that generates a working system.
I validate daily that, with the current models, vibe coding is not suitable for building minimally maintainable systems. Agents introduce major internal quality issues quickly and spread them even faster because they echo existing patterns so well.
I see two challenges for programmers today:
First, learning how to do (1) properly: how to create the right context for agents, how to orchestrate them and manage their memory, how to remove toil, parallelize work, etc. In other words: maximize the value we can extract from this new sorcery.
Second, vibe coding is fantastic for non-programmers to create value by doing things they could not do before: quickly iterating on ideas, automating workflows, building ad-hoc tools, and so on. The key question is: where internal software quality starts to matter, and how to enforce it without diminishing this new source of value.
I am also increasingly convinced that many companies that blindly embrace vibe coding and chase futuristic PR headlines are about to discover the terrors of technical debt at scale.
I've been working hard on getting Syntax Tree migrated to Prism, and I keep having "oh but this one more thing" moments.
The rabbit hole is deep on this 🧵. For context, the PR I'm trying to get pushed over the finish line is:
https://t.co/54F5Gi4r3N
@robzolkos@andrewculver What have you both learnt and how? I'm finding that LLMs are great at filling in gaps (known unknowns) but for something completely unknown I'm not confident of trusting it 100%.
Instead of going back and forth with your agent saying "hmm little more, no a little less" just ask it to build you a control to tweak it yourself, then give it the params you like.