Sign in

Joseph Hale

@thehale.dev
435 followers 119 following 103 posts

Software Engineer, Musician, Speedcuber | @37signals | ¡Hablo Español!

PostsRepliesMedia
Reposted by Joseph Hale
Laurie Voss @seldo.com · 13/09/2026
I have been writing this post about the economics of open source, on and off, for 13 years. I wasn't expecting to end up at "Microsoft should send corporations a huge bill" but nothing else we've tried has worked. seldo.com/posts/nobody-pays-for-ope…
seldo.com
Nobody pays for open source. We can force them to. | Seldo.com
Thirty years of voluntary funding schemes haven't paid open source maintainers because asking doesn't scale. The real money already flows — to JFrog, Docker, Sonatype — at the registry layer. The fix: registries charge companies for supply (they already do), then route a slice automatically to the maintainers who make that supply worth having.
2016655
Joseph Hale @thehale.dev · 25/08/2026
Code/Printouts: github.com/thehale/dual...
github.com
GitHub - thehale/dual-box-nets: Printable nets shared by 1x1x5 and 1x2x3 boxes
Printable nets shared by 1x1x5 and 1x2x3 boxes. Contribute to thehale/dual-box-nets development by creating an account on GitHub.
000
Joseph Hale @thehale.dev · 25/08/2026
Over the weekend, I found a brain tickling video about nets that can fold up into multiple different boxes. So... I made printable versions of 2,263 of them to play with. Enjoy! :D Video: www.youtube.com/watch?v=RAex...
youtube.com
We discovered a new net!
Jane Street runs internships in New York, London, Hong Kong and now their Singapore office as well! Find out more and apply for 2027 internships here: http://jane-st.co/internships2027-SUM Read the…
110
Joseph Hale @thehale.dev · 20/08/2026
I think the transcript can be useful supplementary documentation to answer "why", or "rejected alternatives". But I'd rather have a clear, concise commit message with those details than a long transcript.
010
Reposted by Joseph Hale
Mike Dalessio @flavorjon.es · 29/07/2026
Upgrade Rails immediately, kids, this is a big one. github.com/rails/rails/...
github.com
Possible arbitrary file read and remote code execution in Active Storage variant processing
### Impact In its default configuration, a Rails application that displays image variants may allow an unauthenticated attacker to read arbitrary files from the server, including the process envi...
14930
Joseph Hale @thehale.dev · 14/06/2026
Celebrating the 2026 FIFA World Cup by solving a Rubik's Cube in front of the giant soccer ball at Pier 39 in San Francisco.
000
Joseph Hale @thehale.dev · 02/06/2026
official docs: api.rubyonrails.org/classes/Hash...
api.rubyonrails.org
Hash
Builds a Hash from XML just like Hash.from_xml, but also allows Symbol and YAML.
000
Joseph Hale @thehale.dev · 02/06/2026
Hash.extract! is my latest fun discovery in Rails' collection of Ruby extensions. It returns a new hash of the keys you name, while simultaneously removing those keys from the original hash. It's also safe to use when the named key doesn't appear in the original hash.
110
Joseph Hale @thehale.dev · 29/05/2026
Change the browser default from ~/Downloads to ~/Desktop 😁
010
Joseph Hale @thehale.dev · 26/05/2026
It also helps that we made Basecamp 5 even faster than Basecamp 4. :D We also do a lot of testing on lower end devices to make sure they feel great too, which makes the fancier devices feel even snappier!
130
Reposted by Joseph Hale
Hugo van Kemenade @hugovk.dev · 12/05/2026
Do not use pull_request_target. Do not use caches in publish workflows. Use dependency cooldowns. Use Zizmor. Tell GitHub to make Actions secure by default. #GitHub #GitHubActions
031
Joseph Hale @thehale.dev · 14/04/2026
My latest delightful discovery is #Ruby's `retry` keyword. Use it in an exception handler to re-run the entire begin clause *chef's kiss* Docs: docs.ruby-lang.org/en/master/la...
031
Joseph Hale @thehale.dev · 01/04/2026
www.youtube.com/watch?v=4JGn...
youtube.com
New Podcast by 37signals - Sneak Peak!
First episode drops never 😹 April Fools! Sorry if you got your hopes up, but a real podcast about this would be too difficult and off-brand. #aprilfools #cats #dogs
010
Joseph Hale @thehale.dev · 16/03/2026
1001-1000 = 1 500-433 = 77, oh wait it's actually 67 1000-500 = 500 500 + 67 + 1 = 568 Essentially, (1) determine the "diff" between each operand and an easy to compute number, (2) do the easy computation, (3) add the easy result and the diffs.
001
Joseph Hale @thehale.dev · 16/02/2026
Just wait until you start getting all the free ebooks too :P Gotta love the spammers putting your email in every open form that will accept it.
000
Joseph Hale @thehale.dev · 11/02/2026
`frozendict` has officially been accepted as part of #Python 3.15! discuss.python.org/t/pep-814-ad...
discuss.python.org
PEP 814: Add frozendict built-in type
After careful deliberation, the Python Steering Council is pleased to accept PEP 814 – Add frozendict built-in type. The absence of an immutable dict counterpart has been a long-standing gap in Pytho...
010
Joseph Hale @thehale.dev · 30/01/2026
Wow! This is excellent! I think the alignment also gives a visual anchor point for each column. That lets me read down each column along a straight line instead of a jagged edge. My eyes feel much more relaxed as I scan the information. The spans for equal values and subtle bars are amazing too!
020
Joseph Hale @thehale.dev · 29/01/2026
Excellent choices of stats for the comparison! One nit... The center alignment makes it harder to visually compare the sizes.
130
Joseph Hale @thehale.dev · 27/01/2026
DRY code is pretty good. DRY teams, not so much. Open source is just as much about the people it builds up as it is about the projects/code those people then build and share.
110
Joseph Hale @thehale.dev · 19/01/2026
Fortunately, computers are already being updated to use 64-bit integers, which will delay the Epochalypse for approximately 292 billion years 🎉. #NerdyHolidays
020
Joseph Hale @thehale.dev · 19/01/2026
Many computers track time by counting the number of seconds since January 1, 1970 (the "Epoch"). They count with a signed 32-bit integer, which will last until January 19, 2038 at 03:14:07 UTC. Then, the value will "overflow" and computers will think it is December 13, 1901. 😧
110
Joseph Hale @thehale.dev · 19/01/2026
Happy #Epochalypse Day! It's T minus 12 years until the world faces new set of Y2K-type issues. Why?
110
Joseph Hale @thehale.dev · 08/01/2026
jhale.dev/feed.xml
000
Joseph Hale @thehale.dev · 17/12/2025
It's fun when framework/library APIs make me smile. Check out `ActiveRecord.forty_two` api.rubyonrails.org/classes/Acti...
api.rubyonrails.org
ActiveRecord::FinderMethods
Returns true if a record exists in the table that matches the id or conditions given, or false otherwise. The argument can take six forms:
010
Joseph Hale @thehale.dev · 01/12/2025
Full details in PEP 814: peps.python.org/pep-0814/
peps.python.org
PEP 814 – Add frozendict built-in type | peps.python.org
A new public immutable type frozendict is added to the builtins module.
010
Joseph Hale @thehale.dev · 01/12/2025
Looks like #Python 3.15 will include a built-in, immutable `frozendict` type. "Using an immutable mapping as a function parameter’s default value avoids the problem of mutable default values." There are other benefits too (e.g. `frozendict`s are hashable).
Two Python code snippets demonstrating the value of the new `frozendict` immutable type coming in version 3.15

Typically, you should avoid using a `dict` as a default argument in a function because it's mutable. When 3.15 is released, you can safely use a `frozendict` instead.
120
Joseph Hale @thehale.dev · 03/11/2025
And it's now part of Mona OS, the badge's operating system! github.com/badger/home/...
github.com
Add `files` app by thehale · Pull Request #65 · badger/home
Adds a file system browser to Mona OS. Navigate through the folders/files on the badge's read/writable directory. Text files (e.g. code) can even be opened and browsed on the badge. Taken from...
000
Joseph Hale @thehale.dev · 31/10/2025
Some legit-ish reasons I've heard: (1) First time OSS contributors learning about contribution flows, without creating new (pointless) issues/PRs. (2) Attempts at helping to triage PRs, e.g. unblock/"upvote" a desired patch.
000
Joseph Hale @thehale.dev · 30/10/2025
Some of the Hack Club students were working on this during the conference!
010
Joseph Hale @thehale.dev · 29/10/2025
github.com/thehale/badg...
github.com
000
Joseph Hale @thehale.dev · 29/10/2025
If you're at #GitHubUniverse, I just wrote a custom filesystem app for the hackable badges!
110
Joseph Hale @thehale.dev · 19/10/2025
So exciting! Congrats!
010
Joseph Hale @thehale.dev · 16/10/2025
Hilos como este son fantásticos :D Y u-te-efe ocho :)
010
Joseph Hale @thehale.dev · 14/10/2025
#atproto app idea: Sharing personal context between AI model providers...
[LinkedIn Post by Ben Bradford]

Every time I switch AI tools, I start from zero. I'm starting to think that I can't be the only one feeling this frustration.

Here's a small example...I recently used an AI tool to build a presentation and the AI kept structuring slides in ways that didn't match how I actually present. It was text heavy, wrong flow, missing my voice. It had no idea how I work because it had no context about my previous presentations. I stopped and built the slides manually.

My problem is that my context is locked up somewhere else. I've spent hours with Claude, ChatGPT and Gemini and none of that travels with me when I jump into a different tool.

And this is happening everywhere now. Most of the SaaS apps I use daily are adding AI powered features by the same foundational models. But when I use those features, they start from zero. They don't know anything about how I work or what I need.

What I actually want is control over my own context, locally. Build it once, keep it with me, and selectively share pieces with whatever tool I'm using. When a new model comes out that's better for my specific task, I want to test it without rebuilding my entire workflow from scratch. When I open an app with AI built in, I want to drip in just enough context to make it useful without explaining myself all over again.

Right now it works backwards. The tools own my memory. I'm stuck rebuilding context in every new app, every new conversation, every new project. And when the AI doesn't have that context, it's not useful to me at all.

I've been researching tools like Mem0 and SuperMemory but they feel more like tools an engineer would use to build an app. I know folks like Dharmesh Shah of HubSpot have written about this and he seems optimistic about where the solutions are headed. 

Has anyone found a better way to manage context across multiple AI tools?
230
Joseph Hale @thehale.dev · 29/09/2025
I got the same email. I read it more as a product announcement/advertising about their vision for what's to come in the future.
000
Joseph Hale @thehale.dev · 20/09/2025
And/or check out the code (it's open source)! github.com/thehale/Habi...
github.com
GitHub - thehale/HabitSync-for-Todoist: Sync completed tasks from Todoist to Loop Habit Tracker. Keeping track of your habits has never been easier!
Sync completed tasks from Todoist to Loop Habit Tracker. Keeping track of your habits has never been easier! - thehale/HabitSync-for-Todoist
020
Joseph Hale @thehale.dev · 20/09/2025
Try out the app! play.google.com/store/apps/d...
play.google.com
Habit Sync for Todoist - Apps on Google Play
Keeping track of your habits has never been easier!
110
Joseph Hale @thehale.dev · 20/09/2025
My "Habit Sync for @todoist.com" app is about to get a significant update, so here are some "behind the scenes" of what it took. - 9 major version upgrades of #ReactNative - Writing my own component library - Translating #Java to #Kotlin @github.com #ZeroToMergedContest
143
Joseph Hale @thehale.dev · 15/09/2025
jhale.dev/posts/rails-...
jhale.dev
My experience at Rails World 2025
Last week I had the privilege of attending Rails World 2025 in Amsterdam. I learned a ton! and I met lots of amazing people! Here’s my story…
000
Joseph Hale @thehale.dev · 15/09/2025
"It felt a bit like the opening of 'A Hitchhiker’s Guide to the Galaxy' ..." #RailsWorld 2025
100
Joseph Hale @thehale.dev · 14/09/2025
jhale.dev/posts/rails-...
jhale.dev
My experience at Rails World 2025
Last week I had the privilege of attending Rails World 2025 in Amsterdam. I learned a ton! and I met lots of amazing people! Here’s my story…
000
Joseph Hale @thehale.dev · 14/09/2025
"The message was clearly that individuals, like you and me, have the power to build things to improve the world – we don’t have to wait for someone else" #RailsWorld 2025
100
Joseph Hale @thehale.dev · 12/09/2025
That's really neat! It reminds me of one of my favorite Android apps, Simple Time Tracker...: play.google.com/store/apps/d... ...which is also open-source: github.com/Razeeman/And...
play.google.com
Simple Time Tracker - Apps on Google Play
Track how much time you spend on different activities during the day.
010
Joseph Hale @thehale.dev · 08/09/2025
reactnative.directory?search=keep-...
reactnative.directory
@thehale/react-native-keep-awake
Prevent the phone screen from going to sleep.
000
Joseph Hale @thehale.dev · 08/09/2025
@thehale/react-native-keep-awake is now in the #ReactNative Directory!
10 lines of sample code showing how to use @thehale/react-native-keep-awake to prevent a phone screen from going to sleep.
121
Joseph Hale @thehale.dev · 08/09/2025
Find and thank an open-source maintainer today! youtu.be/YEBBPj7pIKo?...
youtu.be
Keynote: Giants, Standing on the Shoulders Of - Daniel Stenberg, Founder of the Curl Project
Don't miss out! Join us at the next Open Source Summit in Amsterdam, Netherland (August 25-29); or Seoul, South Korea (November 4-5). Join us at the premier vendor-neutral open source conference,…
000
Joseph Hale @thehale.dev · 08/09/2025
I just watched @daniel.haxx.se's keynote featuring stories from 30 years of libcurl development. Even though most of the presentation was examples of frustrating messages/demands, I admired how the few, kind gestures he's received are big parts of his motivation to keep going.
100
Joseph Hale @thehale.dev · 08/09/2025
"Thank you for existing", "I'm 11 years old and ... your library made it possible" It's amazing how far a single kind gesture can go.
110
Joseph Hale @thehale.dev · 06/09/2025
This thread reminds me of Excel's formula evaluator, which lifts the values of each expression into the current context. It's so helpful for the debugging to come to me, where I retain full context. Picture Source: stackoverflow.com/q/6470263/14...
A screenshot of Excel's formula evaluator, showing a variable being resolved in-place as part of a step in the evaluation.
010
Joseph Hale @thehale.dev · 27/05/2025
Many projects have a CONTRIBUTING document which explain their preferred patterns for incoming contributions. Unless that document discourages starting with a PR (some projects want to discuss ideas in an issue first), opening a PR is wonderful!
130