Creator: https://xitter.cf/t.co/NJ2j1gTH5i - UI Kit for Ruby on Rails using Tailwind & Phlex Engineering Lead @ Lodgistics

Mumbai
Joined April 2009
Manu J retweeted
We should be more ambitious with the software we build: danluu.com/ambitious/
21
57
12
572
31,560
Active Job Continuations is one of the most powerful recent additions to Rails, and its applicability goes far beyond restarts. Learn more in my recent #RailsWorld talk and check out AJDC: evilmartians.com/events/rail… github.com/palkan/ajdc
Deploys restart your job workers. In Rails 8.1, a long job doesn't have to start over. Include ActiveJob::Continuable, split the work into steps, and save a cursor as you go. When the job restarts, finished steps are skipped and the current one picks up from its cursor.
2
7
63
2,756
Manu J retweeted
Deploys restart your job workers. In Rails 8.1, a long job doesn't have to start over. Include ActiveJob::Continuable, split the work into steps, and save a cursor as you go. When the job restarts, finished steps are skipped and the current one picks up from its cursor.
6
9
3
98
6,479
Finally Rails 8.2 can have fibers all the way down. Load-testing @chat_with_work on Falcon: at 75 busy users the event loop spent 14% of its time just waiting for Ruby's GVL, stuck behind Action Cable's ~14 threads per process (streamers, worker pool, Solid Cable's listener). The fix is already in Rails main: @palkan_tula's Action Cable refactor (aka actioncable-next), lets fiber servers run cable work on their own event loop. Rails 8.2 + async-cable takes that from ~14 threads to 1.
4
13
2
136
6,515
I turned 39 today, and I invite you to join @sfrubyconf on Nov 10-11 for equal parts (1) learning about Ruby, AI and the frontier, and (2) party with me and your other Ruby friends!
46
8
156
3,295
Manu J retweeted
River has a new home page! @blakegentry wanted an homage to the old school Heroku login page circa 2011. Fun detail — the landscape is day or night based on darkmode. Inclusion of sakura tree boosts E2E work perf by 10%. Or maybe I made that up. riverqueue.com/
7
2
58
2,201
I cannot let a steam engine analogy go by without bringing up John Wilkinson, perhaps the most underappreciated engineer of the Industrial Revolution. Watt had figured out how to dramatically improve the steam engine, but he spent years struggling to actually manufacture one. The problem was embarrassingly simple: nobody could make a sufficiently round cylinder. The casting and machining tolerances were atrocious. Watt complained that one 18-inch cylinder was out of round by as much as THREE-EIGHTHS OF AN INCH. Steam leaked past the piston. He tried packing the gaps with cork, oiled rags, paper, and apparently even old hats. Nothing worked particularly well. Enter John Wilkinson, a British ironmaster whose immediate concern was manufacturing better cannons. At the time, iron cannons were commonly cast around a core, introducing defects and misalignment that could make the barrels inaccurate or dangerously weak. Wilkinson developed a process for boring cannons from solid castings, and in 1774 patented a vastly improved boring machine. The key innovation was almost comically mechanical: a massive, rigid boring bar, supported at both ends, that could cut a genuinely straight, circular hole instead of following the irregularities of the casting. He adapted this technology to Watt's cylinders. By 1776, Matthew Boulton was boasting that Wilkinson had bored a FIFTY-INCH cylinder accurate to within the thickness of an old shilling. Suddenly, the steam engine was a commercially viable machine. And the story gets better. Wilkinson became one of Watt's first customers, buying an engine to drive the blast machinery at his own ironworks. The steam engine was now helping manufacture the iron that made more steam engines possible. I find this whole episode absolutely extraordinary. The Industrial Revolution was, for a critical period, bottlenecked on the ability to make a sufficiently round hole. We remember Watt, and rightly so. We remember the invention of the steam engine and the subsequent development of thermodynamics. But the man who made the machinery that made the whole thing possible is practically a footnote. I think we consistently underestimate how much of scientific progress is actually downstream of advances in tooling, measurement, and manufacturing precision. It's not just that technology precedes theory. Sometimes the decisive breakthrough is that someone finally figures out how to build the thing the theorists have been talking about for twenty years. Anyway, I think John Wilkinson deserves considerably more credit for modern civilization than he gets.
a few thoughts: 1. pretraining science is kind of like how people built quite good steam engines before they understood thermodynamics. “Science owes more to the steam engine than the steam engine owes to science.”-(L.J. Henderson). if nick is right, which i am pretty sure he is, progress points in the direction of more interpretability, and pretraining was "slouching towards monosemanticity". my guess would be that major breakthroughs in interp also advance capabilities 2. nick is a good friend of mine, safe to say my origin story at openai wouldn't have happened if i hadn't met him, and it's fascinating watching him operate and seeing the early drafts evolve into this. he's the most profoundly happy guy I know- not driven by guilt, activism, or religious terror, but by fascination. he of course understands the stakes of understanding neural networks, but it doesn't seem like the core reason he does it: he just loves the neural nets. afaict he's posting this from some beautiful hideaway in tokyo. there's a lesson in there for all the +EV maxers. i feel very grateful to have met him 3. i do think it's crazy how few people across the world were staring at neural nets growing: most have moved to a different level of behaviorist analysis, thinking about reward functions and test scores and whatnot. it does not bode that well for the major model companies, oai included, that fundamental breakthroughs like this are coming from outside. we've become too much of a pressure cooker focusing on local incentives, studying narrow tracks under old paradigms, mostly doing engineering, rather than fundamental research, and implicitly hoping the next model will figure it out
67
394
44
3,663
101,443
Introducing: Ash.Signals 😎 Signals are a way to model complex side effects in large #AshFramework applications. They provide a typed contract and compile time guarantees, and can dramatically help when building applications with complex and interconnected domains. Check out the explainer! ash-hq.org/blog/introducing-…
13
12
3
128
4,949
I don't think it is fully understood what young people are putting on the line in these protests, their courage. They have no rank, money, access, privilege or social media following. Esp. young women who also face the risk of physical harassment. An extraordinary generation.
This HT photo from Mumbai is very disturbing.
2,049
38
7,910
65,562
Thank you, Pune ❤️ To our speakers, attendees, sponsors, supporters, volunteers, organising team and the Ruby community: you made Deccan Queen on Rails possible @hideccanqueen These slides are for everyone who helped make it happen. Thank you! 🚂💎
1
8
1
44
1,107
The people who made it all happen. ❤️ To our mentors and volunteers for sharing their time and knowledge, and the @Zendesk team for opening their doors to Rails Girls Pune, thank you for making this day possible! #RailsGirls #DeccanQueenOnRails #RubyOnRails
4
9
279
When Rails World met the Indian Rails Community in Pune!
8
1
21
1,232
Let’s optimize Ruby, the tiny purple segments, or let’s optimize the web server for concurrency, cause our apps spend most time waiting for I/O? The chart is a typical AI-powered workload. Great talk on Falcon and Async by @ioquatix Katie Lawhorn and Tavian Barnes from @Shopify
3
7
51
2,013
Keynote in progress at Deccan Queen on Rails. 🎤🚂 The room is buzzing and we’re settling into a great day of Rails conversations. Can’t join us in Pune? Catch the keynote live here: youtube.com/live/gxi9ZFuvuKw… #DeccanQueenOnRails #RubyOnRails #RailsCommunity
5
13
439
In programming, "speed" is not so simple to measure. There are a few measures you look at: Concurrency: The number of things your system can handle at once. Throughput: The actual number of requests served per second in real world conditions. Latency: How long it takes for any one request under real world conditions to complete. This includes queueing delay. Queueing Delay: How long a request has to wait at the front door before your system even starts processing it. You typically are playing a balancing act between maximizing throughput and minimizing latency on any single server, while increasing number of servers (capacity) to account for actual load. A system under load does not behave the same as a system with spare capacity. Raw speed doesn't save you under contention, because "just do the thing as fast as it can possibly be done" is just insufficient. Instead, you have to write your code in such a way that any one given thing can "yield" to other things. If you don't, the requests you're working on finish quickly, but once all of your threads/processes are fully utilized, you have no way to handle more load without introducing queueing (which eventually becomes failures/timeouts) on callers. This brings us to queueing delay. When the system is processing all of the data that it can, the callers have to all just sit there and either wait, retry or fail. If your system were able to accept more concurrent work, you can lower this queuing delay under heavy load. If you can't do that, you end up trading away too much of your goodput (requests that actually succeed within their deadline) in exchange for consistently low latency for the operations that you do handle. When building systems at scale, the general guiding light is keeping the queue delay low, and keeping goodput as high as possible. To do this, you accept as much work as the internal system can track (increasing memory usage typically), allowing latency to go up, in order to accept more concurrent traffic internally. You still need backpressure and load shedding, since no scheduler saves you from arrival rates that permanently exceed what you can serve, but within those bounds you keep goodput maximized. For this to actually work, your internal schedulers need to be able to do something called "preemption". This is where any given operation cannot take an entire CPU core for longer than some given period of time, or for some amount of operations. A "preemptive scheduler" balances work fairly across all of the operations that are asking for CPU cycles. (Work stealing, where idle cores pull queued work from busy ones, helps too, but plenty of cooperative runtimes have that. Preemption is the key part.) The BEAM is a powerhouse for this. It preempts processes by counting "reductions," so no process can hog a scheduler. Immutability and share-nothing processes make that preemption cheap and harmless: a process is never paused while holding a lock someone else needs, and every process has its own heap and garbage collector, so there are no global stop-the-world pauses. This allows BEAM applications to achieve maximal goodput, with very low failures due to queue delay, while spreading latency across all work fairly. Without that preemption, you would see a huge spread among the latency of your system. i.e some requests happening practically immediately, while other requests take pathologically large amounts of time to complete. I get that people want programming language not to matter these days, but at a very minimum you cannot escape the limitations of your runtime. The BEAM's runtime is built for operating at scale, and will always be smoked on benchmarks for tight loop operations where there is no resource contention. #ElixirLang
BEAM is not faster than Rust so something is wrong with the Rust code
7
45
5
274
8,288