<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><description>Software Engineer, Musician, Speedcuber | @37signals | ¡Hablo Español!</description><link>https://blacksky.community/profile/thehale.dev</link><title>@thehale.dev - Joseph Hale</title><item><link>https://blacksky.community/profile/thehale.dev/post/3mjg466s7yy2c</link><description>My latest delightful discovery is #Ruby&#39;s `retry` keyword.&#xA;&#xA;Use it in an exception handler to re-run the entire begin clause *chef&#39;s kiss*&#xA;&#xA;Docs: https://docs.ruby-lang.org/en/master/language/exceptions_md.html#retrying</description><pubDate>14 Apr 2026 00:18 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3mjg466s7yy2c</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3mihavuueho22</link><description>https://www.youtube.com/watch?v=4JGn0FNdlDA</description><pubDate>01 Apr 2026 17:50 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3mihavuueho22</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3memcdy6fws2z</link><description>`frozendict` has officially been accepted as part of #Python 3.15!&#xA;&#xA;https://discuss.python.org/t/pep-814-add-frozendict-built-in-type/104854/121&#xA;&#xA;[contains quote post or other embedded content]</description><pubDate>11 Feb 2026 20:18 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3memcdy6fws2z</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3mdghdawws226</link><description>DRY code is pretty good. DRY teams, not so much.&#xA;&#xA;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.&#xA;&#xA;[contains quote post or other embedded content]</description><pubDate>27 Jan 2026 19:06 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3mdghdawws226</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3mcscaan2kx2v</link><description>Happy #Epochalypse Day! It&#39;s T minus 12 years until the world faces new set of Y2K-type issues.&#xA;&#xA;Why?</description><pubDate>19 Jan 2026 18:42 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3mcscaan2kx2v</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3ma5f5ipqud2f</link><description>It&#39;s fun when framework/library APIs make me smile. Check out `ActiveRecord.forty_two`&#xA;&#xA;https://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-forty_two</description><pubDate>17 Dec 2025 00:18 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3ma5f5ipqud2f</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3m6x3uz43sf2c</link><description>Looks like #Python 3.15 will include a built-in, immutable `frozendict` type.&#xA;&#xA;&#34;Using an immutable mapping as a function parameter’s default value avoids the problem of mutable default values.&#34;&#xA;&#xA;There are other benefits too (e.g. `frozendict`s are hashable).</description><pubDate>01 Dec 2025 18:51 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3m6x3uz43sf2c</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3m4qqebuqsc27</link><description>And it&#39;s now part of Mona OS, the badge&#39;s operating system!&#xA;&#xA;https://github.com/badger/home/pull/65&#xA;&#xA;[contains quote post or other embedded content]</description><pubDate>03 Nov 2025 19:18 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3m4qqebuqsc27</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3m4e3rt37br2j</link><description>If you&#39;re at #GitHubUniverse, I just wrote a custom filesystem app for the hackable badges!</description><pubDate>29 Oct 2025 18:38 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3m4e3rt37br2j</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3m36akmkjcs2f</link><description>#atproto app idea: Sharing personal context between AI model providers...</description><pubDate>14 Oct 2025 17:22 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3m36akmkjcs2f</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lzatdppnt22k</link><description>My &#34;Habit Sync for @todoist.com&#34; app is about to get a significant update, so here are some &#34;behind the scenes&#34; of what it took.&#xA;&#xA; - 9 major version upgrades of #ReactNative&#xA; - Writing my own component library&#xA; - Translating #Java to #Kotlin&#xA;&#xA;@github.com #ZeroToMergedContest</description><pubDate>20 Sep 2025 07:13 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lzatdppnt22k</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lyv24q3c2i2l</link><description>&#34;It felt a bit like the opening of &#39;A Hitchhiker’s Guide to the Galaxy&#39; ...&#34; #RailsWorld 2025</description><pubDate>15 Sep 2025 14:43 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lyv24q3c2i2l</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lyqvktplgt2l</link><description>&#34;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&#34; #RailsWorld 2025</description><pubDate>13 Sep 2025 23:10 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lyqvktplgt2l</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lye5rdvmcg2y</link><description>@thehale/react-native-keep-awake is now in the #ReactNative Directory!</description><pubDate>08 Sep 2025 21:33 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lye5rdvmcg2y</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lydnigbhx42y</link><description>&#34;Thank you for existing&#34;, &#34;I&#39;m 11 years old and ... your library made it possible&#34;&#xA;&#xA;It&#39;s amazing how far a single kind gesture can go.</description><pubDate>08 Sep 2025 16:41 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lydnigbhx42y</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3ly5z7oajok2r</link><description>This thread reminds me of Excel&#39;s formula evaluator, which lifts the values of each expression into the current context.&#xA;&#xA;It&#39;s so helpful for the debugging to come to me, where I retain full context.&#xA;&#xA;Picture Source: https://stackoverflow.com/q/6470263/14765128&#xA;&#xA;[contains quote post or other embedded content]</description><pubDate>06 Sep 2025 10:55 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3ly5z7oajok2r</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3loyba6jjff2b</link><description>&#34;Error: Invalid file name. Only characters on the basic multilingual plane are supported.&#34;&#xA;&#xA;What do you think this error message means?&#xA;&#xA;I ran into it recently while #debugging a migration of several hundred thousand documents. Here&#39;s what I learned: (1/4)&#xA;https://jhale.dev/posts/detecting-basic-multilingual-plane/</description><pubDate>12 May 2025 15:16 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3loyba6jjff2b</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lo4fqam54d2v</link><description>It&#39;s officially #MaintainerMonth! To celebrate, I just published psas.dev which has README badges maintainers can use to communicate boundaries for their #opensource projects.&#xA;https://psas.dev</description><pubDate>01 May 2025 13:22 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lo4fqam54d2v</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lltlfnbldi2o</link><description>Explore an interactive report of who wrote each line of code in a #git repository!&#xA;&#xA;Git Authorship now supports .𝚖𝚊𝚒𝚕𝚖𝚊𝚙 and .𝚐𝚒𝚝-𝚋𝚕𝚊𝚖𝚎-𝚒𝚐𝚗𝚘𝚛𝚎-𝚛𝚎𝚟𝚜 files to provide even cleaner and more organized reports.</description><pubDate>02 Apr 2025 14:19 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lltlfnbldi2o</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lkya2n2cfo2x</link><description>New type of post for me... New type of music for my friend @DHeusta...&#xA;&#xA;I had a blast recording the intense Latin chorus! If you&#39;ve ever felt constrained by others&#39; expectations, Against the Grain is for you!&#xA;&#xA;#AgainstTheGrainSong #DHeusta&#xA;#BillboardTop100 &lt;-- coming soon 😜</description><pubDate>22 Mar 2025 17:14 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lkya2n2cfo2x</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lkqg6wodz226</link><description>Forgetting the --𝚛𝚖 option when running throwaway #docker containers can clutter your computer.&#xA;&#xA;But there is a short #bash command to remove all those stopped containers&#xA;&#xA;docker rm $(docker ps -a | grep Exited | cut -d &#34; &#34; -f 1) &#xA;&#xA;How it works:&#xA;https://jhale.dev/posts/remove-stopped-docker-containers/</description><pubDate>19 Mar 2025 14:43 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lkqg6wodz226</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lkebte4npe2t</link><description>Have you heard of the 𝚐𝚒𝚝 𝚒𝚗𝚜𝚝𝚊𝚠𝚎𝚋 command?&#xA;&#xA;It creates a live website to explore any #git repository on your computer. It&#39;s #GitHub from before there was GitHub.&#xA;&#xA;Here&#39;s how to set it up:&#xA;https://jhale.dev/posts/gitweb-on-ubuntu-wsl/</description><pubDate>14 Mar 2025 18:53 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lkebte4npe2t</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lfemgcy4dk2c</link><description>If the test suite crashes locally, it&#39;s hard to convince someone to write tests...&#xA;&#xA;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&#39;s laptop.</description><pubDate>10 Jan 2025 06:56 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lfemgcy4dk2c</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lfbjkbydlk2g</link><description>Solved a really involved bug today...&#xA;&#xA;Some of our B2B customers were unable to email invoices to their clients, delaying incoming payments.</description><pubDate>09 Jan 2025 01:27 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lfbjkbydlk2g</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lcykqnojns2u</link><description>Well, I&#39;m officially a publisher on #NPM!&#xA;&#xA;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&#xA;&#xA;https://github.com/SpeedcuberOSS/react-native-location-status</description><pubDate>11 Dec 2024 01:04 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lcykqnojns2u</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lclq54qpss2p</link><description>There&#39;s something beautiful about watching #playwright auto-click across a browser.&#xA;&#xA;Or maybe I&#39;m simply grateful that I don&#39;t have to personally click thousands of buttons to export data from an old application that doesn&#39;t provide an API...</description><pubDate>05 Dec 2024 22:36 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lclq54qpss2p</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lcilwptebc27</link><description>Try googling &#34;code&#34; XD&#xA;&#xA;The programming language I wrote a few years ago uses a `.code` extension XD&#xA;&#xA;https://github.com/thehale/codeable&#xA;&#xA;[contains quote post or other embedded content]</description><pubDate>04 Dec 2024 16:42 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lcilwptebc27</guid></item><item><link>https://blacksky.community/profile/thehale.dev/post/3lchfvh6pi22l</link><description>Just updated my open-source LaTeX resume template &#34;Expressive Resume&#34;.&#xA;&#xA;Now with dedicated commands for promotions to a new \𝚛𝚘𝚕𝚎, an academic \𝚍𝚎𝚐𝚛𝚎𝚎, an \𝚊𝚠𝚊𝚛𝚍 or accolade, and a personal \𝚙𝚛𝚘𝚓𝚎𝚌𝚝.&#xA;&#xA;Spacing and formatting has also updated for better readability.&#xA;&#xA;https://github.com/thehale/expressive-resume</description><pubDate>04 Dec 2024 05:22 +0000</pubDate><guid isPermaLink="false">at://did:plc:z64wjxpxaicyz5mf76b4eupc/app.bsky.feed.post/3lchfvh6pi22l</guid></item></channel></rss>