{"version": "https://jsonfeed.org/version/1.1", "title": "zerosleeps", "home_page_url": "https://zerosleeps.com/", "feed_url": "https://zerosleeps.com/feed.json", "description": "The 10 most recent blog posts on zerosleeps.com", "favicon": "https://zerosleeps.com/static/core/apple-touch-icon.703a48268c28.png", "authors": [{"name": "Scott Macpherson"}], "language": "en-AU", "items": [{"id": "/blog/2026/6/27/if-you-cant-stand-by-a-feature-you-shouldnt-launch-it/", "url": "https://zerosleeps.com/blog/2026/6/27/if-you-cant-stand-by-a-feature-you-shouldnt-launch-it/", "title": "If you can\u2019t stand by a feature, you shouldn\u2019t launch it", "content_html": "<p>Good post by <a href=\"https://unsung.aresluna.org/if-you-cant-stand-by-a-feature-you-shouldnt-launch-it/\">Marcin Wichary at Unsung</a>, riffing on <a href=\"https://daringfireball.net/thetalkshow/2026/06/23/ep-450\">a segment of The Talk Show</a>.</p>\n<p>This is one of the most baffling things about Apple software to me. For each application, or piece of an application, or component of their operating systems, why don&rsquo;t they find one of their <strong>150,000</strong> employees who actually <em>uses</em> that piece of software every day, and give them <em>ownership</em> of it.</p>\n<p>About a quarter of the stuff I do in my day job is implementing fixes and tweaks that I or one of my developer colleagues have found. Not stuff that our customers have reported. And that is because we <em>own</em> our output and are embarrassed by bugs of <em>all</em> sizes.</p>\n<p>Software quality driven by pride. What&rsquo;s wrong with that?</p>", "date_published": "2026-06-27T01:33:05Z"}, {"id": "/blog/2026/6/23/not-at-all-likely/", "url": "https://zerosleeps.com/blog/2026/6/23/not-at-all-likely/", "title": "Not at all likely", "content_html": "<p>I received this piece of dystopian literature in my inbox today from a company that manages some of our toll roads here in Australia:</p>\n<blockquote>\n<p>Our records indicate you have recently travelled through the Burnley Tunnel. If you have time, we\u2019d really appreciate your feedback on the on-road experience of this trip.</p>\n<p>\u2026</p>\n<p>Based on your recent trip, how likely are you to recommend travelling on the Burnley Tunnel to friends and family?</p>\n</blockquote>\n<p>How likely am I to recommend a <strong>highway</strong>? That goes through a <strong>tunnel</strong>? To my <strong>friends and family</strong>?</p>\n<p>Not very fucking likely, strangely enough.</p>", "date_published": "2026-06-23T08:46:05Z"}, {"id": "/blog/2026/6/18/why-i-email-complete-strangers/", "url": "https://zerosleeps.com/blog/2026/6/18/why-i-email-complete-strangers/", "title": "Why I email complete strangers", "content_html": "<p>Email is, and always has been, my preferred method of written communication for two reasons, both of which are topics of <a href=\"https://www.goodinternetmagazine.com/why-i-email-complete-strangers/\">this post from Zachary Kai</a>.</p>\n<p>The first is it&rsquo;s openness, stability, and ubiquity:</p>\n<blockquote>\n<p>Social media platforms rise and fall like ancient empires sped up a thousand times. Yet email endures. Like the postal service or the printed book. Is it any coincidence these technologies remain my great loves? They share a quality I struggle to name. Perhaps it\u2019s permanence in an ephemeral world. You can tuck a letter in a drawer, discovering it decades later. A book can outlive its author by centuries. One can archive, search, and treasure an email. They\u2019re all vessels that honor my beloved words.</p>\n<p>And in their longevity is their flexibility. You can read a book anywhere, anytime. You can send a letter to the farthest-flung corners of the earth imaginable. And you can email anyone.</p>\n</blockquote>\n<p>The second is in it&rsquo;s user interface:</p>\n<blockquote>\n<p>You can choose to engage with it in human time, and so can the recipient: compose when you have something to say, respond when you have space to think.</p>\n</blockquote>", "date_published": "2026-06-18T07:32:11Z"}, {"id": "/blog/2026/6/17/if-you-are-asking-for-human-attention-demonstrate-human-effort/", "url": "https://zerosleeps.com/blog/2026/6/17/if-you-are-asking-for-human-attention-demonstrate-human-effort/", "title": "If you are asking for human attention, demonstrate human effort", "content_html": "<p><a href=\"https://tombedor.dev/human-attention-and-human-effort/\">This post by Tom Bedor</a> has been doing the rounds over the last couple of weeks. It&rsquo;s a proposition that you&rsquo;d think would be common sense and part of basic human decency, but the fact that I&rsquo;ve seen this post all over the place says something else.</p>", "date_published": "2026-06-17T01:18:18Z"}, {"id": "/blog/2026/5/30/iris/", "url": "https://zerosleeps.com/blog/2026/5/30/iris/", "title": "Iris", "content_html": "<p>Oh <a href=\"https://irisphotos.app/\">this is a <strong>magnificent</strong> new piece of software</a> from Retina Studio.</p>\n<p>Apple Photos is <a href=\"/blog/2024/12/29/default-apps/\">just about</a> the only Apple supplied &ldquo;application&rdquo; that I regularly use on macOS and it&rsquo;s\u2026 fine. Certainly no better than fine. Iris is exactly, precisely, what I&rsquo;ve always wanted Apple Photos to be.</p>\n<p>It took me 10 minutes of use to decide to move my photos from Photos to Iris. Yes Iris plays nicely with an existing Photos library, but nah I&rsquo;ve actually <strong>moved</strong> everything out of Photos into the filesystem and into Iris exclusively.</p>\n<p>The decision would only have taken 5 minutes but for this: I&rsquo;ve got decades of titles attached to stuff in my Photos library, as in, captions/titles that I have manually typed in. I thought about it and I&rsquo;ve almost never gotten any value from that effort, so sod it, titles/captions no more. Between dates, times, locations, face matching, and the delightful machine-learning-powered tagging that Iris does, I don&rsquo;t need titles.</p>\n<p>Some other charming features about Iris: it <strong>tells</strong> you what it&rsquo;s doing. On first run it actually opens it&rsquo;s little status window so you know what is going on. And if you wants to know more the documentation tells you. Imagine that! And the &ldquo;Surprise Me!&rdquo; menu option is so obvious and I frickin&rsquo; love it.</p>\n<p>And it costs the price of two coffees. No subscription. I&rsquo;d have paid 5 times that, no questions asked.</p>\n<p><strong>This</strong> is how software should be made.</p>", "date_published": "2026-05-30T05:11:38Z"}, {"id": "/blog/2026/5/8/appearing-productive-in-the-workplace/", "url": "https://zerosleeps.com/blog/2026/5/8/appearing-productive-in-the-workplace/", "title": "Appearing Productive in The Workplace", "content_html": "<p><a href=\"https://nooneshappy.com/article/appearing-productive-in-the-workplace/\">This is a great article by No One&rsquo;s Happy</a>. Like the author, <a href=\"/blog/2025/10/8/lets-talk-about-ai-art/\">I&rsquo;ve been struggling</a> to articulate my thoughts on the explosion of use of large language models and I think this post gets as close as any that I&rsquo;ve read.</p>\n<blockquote>\n<p>This is the part of the phenomenon I find hardest to write about. The tool did not make him a worse colleague. It made him able to impersonate, for months, a discipline he had never trained in, and the impersonation was good enough that the institutional incentives all bent toward letting him continue. Perhaps it\u2019s a failure of management, but I have been finding management to be so eager to embrace AI that they\u2019re willing to accept the risk.</p>\n</blockquote>\n<p>I am yet to be convinced that AI poses a serious long-term threat to my industry. This might age like milk, but I&rsquo;m quietly confident that in about 3 years from now - when all these little bits of software built by people who don&rsquo;t know what they don&rsquo;t know and which have quietly become critical components of their respective businesses, start to fail/require changes/shit the bed because of bugs and security flaws - demand <em>and respect</em> for professional human software developers will be higher than ever.</p>\n<blockquote>\n<p>The downstream costs are accumulating quickly \u2026 What is less remarked upon is the same dynamic playing out inside organizations: time wasted using AI on tasks that did not need it, on artifacts no one will read, on processes that exist only because the tool made it cheap to construct them. On decks that spell out things that previously didn\u2019t even need to be said or were assumed.</p>\n</blockquote>", "date_published": "2026-05-08T00:53:25Z"}, {"id": "/blog/2026/4/23/drunk-post-things-ive-learned-as-a-senior-engineer/", "url": "https://zerosleeps.com/blog/2026/4/23/drunk-post-things-ive-learned-as-a-senior-engineer/", "title": "Drunk Post: Things I\u2019ve Learned as a Senior Engineer", "content_html": "<p><a href=\"https://luminousmen.substack.com/p/drunk-post-things-ive-learned-as\">This post from Kirill Bobrov is a fun read</a>.</p>\n<p>Amen to this one:</p>\n<blockquote>\n<p>I don\u2019t know why full stack webdevs are paid so poorly. No really, they should be paid like half a mil a year just base salary. Fuck they have to understand both front end AND back end AND how different browsers work AND networking AND databases AND caching AND differences between web and mobile AND omg what the fuck there\u2019s another framework out there that companies want to use? Seriously, why are webdevs paid so little.</p>\n</blockquote>", "date_published": "2026-04-23T07:16:00Z"}, {"id": "/blog/2026/4/8/email/", "url": "https://zerosleeps.com/blog/2026/4/8/email/", "title": "Email?", "content_html": "<p>When did everyone decide to stop calling email addresses email addresses? I feel like everything I look at and everyone I talk to at the moment has started referring to the address as just &ldquo;email&rdquo;. &ldquo;What&rsquo;s your email?&rdquo; &ldquo;Enter your email.&rdquo;</p>\n<p>No. An email is an email, and you send an email to an email <strong>address</strong>. If we start calling the address an email, then we don&rsquo;t have any words left to refer to an <strong>actual</strong> email.</p>", "date_published": "2026-04-08T09:14:18Z"}, {"id": "/blog/2026/4/6/time-zone-abbreviations-suck/", "url": "https://zerosleeps.com/blog/2026/4/6/time-zone-abbreviations-suck/", "title": "Time zone abbreviations suck", "content_html": "<p>Yesterday morning a huge chunk of the east coast of Australia changed from AEDT (Australian Eastern Daylight Time) to AEST (Australian Eastern Standard Time) thanks to DST (Daylight Saving Time) ending.</p>\n<p>We went from <code>%DT</code> when <code>%ST</code> <em>was</em> in effect, to <code>%ST</code> where <code>%ST</code> is <em>not</em> in effect.</p>\n<p>These names and acronyms are crap. The whole concept of daylight saving time is crap. We, like every other household in the country, have a few things with clocks that need to be manually changed. It takes me 5 minutes.</p>\n<p>5 minutes \u00d7 twice a year \u00d7 10 million Australian households = 100,000,000 minutes = 69,444 human days. <strong>Every year</strong>.</p>\n<p>What <em>exactly</em> does it save?</p>", "date_published": "2026-04-06T05:00:29Z"}, {"id": "/blog/2026/4/5/log-database-queries-in-django/", "url": "https://zerosleeps.com/blog/2026/4/5/log-database-queries-in-django/", "title": "Log database queries in Django", "content_html": "<p>While <a href=\"/blog/2026/4/4/log-http-5xx-responses-in-django/\">I&rsquo;m on the topic</a> of logging in Django, it makes me sad and a little bit grumpy that when you take Django out of the box, it doesn&rsquo;t default to showing you what it&rsquo;s doing with your database.</p>\n<p>Here&rsquo;s a <code>LOGGING</code> configuration that takes care of that, and sends everything from <code>django.db.backends</code> to a file in the project&rsquo;s root directory during development:</p>\n<div class=\"codehilite\"><pre><span></span><code><span class=\"n\">LOGGING</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s2\">&quot;version&quot;</span><span class=\"p\">:</span> <span class=\"mi\">1</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;disable_existing_loggers&quot;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;db_backends_file&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;class&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;logging.FileHandler&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;filename&quot;</span><span class=\"p\">:</span> <span class=\"n\">BASE_DIR</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;db_backends.log&quot;</span>\n        <span class=\"p\">}</span>\n    <span class=\"p\">},</span>\n    <span class=\"s2\">&quot;loggers&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;django.db.backends&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;level&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;DEBUG&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;handlers&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;db_backends_file&quot;</span><span class=\"p\">]</span>\n        <span class=\"p\">}</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>It&rsquo;s important to note that <code>django.db.backends</code> <a href=\"https://docs.djangoproject.com/en/6.0/ref/logging/#django-db-backends\">only generates output</a> when the <code>DEBUG</code> setting is True.</p>", "date_published": "2026-04-05T06:08:56Z"}]}