@joel.drapper.me 🦋 Profile Banner
@joel.drapper.me 🦋 Profile
@joel.drapper.me 🦋

@joeldrapper

Followers
10,577
Following
556
Media
222
Statuses
3,537

Ruby, TypeScript, CSS engineer at Prevail — I work on Phlex, Flecks and Morphlex as well as Literal and Quickdraw. Email: joel @drapper .me Signal: joeldrapper.01

Oxfordshire 🇬🇧
Joined August 2008
Don't wanna be here? Send us removal request.
Explore trending content on Musk Viewer
@joeldrapper
@joel.drapper.me 🦋
5 months
When Tesla say “fly by wire”, they mean *Hotwire*. You bet there’s a round trip to the Rails server.
218
108
3K
@joeldrapper
@joel.drapper.me 🦋
5 months
This isn’t really a fair test though because it’s clearly simulating a “Slow 3G” connection.
10
7
985
@joeldrapper
@joel.drapper.me 🦋
1 month
It’s pretty gross that the Ruby Conferences website is promoting a conference in Moscow. Are we really that out of touch? So disappointed.
42
70
801
@joeldrapper
@joel.drapper.me 🦋
5 months
@MattStopa Maybe steering a 3.4 ton vehicle should be local-first with no lag. 🤔
10
3
411
@joeldrapper
@joel.drapper.me 🦋
4 months
I’ve been using Zed ( @zeddotdev ) for about a year now, and I absolutely love it. I recorded a quick introduction for Ruby developers.
34
44
330
@joeldrapper
@joel.drapper.me 🦋
5 months
@mscccc 🤣 it’s not accurate anyway. There are literally frames where the driving wheels and steering wheel point in different directions.
4
1
235
@joeldrapper
@joel.drapper.me 🦋
6 months
How can I simulate a million realistic requests per minute to my Rails app? Are there services that’ll do this for a reasonable price?
73
14
236
@joeldrapper
@joel.drapper.me 🦋
6 months
It’s common for a Heroku bill to be over $1,000 USD / month even for relatively small apps. Do you know what you could get for that price if you just used one server with SQLite? You could have a terabyte of RAM, 40 terabytes of NVME SSD storage and 128 core AMD EPIC CPU.
28
18
206
@joeldrapper
@joel.drapper.me 🦋
5 months
To be clear, this is a self-deprecating joke based on the conversation about Hotwire and server-side-rendered apps over the last few days. Tesla is obviously not calling out to a Rails server, and the lag would obviously be fine at high speeds.
@dhh
DHH
5 months
This guy "forgot" to share that to create this clip he artificially throttled his browser to 3G. If you do the same on, say, Google Calendar, a full SPA, the result is as bad or worse. Yes, web apps require a web connection to work. News at 11!
115
101
2K
3
2
197
@joeldrapper
@joel.drapper.me 🦋
1 month
Rails, SQLite, Phlex, Tailwind, Literal, Falcon, Async, Vite, Bun, Typescript. This stack is fucking based and I’m moving so fast. Also RubyLSP in Zed is fire.
12
2
188
@joeldrapper
@joel.drapper.me 🦋
5 months
@nikillinit I don’t have a wallet. They could just be European where point of sale hardware is about 10 years ahead. I’ve also never owned a chequebook and the first time I ever signed for a card payment was in the US.
26
0
168
@joeldrapper
@joel.drapper.me 🦋
1 month
I will never travel to Moscow while Russia continues its aggression against Ukraine. At least not as a civilian.
8
1
185
@joeldrapper
@joel.drapper.me 🦋
1 month
Here’s a proper demo of a new Ruby Gem we’ve been cooking up. It’s called Flecks. It’s a couple of Phlex components that make it possible to stream asynchronous slots out of order in a single HTTP request with no JavaScript — not even Turbo. Check it out!
17
24
183
@joeldrapper
@joel.drapper.me 🦋
1 month
Working on my first Rails 8, Tailwind 4, Phlex 2 app today.
10
1
175
@joeldrapper
@joel.drapper.me 🦋
2 months
New website is coming along, ready for Phlex 2.0. 🤞
Tweet media one
11
10
155
@joeldrapper
@joel.drapper.me 🦋
6 months
Why can some companies put out feature after killer feature in record time with a tiny team, while others with hundreds(thousands?) of devs struggle to keep the ship from sinking? It’s because those companies invested heavily in the design and maintainability of their software.
24
10
152
@joeldrapper
@joel.drapper.me 🦋
1 month
@ffaebi Ticket sales, hotel bookings, restaurant bills are all taxed by the Russian government, which directly funds war crimes in Ukraine. I have nothing against the friendly Rubyists running the conference but we shouldn’t send them any external funds or encourage others to.
8
0
146
@joeldrapper
@joel.drapper.me 🦋
5 months
With Tree-sitter, semantic selection, built-in support for running tests, Ruby LSP, Tailwind LSP, Stimulus LSP, Vim mode, Copilot and AI refactoring, Zed ( @zeddotdev ) has quickly become the **best** text editor for Ruby.
19
6
142
@joeldrapper
@joel.drapper.me 🦋
1 month
Phlex 2 will provide hints to Ruby language servers about HTML elements and their attributes.
Tweet media one
Tweet media two
6
5
133
@joeldrapper
@joel.drapper.me 🦋
1 month
@strzibnyj I get it but not in this case. How many Rubyists have died? How many Rubyists are on the front lines fighting for their existence every day? This isn’t an issue we can stay out of. We’re already in it. To ignore the war is to support the war.
3
4
118
@joeldrapper
@joel.drapper.me 🦋
9 months
I’m building a new Web 2.0 app in 2024. No AI. No React. Embracing web standards and the back button still works.
9
3
110
@joeldrapper
@joel.drapper.me 🦋
1 month
@ffaebi You are so out of touch.
1
0
110
@joeldrapper
@joel.drapper.me 🦋
1 month
1
0
111
@joeldrapper
@joel.drapper.me 🦋
1 month
RubyRussia 2024 has been removed from the RubyConferences listing. 🎉 Thank you for standing with Ukraine🇺🇦. We *cannot* continue ‘business as usual’ in Moscow while our friends are being murdered. To those in the comments defending genocide with ‘whataboutism’, fuck you. 🖕
8
12
109
@joeldrapper
@joel.drapper.me 🦋
1 month
This streaming thing I’m working on now supports async tasks, flushing the output of each slot as soon as it’s ready. Imagine one of these is an async database query while the other is a JSON API call. Notice how B is rendered first even though it’s after A. No JS required.
21
6
104
@joeldrapper
@joel.drapper.me 🦋
5 months
It’s so awesome that @zeddotdev lets you use the @tailwindcss LSP with Phlex.
Tweet media one
9
3
101
@joeldrapper
@joel.drapper.me 🦋
3 months
It’d be sick if you could store a SQLite db in a binary column in Postgres and query it remotely. Way more useful than JSONB.
26
4
105
@joeldrapper
@joel.drapper.me 🦋
6 months
I’m not using the term “technical debt” anymore. Debt can be useful, giving you leverage for an investment. There is nothing useful about bad code. Ever. Bad code, bad architecture is poison, contaminating and polluting everything. Most companies are already past hope. It kills.
41
7
100
@joeldrapper
@joel.drapper.me 🦋
7 months
I’m not a spam bot; I’m a human who cares about Ruby and Rails and all my friends here. I dedicate a huge portion of my life’s resources to Ruby and Rails. If I criticised a technical decision you made in OSS, it’s because I care, not because I think I’m better than you.
4
1
98
@joeldrapper
@joel.drapper.me 🦋
7 months
Now I’ve actually used ViewComponent at work, I’m pretty confident Phlex is a 10x productivity boost if you use it right. I need to focus on documentation because almost no one knows how to do this. I’m putting together a video course that will be free for everyone.
6
3
99
@joeldrapper
@joel.drapper.me 🦋
1 month
Can we please start accepting that Typescript is a perfectly reasonable language for your next web application, the same way we accept Python and PHP? I’m getting tired of this, and I’m a developer who loves Ruby and thinks Rails is great.
26
1
97
@joeldrapper
@joel.drapper.me 🦋
7 months
I’m sponsoring five people who I think are doing some of the most impactful open source work in Ruby right now. At least in the areas that interest me the most: 🧵
3
15
92
@joeldrapper
@joel.drapper.me 🦋
6 months
I’ll have more to say on this soon — I need to run some more tests — but I want to reassure you, Ruby is not slow. Rails is not slow. A 48-core Hetzner can handle a lot more than 80 RPS. You can add at least two zeros to that number. And then you can probably double it.
9
4
92
@joeldrapper
@joel.drapper.me 🦋
7 months
I find it hard to believe Ruby devs actually enjoy writing a jumble of HTML, ERB, Ruby and inline Tailwind directives in a huge unstructured string literal template file, PHP-style. It’s probably why so many Rails teams are handing the view layer over to React.
46
2
88
@joeldrapper
@joel.drapper.me 🦋
1 month
This is pretty sick.
11
3
89
@joeldrapper
@joel.drapper.me 🦋
10 months
👋 I’m looking for a new remote position — either contract or permanent — doing full-stack #Ruby / #Rails / #TypeScript / #CSS engineering. Ideally, either library/infrastructure work, or a Multi-Page-Application with a company that cares about quality and performance.
7
46
86
@joeldrapper
@joel.drapper.me 🦋
6 months
It’s old, but I still recommend Refactoring Rails as one of the best courses you can take to level up as a Rails developer.
4
6
87
@joeldrapper
@joel.drapper.me 🦋
5 months
@praeteritia @MattStopa Right, it’s probably not much of an issue in real life. Kinda like Hotwire modals.
3
0
87
@joeldrapper
@joel.drapper.me 🦋
5 months
@Techgnostik A very serious one.
3
0
86
@joeldrapper
@joel.drapper.me 🦋
4 months
My new favourite game is to see how much TypeScript I can write without any testing (manual or automated) and still have the feature work perfectly first time. Unthinkable in Ruby, but totally doable in TypeScript. I know type safety doesn’t replace tests but it sure helps!
18
2
82
@joeldrapper
@joel.drapper.me 🦋
5 months
@VitaeKate Just as long as the “new event” modal in your calendar is < 3ms, it’s all good.
0
0
82
@joeldrapper
@joel.drapper.me 🦋
5 months
Here’s how I would do it.
Tweet media one
Tweet media two
@coorasse
Alessandro Rodi
5 months
How do you usually avoid this in #tailwind ? #rubyonrails
Tweet media one
76
1
43
7
3
81
@joeldrapper
@joel.drapper.me 🦋
1 month
There are now at least four third-party UI kits built on Phlex: PhlexyUI, ZestUI, Protos and PhlexUI.
Tweet media one
3
5
79
@joeldrapper
@joel.drapper.me 🦋
1 month
It takes about ~3ms to render a medium sized web page at ~1gbps. The rest of the time is spent waiting for database queries, API calls and other IO. But what if we could instantly stream all the static bits, and then slot in the slow parts later? I think this is the solution.
@joeldrapper
@joel.drapper.me 🦋
1 month
This is pretty sick.
11
3
89
11
6
79
@joeldrapper
@joel.drapper.me 🦋
11 days
PSA Ruby hash rockets `=>` are not “old style Ruby hashes”. There *is* a new alternative syntax for when your keys are symbols, but there is nothing “old” or “deprecated” about creating hashes with non-symbol keys. It’s not a code smell, not bad taste.
8
5
79
@joeldrapper
@joel.drapper.me 🦋
6 months
@josephkerkhof My take: it’s because servers are powerful enough that it now makes sense to run a web app on a single server. The vertical setup: one server with your app and database side-by-side can take you so far now. It makes everything much simpler and faster.
6
1
73
@joeldrapper
@joel.drapper.me 🦋
8 months
Being laid off by @ShopifyEng meant I could build Phlex, and now I’ve been laid off again, I’m taking it to the next level with LiteMorph and selective fragment rendering. It would be nice if this could keep happening every couple of years. 🙏
7
1
75
@joeldrapper
@joel.drapper.me 🦋
6 months
Caching views is probably a bad idea. Try to cache the data instead. Or better yet, fix your slow database queries.
9
9
76
@joeldrapper
@joel.drapper.me 🦋
5 months
When they come after our Hotwire modals.
4
0
76
@joeldrapper
@joel.drapper.me 🦋
7 months
I’m excited to share I’m starting at @PrevailLegal this week. 💪
16
0
75
@joeldrapper
@joel.drapper.me 🦋
4 months
I’m quite excited to be *someone who thinks like a Rubyist* now exploring the JS world. Between Svelte 5, SQLite, Bun, Drizzle and TypeScript, I think there’s so much potential for a full-stack framework that’s at least as good as Rails but with some specific advantages.
@Shpigford
Josh Pigford
4 months
the javascript world is a constant stream of "here's a 3rd-party service you can sign up for to solve your dev problem".
10
6
132
21
0
75
@joeldrapper
@joel.drapper.me 🦋
1 month
@prorizna Yeah, it’s fucking disgusting. I wish I could do more.
3
0
72
@joeldrapper
@joel.drapper.me 🦋
8 months
I know Postgres is a really great database, but if I was starting a new Rails app today, I would either pick SQLite with Litestream or MySQL on PlanetScale, depending on my expectations for scale.
10
5
69
@joeldrapper
@joel.drapper.me 🦋
2 months
Nothing like an upcoming conference talk to motivate you to fix your docs and get 2.0 out the door. I’m speaking about Phlex at EuRuKo on the 12th.
2
2
70
@joeldrapper
@joel.drapper.me 🦋
4 months
I was *literally* PIP’d for doing 3-months work in ~3 days, with a different approach to the one my manager — who thought himself very smart but was actually completely clueless — came up with. Managers with no engineering experience shouldn’t dictate engineering architecture.
@joeldrapper
@joel.drapper.me 🦋
4 months
@jmddotfm @edandersen This is not always the case. You can be PIP’d while performing well above what’s expected of you, because your manager has a superiority complex.
1
0
7
11
1
68
@joeldrapper
@joel.drapper.me 🦋
15 days
On the right, my browser is subscribed to server-sent-events via Yippee. It receives a notification for each change, then it fetches the new content hitting Yippee’s router. Yippee reloads the code using Zeitwerk, then Phlex renders the view and Morphlex morphs it into the
8
3
69
@joeldrapper
@joel.drapper.me 🦋
20 days
@WordPress @dhh Publicly admitting that this is blackmail is wild.
1
1
67
@joeldrapper
@joel.drapper.me 🦋
6 months
Ruby/YJIT is so fast that Phlex can render ~1.4 gigabits of HTML per second on a single laptop core. That means you could in theory saturate a 10G uplink from an 8-core server. 🤯
3
2
68
@joeldrapper
@joel.drapper.me 🦋
4 months
There are huge DX benefits to using a dynamic type-checker for object properties in Ruby. Literal is really close to a 1.0 release now.
Tweet media one
7
7
66
@joeldrapper
@joel.drapper.me 🦋
5 months
It’s so funny when tech bros think their million line 8-megabyte JavaScript app that crashes if you have a password manager installed will be more stable on poor internet connections and low-end hardware than a few bytes of HTML and CSS.
@theo
Theo - t3.gg
5 months
This is the "web is slow because all web devs have fancy Macbooks" argument but somehow worse? Lol
30
14
468
2
6
67
@joeldrapper
@joel.drapper.me 🦋
6 months
Is it just me or are Kanban systems absolutely useless for planning feature work? Linear, Trello, Shortcut, GitHub Projects — they’re all *fine* for discrete “bugs”. But *features* are inherently hierarchical, and they should be expressed hierarchically in our systems.
26
2
65
@joeldrapper
@joel.drapper.me 🦋
6 months
I’ve been using Phlex’s experimental component kits feature this morning and I love it.
Tweet media one
6
4
67
@joeldrapper
@joel.drapper.me 🦋
6 months
@nateberkopec This doesn’t seem right. It doesn’t take .6s of CPU time to build a web request.
1
0
64
@joeldrapper
@joel.drapper.me 🦋
5 months
I just got a prototype working for a phlex-rails feature that will let you alt-click an element in the browser to immediately open your editor to the line where that element is defined. This is so useful I’m going to work on a 1.11 release for phlex to get this out before 2.0.
7
7
63
@joeldrapper
@joel.drapper.me 🦋
5 months
@dhh I don’t know why you just unblocked me after all these years, but I appreciate it. I don’t want any beef with you. Appreciate what you’ve done for the Ruby community and I apologise for my behaviour. I should have spoken to you directly when taking issue with something you
2
0
63
@joeldrapper
@joel.drapper.me 🦋
7 months
We just released Phlex 1.10.0! 🚀 🔎 Selective Rendering 🎒 Component Kits 🗃️ CSV Views 🚀 Up to 7× Faster 🚿 New Streaming Tools 🪶 No Runtime Dependencies We’ll release a new version of Phlex #Rails with Phlex 1.10 compatibility soon. 🔜
2
6
63
@joeldrapper
@joel.drapper.me 🦋
17 days
Yippee boot time in development is currently ~33ms. Keeping tabs on this is a very high priority. API design is only half the story. Everything needs to be fast. Booting, routing, reloading, views, jobs, database, assets, deployment. No waste.
11
1
63
@joeldrapper
@joel.drapper.me 🦋
5 months
I’m giving a talk on building beautiful views with Ruby at EuRuKo in September.
1
3
62
@joeldrapper
@joel.drapper.me 🦋
23 days
Phlex is MIT licensed with no hidden conditions and no trademark lawsuits if you make money selling associated products such as premium UI kits. Just saying.
6
1
60
@joeldrapper
@joel.drapper.me 🦋
1 month
@ffaebi Additionally, anyone who travels to Russia for this conference puts themselves at great risk if they have posted support for Ukraine online or donated to charities that in any way help Ukrainians.
2
0
61
@joeldrapper
@joel.drapper.me 🦋
4 months
I made a meeting timer that goes faster the more participants in the meeting.
7
6
60
@joeldrapper
@joel.drapper.me 🦋
7 months
Do I know any graphic designers who could help me with branding for my open source project, “Phlex”? 🙏
61
7
52
@joeldrapper
@joel.drapper.me 🦋
4 months
You’ve probably heard “perfect is the enemy of good”, but I think *compromise* is the enemy of motivation. And motivation is the key to productivity. Humans want to do meaningful work we can be proud of. We don’t want to build garbage. Striving for the highest bar of quality is,
9
5
59
@joeldrapper
@joel.drapper.me 🦋
9 months
I’m honoured my little library Phlex was featured in the latest RubyWeekly. ☺️ I’ve subscribed to this newsletter for years and years.
4
3
58
@joeldrapper
@joel.drapper.me 🦋
5 months
@TheDumbTechGuy It’s okay, the server can handle about 1.5 requests per second.
1
0
59
@joeldrapper
@joel.drapper.me 🦋
7 months
I’m launching a new product that lets you create an AI persona to take interviews on your behalf. The app will install a virtual webcam and microphone that lets your persona interact with your interviewer on Zoom. It can even solve the bullshit coding challenges.
@aliniikk
Ali Ansari
7 months
Excited to introduce the world’s first AI interviewer, gpt-vetting. With gpt-vetting, you can interview 100x more candidates in less time & candidates get a more enjoyable, gamified, and less biased interview experience. You define the skills you want the interview to focus on,
880
254
2K
9
2
58
@joeldrapper
@joel.drapper.me 🦋
1 month
“Phlex is HAML ...and let’s not forget that HAML was a sexist attempt by male back-end developers to “professionalize” front-end development.” WTF did I just read? This is wild. 🙉🙈
Tweet media one
12
0
55
@joeldrapper
@joel.drapper.me 🦋
1 month
Thinking of doing a video showing how Phlex::Rails::Streaming and Flecks actually works, looking at the library code and also looking at how we handle errors when streaming HTML because you need to send a 200 before you know if there are any errors.
5
0
56
@joeldrapper
@joel.drapper.me 🦋
7 months
Yes, it’s only day two, but I think I love my new job.
3
0
54
@joeldrapper
@joel.drapper.me 🦋
14 days
Here’s a first look at the Yippee router. 🪗
8
4
54
@joeldrapper
@joel.drapper.me 🦋
1 month
I recorded a video to show how Flecks works behind the scenes. Let me know if you have any questions. ❤️
3
7
54
@joeldrapper
@joel.drapper.me 🦋
7 months
Hot take: permanently blocking genuine people for having once disagreed with you is anti-community and generally a really shitty thing to do. Every day I’m strongly reminded that I’m not welcome in the #Rails community because someone in Rails core blocked me from participating.
12
0
53
@joeldrapper
@joel.drapper.me 🦋
6 months
@zeddotdev It’s funny to think about how traditional software managers would have criticised Zed’s strategy: “Why not use JS and electron?” “Let’s fork VS Code, then we can ship something tomorrow.” “Rust isn’t proven.” “We don’t need a new UI abstraction.” “You’re reinventing the wheel.”
1
4
52
@joeldrapper
@joel.drapper.me 🦋
10 days
Third option: OOP list.sum
@ChShersh
Dmitrii Kovanikov
10 days
What do you prefer? Functional Programming: let sum = List.fold_left ( + ) 0 or imperative programming: fun sum(list: List<Int>): Int { var res = 0 for (element in list) { res += element } return res }
203
16
452
11
1
54
@joeldrapper
@joel.drapper.me 🦋
7 months
The first thing I do in a new Rails codebase once I’ve got it set up and running is spend a few hours reading code. I make notes as I go. These are my headings today: Setup Experience Database Structure Gems Models Services Jobs Views & Components Tests Frontend Code Style
6
3
52
@joeldrapper
@joel.drapper.me 🦋
19 days
When it comes to Ruby API design, aesthetics are *everything*.
0
1
52
@joeldrapper
@joel.drapper.me 🦋
1 month
Three things I learned about Ruby this week. The third one I still don’t quite understand. 1. `sort!` does not maintain the original order of an array when items are equal to each other — it sometimes shuffles them around! 2. `super` called with no arguments does not forward
9
2
53
@joeldrapper
@joel.drapper.me 🦋
13 days
Huge milestone. Rails 8 is fantastic. 👏
@dhh
DHH
13 days
Rails 8.0: The first release candidate has been pushed. We're getting close now!
23
92
876
1
0
52
@joeldrapper
@joel.drapper.me 🦋
4 months
Maybe I’m being unfair to Postgres, but it feels like it hasn’t won its place in the Rails community by merit, but rather because it was given a massive leg-up by Heroku early on.
28
2
52
@joeldrapper
@joel.drapper.me 🦋
1 month
Inspired by SQLite, I’m aiming for 100% line and branch coverage for Phlex before the 2.0 stable. My goal is to never tag another GitHub issue as `bug` after this release.
Tweet media one
11
0
51
@joeldrapper
@joel.drapper.me 🦋
6 months
Sunk costs and human empathy make PR reviews a poor mechanism for catching bad design and architecture. PR reviews are only great for catching typos or missing tests—and maybe the odd suggestion for improving a variable name. How comfortable are you asking for a rewrite?
21
4
52
@joeldrapper
@joel.drapper.me 🦋
5 months
It’s basically a bunch of people excited about building high quality traditional web applications with minimal infrastructure and complexity using Ruby. Come join us.
@fractaledmind
Stephen Margheim
5 months
@joeldrapper wrote an excellent summary of what the Naming Things Discord is about. Come join us () if this resonates with you: Some things we’re interested in: * Server-side rendering * Object-oriented design * SQLite * Performance * Scaling a single
1
7
26
2
2
51
@joeldrapper
@joel.drapper.me 🦋
9 months
Coming soon to Phlex: Streamable CSV views! @willcosgrove has designed a beautiful API here in my opinion.
Tweet media one
Tweet media two
1
3
50
@joeldrapper
@joel.drapper.me 🦋
4 months
Yep, even if you can prove that every single point on the PIP is a lie. My PIP at Shopify, for example, claimed I said things in meetings that I didn’t say. Those meetings were recorded. The recordings proved I didn’t. No one cared. No one even checked or looked at my appeal.
@RogersKonnor
Konnor Rogers
4 months
@jmddotfm I think the main point is once you're on a PIP, there's no coming back. Its a ticking time bomb.
1
0
7
3
1
50
@joeldrapper
@joel.drapper.me 🦋
9 months
Phlex 1.10 will be coming out soon with zero runtime dependencies. 🎉 That’s quite a nice feeling as a maintainer.
2
3
51
@joeldrapper
@joel.drapper.me 🦋
4 months
Friendly reminder to add `# frozen_string_literal: true` to the top of all your Ruby files. It can lead to significant performance improvements and will be the default soon. If you need to mutate as string literal, just put a `+` before it, e.g. `+""` for an empty mutable string.
10
4
50
@joeldrapper
@joel.drapper.me 🦋
5 months
@JashUKnowAndLuv Russian doll caching solves all latency issues.
1
1
49