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
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
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
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
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 · 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 · 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
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 · 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
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 · 29/10/2025
If you're at #GitHubUniverse, I just wrote a custom filesystem app for the hackable badges!
110
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 · 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
"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
"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 · 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
"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 · 12/05/2025
"Error: Invalid file name. Only characters on the basic multilingual plane are supported." What do you think this error message means? I ran into it recently while #debugging a migration of several hundred thousand documents. Here's what I learned: (1/4)
jhale.dev
How to detect Unicode characters outside the Basic Multilingual Plane
TL;DR 1 2 def is_on_basic_multilingual_plane(char): return int(char.encode().hex(), 16) <= int("FFFF", 16)
100
Joseph Hale @thehale.dev · 01/05/2025
It's officially #MaintainerMonth! To celebrate, I just published psas.dev which has README badges maintainers can use to communicate boundaries for their #opensource projects.
psas.dev
Public Service Announcements | Public Service Announcements
Set boundaries for your project. Tell the world.
165
Joseph Hale @thehale.dev · 02/04/2025
Explore an interactive report of who wrote each line of code in a #git repository! Git Authorship now supports .𝚖𝚊𝚒𝚕𝚖𝚊𝚙 and .𝚐𝚒𝚝-𝚋𝚕𝚊𝚖𝚎-𝚒𝚐𝚗𝚘𝚛𝚎-𝚛𝚎𝚟𝚜 files to provide even cleaner and more organized reports.
100
Joseph Hale @thehale.dev · 22/03/2025
New type of post for me... New type of music for my friend @DHeusta... I had a blast recording the intense Latin chorus! If you've ever felt constrained by others' expectations, Against the Grain is for you! #AgainstTheGrainSong #DHeusta #BillboardTop100 <-- coming soon 😜
110
Joseph Hale @thehale.dev · 19/03/2025
Forgetting the --𝚛𝚖 option when running throwaway #docker containers can clutter your computer. But there is a short #bash command to remove all those stopped containers docker rm $(docker ps -a | grep Exited | cut -d " " -f 1) How it works:
jhale.dev
How to remove all stopped Docker containers
A one-line shell command to clean up old, discarded containers
000
Joseph Hale @thehale.dev · 14/03/2025
Have you heard of the 𝚐𝚒𝚝 𝚒𝚗𝚜𝚝𝚊𝚠𝚎𝚋 command? It creates a live website to explore any #git repository on your computer. It's #GitHub from before there was GitHub. Here's how to set it up:
jhale.dev
Today I Learned – Git’s built-in website
Git ships with a built-in web interface for a code repository. Here’s how to set it up!
000
Joseph Hale @thehale.dev · 10/01/2025
If the test suite crashes locally, it's hard to convince someone to write tests... Ran into exactly this recently. We have a major test suite which executes inside a Docker container to match our production environment, but those tests stopped booting on a coworker's laptop.
100
Joseph Hale @thehale.dev · 09/01/2025
Solved a really involved bug today... Some of our B2B customers were unable to email invoices to their clients, delaying incoming payments.
110
Joseph Hale @thehale.dev · 11/12/2024
Well, I'm officially a publisher on #NPM! Over the weekend I upgraded a #react-native app to the New Architecture, including a custom native module I wrote circa React Native 0.68 github.com/SpeedcuberOS...
github.com
GitHub - SpeedcuberOSS/react-native-location-status: Checks if location is enabled on the device
Checks if location is enabled on the device. Contribute to SpeedcuberOSS/react-native-location-status development by creating an account on GitHub.
140
Reposted by Joseph Hale
Beth @bethcodes.bsky.social · 10/12/2024
Giving specific complements in code reviews is the one practice I’ve seen work everywhere: blog.bethcodes.com/for-delightf...
blog.bethcodes.com
For Delightful Code Reviews, Say Nice Things
A rebellion is brewing.  Ideas like post-commit reviews or even a return to cowboy coding are gaining traction over the unpleasant & unproductive experience that is the bug-hunt code review. This...
13616
Joseph Hale @thehale.dev · 05/12/2024
There's something beautiful about watching #playwright auto-click across a browser. Or maybe I'm simply grateful that I don't have to personally click thousands of buttons to export data from an old application that doesn't provide an API...
000
Joseph Hale @thehale.dev · 04/12/2024
Try googling "code" XD The programming language I wrote a few years ago uses a `.code` extension XD github.com/thehale/code...
github.com
GitHub - thehale/codeable: A prose-themed programming language optimized for minimizing symbols.
A prose-themed programming language optimized for minimizing symbols. - thehale/codeable
010
Joseph Hale @thehale.dev · 04/12/2024
Just updated my open-source LaTeX resume template "Expressive Resume". Now with dedicated commands for promotions to a new \𝚛𝚘𝚕𝚎, an academic \𝚍𝚎𝚐𝚛𝚎𝚎, an \𝚊𝚠𝚊𝚛𝚍 or accolade, and a personal \𝚙𝚛𝚘𝚓𝚎𝚌𝚝. Spacing and formatting has also updated for better readability. github.com/thehale/expr...
github.com
GitHub - thehale/expressive-resume: A beautiful resume/cover letter LaTeX template pair that are extraordinarily easy to use.
A beautiful resume/cover letter LaTeX template pair that are extraordinarily easy to use. - thehale/expressive-resume
010