mastodon.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
The original server operated by the Mastodon gGmbH non-profit

Administered by:

Server stats:

341K
active users
Evan Hildreth<p>Bumps In the Gumroad: <a href="https://oddevan.com/2025/04/04/bumps-in-the-gumroad.html" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">oddevan.com/2025/04/04/bumps-i</span><span class="invisible">n-the-gumroad.html</span></a></p>
Evan Hildreth<p>Today’s brainworm: a parody of “Put Down the Ducky” called “Tighten the Graphics.” <a href="https://youtu.be/acBixR_JRuM" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="">youtu.be/acBixR_JRuM</span><span class="invisible"></span></a></p>
Evan Hildreth<p>Sometimes I get so deep into composition and particular abstraction layers that I forget that basic object-oriented programming exists. And what I thought was going to be a nightmare to code and even more to maintain actually wasn’t that complicated. (I welcome you to tell me why it’s actually bad.) <a href="https://github.com/smolblog/smolblog/blob/333c647e1950ca1de34c8ce66591df1ef27bed1b/packages/product/core-data-sql/src/QueryBuilder.php" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">github.com/smolblog/smolblog/b</span><span class="invisible">lob/333c647e1950ca1de34c8ce66591df1ef27bed1b/packages/product/core-data-sql/src/QueryBuilder.php</span></a></p>
Evan Hildreth<p>I didn’t add a way to prefix Smolblog’s DB tables because I didn’t need it, and I need to not build what I don’t need.</p><p>Today, the auto-migration wiped out my test WordPress’ tables.</p><p>I am now building a way to prefix Smolblog’s DB tables.</p>
Evan Hildreth<p>John Gruber on the full DeepSeek AI model running locally:</p><p>&quot;Apple has tremendous technical advantages to offer in AI. But they’re marketing Genmojis of hot dogs carrying briefcases.&quot;</p><p>I might argue that there’s very little else to market. <a href="https://daringfireball.net/linked/2025/03/19/apple-silicon-is-groundbreaking-for-ai" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">daringfireball.net/linked/2025</span><span class="invisible">/03/19/apple-silicon-is-groundbreaking-for-ai</span></a></p>
Evan Hildreth<p>I’m afraid—if I log out—I won’t be able to find my LinkedIn account!</p>
Zutcha<p>pinkie</p>
Evan Hildreth<p>Hey <a href="https://mastodon.social/tags/php" class="mention hashtag" rel="tag">#<span>php</span></a> land, what’s going to be the easiest way to build an admin interface? I’ve got all my data persistence and retrieval functions written; just need to build the UI. (Would love if there was some easy way to build the forms in WordPress&#39; backend.)</p>
Evan Hildreth<p>I’m thinking of making a custom language definition for highlight.js so I can specially-format parts of a story (chat window, AI dialogue, etc.) without leaving Markdown.</p><p>Am I overcomplicating this?</p>
Evan Hildreth<p>I want to like Scrivener so much more than I do. I want to use it, really dive into it, but writing in it feels like using a word processor; anything too far from CSS isn’t intuitive for me anymore. And the HTML it generates is… generated HTML.</p><p>So… anyone organizing a novel with Markdown?</p>
Evan Hildreth<p>Trying something: every time I see a news story about government incompetence in the name of efficiency, I forward it to my congressman and senators.</p>
Evan Hildreth<p>I love how Fox had arguably the perfect score bug in 2020 and has spent every Super Bowl they broadcast making it worse.</p>
Evan Hildreth<p>Ok, where are y’all hosting your email? iCloud and Mailgun keep silently breaking on each other, and I’m not sure my forwarding is working either. Would love to support multiple custom domains.</p>
Evan Hildreth<p>After seeing from <span class="h-card" translate="no"><a href="https://mastodon.social/@dame" class="u-url mention">@<span>dame</span></a></span> and <span class="h-card" translate="no"><a href="https://mastodon.social/@manton" class="u-url mention">@<span>manton</span></a></span> what a premium .blog domain costs, I feel really lucky they didn’t consider “<a href="https://smol.blog/”" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="">smol.blog/”</span><span class="invisible"></span></a> a desirable word.</p>
Evan Hildreth<p>Back again with another <a href="https://mastodon.social/tags/php" class="mention hashtag" rel="tag">#<span>php</span></a> question: I’ve put classes that exist and don’t exist through this loop, but I’m still only testing 3/4 code branches. Any ideas?</p>
Evan Hildreth<p>Happy New Year! May you find what you’re looking for, or at least get closer. 😄</p>
Evan Hildreth<p>Just read a detailed post about GitHub Copilot by David Chisnall. It reminds me of when I almost failed a college math class because I thought I was done with homework. When I got to the tests, it was my first time really doing the problems and I struggled. The doing itself was and is important. <a href="https://infosec.exchange/@david_chisnall/113690087142854474" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">infosec.exchange/@david_chisna</span><span class="invisible">ll/113690087142854474</span></a></p>
David Chisnall (*Now with 50% more sarcasm!*)<p>I finally turned off GitHub Copilot yesterday. I’ve been using it for about a year on the ‘free for open-source maintainers’ tier. I was skeptical but didn’t want to dismiss it without a fair trial.</p><p>It has cost me more time than it has saved. It lets me type faster, which has been useful when writing tests where I’m testing a variety of permutations of an API to check error handling for all of the conditions.</p><p>I can recall three places where it has introduced bugs that took me more time to to debug than the total time saving:</p><p>The first was something that initially impressed me. I pasted the prose description of how to communicate with an Ethernet MAC into a comment and then wrote some method prototypes. It autocompleted the bodies. All very plausible looking. Only it managed to flip a bit in the MDIO read and write register commands. MDIO is basically a multiplexing system. You have two device registers exposed, one sets the command (read or write a specific internal register) and the other is the value. It got the read and write the wrong way around, so when I thought I was writing a value, I was actually reading. When I thought I was reading, I was actually seeing the value in the last register I thought I had written. It took two of us over a day to debug this. The fix was simple, but the bug was in the middle of correct-looking code. If I’d manually transcribed the command from the data sheet, I would not have got this wrong because I’d have triple checked it.</p><p>Another case it had inverted the condition in an if statement inside an error-handling path. The error handling was a rare case and was asymmetric. Hitting the if case when you wanted the else case was okay but the converse was not. Lots of debugging. I learned from this to read the generated code more carefully, but that increased cognitive load and eliminated most of the benefit. Typing code is not the bottleneck and if I have to think about what I want and then read carefully to check it really is what I want, I am slower.</p><p>Most recently, I was writing a simple binary search and insertion-deletion operations for a sorted array. I assumed that this was something that had hundreds of examples in the training data and so would be fine. It had all sorts of corner-case bugs. I eventually gave up fixing them and rewrote the code from scratch.</p><p>Last week I did some work on a remote machine where I hadn’t set up Copilot and I felt much more productive. Autocomplete was either correct or not present, so I was spending more time thinking about what to write. I don’t entirely trust this kind of subjective judgement, but it was a data point. Around the same time I wrote some code without clangd set up and that <em>really</em> hurt. It turns out I really rely on AST-aware completion to explore APIs. I had to look up more things in the documentation. Copilot was never good for this because it would just bullshit APIs, so something showing up in autocomplete didn’t mean it was real. This would be improved by using a feedback system to require autocomplete outputs to type check, but then they would take much longer to create (probably at least a 10x increase in LLM compute time) and wouldn’t complete fragments, so I don’t see a good path to being able to do this without tight coupling to the LSP server and possibly not even then.</p><p>Yesterday I was writing bits of the CHERIoT Programmers’ Guide and it kept autocompleting text in a different writing style, some of which was obviously plagiarised (when I’m describing precisely how to implement a specific, and not very common, lock type with a futex and the autocomplete is a paragraph of text with a lot of detail, I’m confident you don’t have more than one or two examples of that in the training set). It was distracting and annoying. I wrote much faster after turning it off.</p><p>So, after giving it a fair try, I have concluded that it is both a net decrease in productivity and probably an increase in legal liability.</p><p>Discussions I am not interested in having:</p><ul><li>You are holding it wrong. Using Copilot with this magic config setting / prompt tweak makes it better. At its absolute best, it was a small productivity increase, if it needs more effort to use, that will be offset.</li><li>This other LLM is <em>much</em> better. I don’t care. The costs of the bullshitting far outweighed the benefits when it worked, to be better it would have to <em>not bullshit</em>, and that’s not something LLMs can do.</li><li>It’s great for boilerplate! No. APIs that require every user to write the same code <em>are broken</em>. Fix them, don’t fill the world with more code using them that will need fixing when the APIs change.</li><li>Don’t use LLMs for autocomplete, use them for dialogues about the code. Tried that. It’s worse than a rubber duck, which at least knows to stay silent when it doesn’t know what it’s talking about.</li></ul><p>The one place Copilot was vaguely useful was hinting at missing abstractions (if it can autocomplete big chunks then my APIs required too much boilerplate and needed better abstractions). The place I thought it might be useful was spotting inconsistent API names and parameter orders but it was actually very bad at this (presumably because of the way it tokenises identifiers?). With a load of examples with consistent names, it would suggest things that didn't match the convention. After using three APIs that all passed the same parameters in the same order, it would suggest flipping the order for the fourth.</p><p><a href="https://infosec.exchange/tags/GitHubCopilot" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>GitHubCopilot</span></a> <a href="https://infosec.exchange/tags/CHERIoT" class="mention hashtag" rel="nofollow noopener" target="_blank">#<span>CHERIoT</span></a></p>
Evan Hildreth<p>Anyone got experience with CSS widows and orphans? I’m trying to have a 3-line paragraph go entirely to one page, but a 4-line split evenly. Right now a 4-line paragraph will put the first three on the first page (orphans: 3) and the last line on the next (violating widows: 2). Help? <a href="https://codepen.io/oddevan/pen/PwYpRzN" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="">codepen.io/oddevan/pen/PwYpRzN</span><span class="invisible"></span></a></p>
Evan Hildreth<p>Thought I had found a clever way to auto-generate endpoints… except it depended on each one having a different static property which doesn’t work in PHP. TIL. <a href="https://www.php.net/manual/en/language.oop5.anonymous.php#123605" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://www.</span><span class="ellipsis">php.net/manual/en/language.oop</span><span class="invisible">5.anonymous.php#123605</span></a></p>