Joseph Hale

Joseph Hale

@thehale.dev

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

451 followers119 following105 posts

Joseph Hale reposted

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.

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.

Joseph Hale reposted

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

Corbin Crutchley@crutchcorn.dev

We at TanStack just had a major attack against our Router packages. We have a postmortem out now explaining what happened and how we mitigated the response: tanstack.com/blog/npm-sup... No other TanStack packages outside of the Router monorepo were impacted

`frozendict` has officially been accepted as part of #Python 3.15! discuss.python.org/t/pep-814-ad...

discuss.python.orgPEP 814: Add frozendict built-in typeAfter 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...
Joseph Hale@thehale.dev

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).

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.

patak@patak.cat

when you collaborate in open source teams, you need to unlearn a lot of what your company work taught you

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. 😧

Fortunately, computers are already being updated to use 64-bit integers, which will delay the Epochalypse for approximately 292 billion years 🎉. #NerdyHolidays

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).

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

"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

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.

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...

dan@danabra.mov

one thing that blew my mind about working in Lean (and is still blowing my mind) is that “variables” (really, let bindings) and “function calls” are all infinitely unfoldable. i can just replace each variable with its definition, each function with its body, any no of levels deep, during a proof.

View full thread

Notably, the basic plane does not include emojis -- those are in the Supplementary Multilingual Plane. So, the error is effectively saying, "we don't support emojis in filenames". 😭 (3/4)

It turns out that the Basic Multilingual Plane refers to the part of the #Unicode specification which encodes all the most common characters used across the world. It's the first of 17 different planes of characters! (2/4)

For example: "No Maintenance Intended": Communicate when a project won't receive close attention. "Purely Personal": Indicate that only bugs/features you personally care about will be considered. "Pull Requests Only": Express a preference for working prototypes over ideas/discussions.

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.

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 😜