Joel Drapper 🇬🇧🇺🇦
@joel.drapper.me
I’m a Ruby/TypeScript/CSS engineer at @plane.com and based in the UK. https://joel.drapper.me
I’m building a Ruby/SQLite serverlesslessness framework. I also maintain @phlex.fun.
Signal: joeldrapper.01
I’m building a Ruby/SQLite serverlesslessness framework. I also maintain @phlex.fun.
Signal: joeldrapper.01
A simple example form TypeScript. One program knows that `list[0]` is a string. And you, the human also know. But the other program (the type checker) doesn’t.
October 31, 2025 at 11:38 PM
A simple example form TypeScript. One program knows that `list[0]` is a string. And you, the human also know. But the other program (the type checker) doesn’t.
We experimented with a bunch of different options including this one which is my personal favourite (aesthetically).
What we went with is nice because existing tooling that indexes methods still finds the methods, with the right names, etc.
What we went with is nice because existing tooling that indexes methods still finds the methods, with the right names, etc.
October 20, 2025 at 9:24 AM
We experimented with a bunch of different options including this one which is my personal favourite (aesthetically).
What we went with is nice because existing tooling that indexes methods still finds the methods, with the right names, etc.
What we went with is nice because existing tooling that indexes methods still finds the methods, with the right names, etc.
Building on Literal’s dynamic type system, we’re making it easier to add runtime assertions with method signatures via a Ruby pre-processor.
We’re using Prism to parse valid Ruby syntax with different semantics and then pre-processing into regular Ruby on load.
We’re using Prism to parse valid Ruby syntax with different semantics and then pre-processing into regular Ruby on load.
October 20, 2025 at 8:50 AM
Building on Literal’s dynamic type system, we’re making it easier to add runtime assertions with method signatures via a Ruby pre-processor.
We’re using Prism to parse valid Ruby syntax with different semantics and then pre-processing into regular Ruby on load.
We’re using Prism to parse valid Ruby syntax with different semantics and then pre-processing into regular Ruby on load.
Even Qwen 2.5:0.5b (an even smaller 298MB previous-generation model) noticed the "no", despite giving me an overall pretty incoherent sounding answer. What can you expect from a model that‘s smaller than the Slack mac app?
October 11, 2025 at 7:28 PM
Even Qwen 2.5:0.5b (an even smaller 298MB previous-generation model) noticed the "no", despite giving me an overall pretty incoherent sounding answer. What can you expect from a model that‘s smaller than the Slack mac app?
Claude, Mistral and ChatGPT got it. Even Qwen 3:0.6b (a tiny 523MB model) *clearly* understands the difference.
October 11, 2025 at 7:20 PM
Claude, Mistral and ChatGPT got it. Even Qwen 3:0.6b (a tiny 523MB model) *clearly* understands the difference.
It’s a start anyway but I think we’ve got to move past trusting RC to give us the right checksums.
October 8, 2025 at 6:41 AM
It’s a start anyway but I think we’ve got to move past trusting RC to give us the right checksums.
I know. I’m more concerned about the ethics of how you got your hands on it.
September 30, 2025 at 11:34 PM
I know. I’m more concerned about the ethics of how you got your hands on it.
Rubyists f5ing the Ruby Central news page.
September 29, 2025 at 12:03 PM
Rubyists f5ing the Ruby Central news page.
You can now install the latest version of Phlex (version 2.3.1) from our own experimental gem source.
Try it out and let me know how you get on.
Try it out and let me know how you get on.
September 26, 2025 at 9:06 PM
You can now install the latest version of Phlex (version 2.3.1) from our own experimental gem source.
Try it out and let me know how you get on.
Try it out and let me know how you get on.
@gergely.pragmaticengineer.com I’m not on Twitter anymore, but this might help you out in your thread with Rafael. Ufuk is an owner of the RubyGems GitHub organisation.
September 26, 2025 at 12:42 AM
@gergely.pragmaticengineer.com I’m not on Twitter anymore, but this might help you out in your thread with Rafael. Ufuk is an owner of the RubyGems GitHub organisation.
Even DHH, if he stood by his own principles, wouldn’t see this as a good change. He literally used this as an example when Wordpress dot org took Advanced Custom Fields.
September 24, 2025 at 8:09 AM
Even DHH, if he stood by his own principles, wouldn’t see this as a good change. He literally used this as an example when Wordpress dot org took Advanced Custom Fields.
Looks like I need to write another YAML schema for Rails.
September 4, 2025 at 10:12 PM
Looks like I need to write another YAML schema for Rails.
In contrast, Basecamp assumes you don’t know all your to-dos up front, and you’ll go through a process of discovery along the way. Basecamp lets you show progress over time by manually placing milestones on a hill when you post a project update.
This is so much better.
This is so much better.
September 1, 2025 at 12:27 PM
In contrast, Basecamp assumes you don’t know all your to-dos up front, and you’ll go through a process of discovery along the way. Basecamp lets you show progress over time by manually placing milestones on a hill when you post a project update.
This is so much better.
This is so much better.
No library required for these.
August 22, 2025 at 12:49 PM
No library required for these.
Here’s an example of how you can configure Caddy to proxy your Vite-Rails assets.
August 21, 2025 at 10:55 PM
Here’s an example of how you can configure Caddy to proxy your Vite-Rails assets.
He actually rolled out the red carpet for this mass murderer. 🤢
August 15, 2025 at 8:03 PM
He actually rolled out the red carpet for this mass murderer. 🤢
Also the Oxford University style guide explicitly says not to use it. www.ox.ac.uk/sites/files/...
July 24, 2025 at 10:54 PM
Also the Oxford University style guide explicitly says not to use it. www.ox.ac.uk/sites/files/...
@ufuk.dev do you know why these two while loops are not the same? It doesn’t look like Prism captures the semantic difference between them, but there is a semantic difference. The first will error because `i` doesn’t exist.
July 21, 2025 at 12:46 PM
@ufuk.dev do you know why these two while loops are not the same? It doesn’t look like Prism captures the semantic difference between them, but there is a semantic difference. The first will error because `i` doesn’t exist.
This is a really nice improvement. From 5.98k IPS to 107k IPS. Also, here’s an example of the code that the compiler generates.
July 10, 2025 at 5:56 PM
This is a really nice improvement. From 5.98k IPS to 107k IPS. Also, here’s an example of the code that the compiler generates.
This is already a non-issue technically. AI tools can describe images and extract text on average much better than people do when writing alternative text.
Once more people have access to these tools, we won’t fuss about alt text except when we want to describe the image in a specific way.
Once more people have access to these tools, we won’t fuss about alt text except when we want to describe the image in a specific way.
July 9, 2025 at 3:00 PM
This is already a non-issue technically. AI tools can describe images and extract text on average much better than people do when writing alternative text.
Once more people have access to these tools, we won’t fuss about alt text except when we want to describe the image in a specific way.
Once more people have access to these tools, we won’t fuss about alt text except when we want to describe the image in a specific way.
Also GitHub in high-contrast mode makes progress bars low-contrast. The contrast ratio between the grey and green here is 1.08. 🤦♂️
July 9, 2025 at 1:05 AM
Also GitHub in high-contrast mode makes progress bars low-contrast. The contrast ratio between the grey and green here is 1.08. 🤦♂️
This setting has been in GitHub’s appearance settings for years and years, yet it does absolutely nothing.
July 9, 2025 at 12:51 AM
This setting has been in GitHub’s appearance settings for years and years, yet it does absolutely nothing.