• This is how Markdown spreads: a developer learns of the format, starts using the format, likes the format, then puts it into every single application they come in contact with. Bonus points for it being a plain text markup format, requiring no more than a bog standard text field for UIs.

  • Super useful to have access to the developer working on a tool you need to use. Guy on the opposite side of the partition’s working on the support request tool we’ve using, and he’s been quite receptive to a few feature requires I’ve wanted, such as Markdown support.

  • The Stripe CLI doesn’t have a command for listing account tax IDs, but it’s still possible to list them using the get subcommand. For anyone else that needs it, here’s how you can list them:

    stripe get /v1/tax_ids
    

    And to get a single tax ID:

    stripe get /v1/tax_ids/txi_abc123
    
  • It’s a little surprising to see HTML tables being used for layout in this day and age. Granted, it’s HTML from an email newsletter which I understand lacks a lot of the styling support that browsers have for websites. But even so, I though we’ve moved on from these Dreamweaver-esque techniques.

  • Ate my words this morning. For reasons beyond me, I keep asking for lettuce instead of ham for my bagel. I usually catch myself, and the place I go to knows my usual order. But today things didn’t align, and I ended up with a lettuce, cheese, and tomato bagel. And you know what? Was pretty nice.

    Just so we’re clear, I take full responsibility for this. Those serving me were apologetic and offered to make me a new bagel. I declined: why should they be put out for my mistake?

  • This got me thinking of a project where I had to choose a notification sound for an alarm feature: something that required the operator’s attention but didn’t need them to take drastic and immediate action. I went for a tone that was pleasant to hear at first, but got annoying the more often you heard it. The theory I had at the time was that this would elicit an emotional reaction in the operator (in this case, annoyance) to cause them to take notice; but only for a moment, just enough for them to at least look at the alarm panel. This was not based on any science so I don’t know how effective it was, but it seemed to work on me.

  • Preparing myself for the AusAlert test by listening to the sample alert tone. Pretty decent tone, calm but demanding of attention. Although if I had my way, I’d probably change it to the PagerDuty “Pager Beeps” alert. Nothing spikes my heart rate like those damn high pitched trills.

    Makes it a good PagerDuty alert tone.

  • Seems to me the true winners are those that chose not to wake up at 5 AM today. 😝

  • A bit more work on my Godot project. Finally started on music, which I hope to record myself. Got a pretty good level cleared fanfare, which led to the development of the track for the intro level. Turned out really well I must say. An amateur job, but a decent start. Here’s a sample:

  • This, and last, week’s earworm: The Red Planet, by Rick Wakeman.

    Started listening to this in 2021, while the pandemic was still raging. It fell out of rotation, but last week I thought I’d dig it up again. It’s quite good. Worth a listen if you like classic monophonic synth music. 🎵

  • Also, in the interest of posterity, and in honour of all the UK level crossing videos I’ve been watching on YouTube recently, here’s a recording of the level crossing being removed in operation, taken last week. Apologies for the loud sirens emitting from the pedestrian gates.

  • The level crossing removal is in full swing at the moment. Trees have been felled, paths closed with detours in place, large machinery moving about. Hi-vis everywhere. 🦺

  • Spyglass: OpenAI Makes ChatGPT ChatGPT Again:

    All that points to perhaps a disturbing trend where OpenAI doesn’t really understand their user base. Which you almost can understand given how they clearly stumbled into ChatGPT in the first place. Still, here they are with those billion users. A problem that all of their competitors would love to have. But still a problem if you want to fundamentally change what you are as a product.

    It’s amusing to think that sometimes the product chooses you.

    For what it’s worth, the new app is still a pretty crummy experience. Despite Chat being included alongside Work in the UI, the two are still very different beasts. The “Recents” sidebar now shows interactions with both Work and Chat as a “unified timeline”, complete with a mouseover showing which product the interaction is from, but there’s still no way for Work (which I am to understand is a rebranded Codex) to get access to historical Chat chats. This is something that Chat supported for a while now, and seeing them show up in the same section in the app gives the impression that the same is true here. And it’s not. It’s misleading and just bad product design. Either keep them separate, or migrate them already.

  • Well, I just found out that the task I was looking at, which I thought was going to be a quick manual config change, has blown out to a code change touching three services, plus a data migration. So, I guess next week’s work has been sorted. 😮‍💨

    The bad part of finding this out on a Friday afternoon is the exhaustion you feel when you consider the size of the task, and after a busy week. The good part of finding this out on a Friday afternoon is that it makes little sense starting this now, and you know you’ll have something to work on next week.

  • Oof! I should’ve stayed in the sun. It’s freezing in the shade. 🥶

    Auto-generated description: A partially eaten sandwich on a white plate with a fork and knife is set on a table outdoors, accompanied by a tablet displaying text.
  • An open protocol is more than just you open sourcing your implementation for me to look at it. It’s saying that I can open source my implementation without you having to look at it.

  • I can’t for the life of me understand why an SCP upload would stall out for multiple minutes. It gets to 5%, does nothing for about 8 minutes, then slowly finishes the upload at a crawl. Why? What the heck is it doing during that time?

  • 🔗 Jim Nielsen’s Blog: A Well Known URL For Your Personal Avatar

    The fact that this post from 2023 still comes to mind whenever I need to remember how to get my avatar image/URL suggests to me that this is a pretty good idea.

  • I’ve been seeing a lot of traffic attributed to Google this past week, significantly more than usual. It seems to enter from one or two random pages from the archive, and start spidering from there. Could they be model runs? A significant number of hits are from Linux, but the traffic seems to be coming from all over the world, not just a single country. Very odd.

  • I lost my static IP address when I moved to a fibre connection. I was considering getting rid of it anyway as I no longer had a reason to need it (although the part of me that’ll need to manage security groups going forward will beg to differ). It was nice to have it though: my own /32.

  • The beauty of having access to coding agents is that you get to create a tool shaped exactly to the problem you’re trying to solve. I’m working with some data in a PostgreSQL DB that has a JSONB column. This introduces problems in a typical client: either because only the first few characters of a multi-KB JSON structure is rendered, or the full JSON structure is rendered and it blows out the size of the table.

    So I asked Claude Code to make a client that would open the value of JSONB columns in a separate window, nicely formatted and syntax highlighted. I’m using it right now and it’s been a godsend. It’s hard justifying putting in the time to build this manually for a project that will probably only last a month or so. But asking the agent to do it in a day? Not a problem.

    I would also say it’s easy to do this if it’s not your money you’re spending. 😜

  • Furthermore, it seems like PRAGMA journal_mode = WAL; is the only one that’s persisted. All the other pragmas only apply to the current session, something I wish Sqlite’s documentation was more clear about. Putting them into your DB migration script will do nothing.

  • 🔗 Mort’s Ramblings: SQLite should have (Rust-style) editions

    Come for the opinion. Stay for the techniques on tuning an Sqlite database to support foreign keys and avoid DB lock errors.

    Via: Lobste.rs

  • 📗 Vibelog

    Well Read - A Fable Moment

    Asking Fable to make some changes to my RSS reader, as well as getting Fable to look at a problem Opus couldn’t solve. Continue reading →

  • At the same time, I do recognise that not every bit of kit should have a complicated UI, particularly if those using it are just trying to get done what they need to do. I know for myself I’m not yearning to master pivot tables in Excel.

  • 🔗 Robin Rendle: EP-1320 Medieval

    So the EP-1320 is not simple. You either learn it’s way of doing things or go to hell. Like computers from before my time, this thing is modes-galore.

    There’s something to be said about the feeling of accomplishment that comes from learning a complicated UI. Things like this, or software like Vim or Photoshop, are not approachable or intuitive. But they still have something to offer: a sense of mastery.

  • Minor TIL that inquiry is just the US spelling of enquiry, and that both words mean exactly the same thing.

    I learnt about Stripe inquiries today and while reflecting on that on my commute home, it sparked my curiosity as to how the two words differ.

  • Great Daily Update by Ben Thompson about the Apple v. OpenAI lawsuit. Seems like both parties and not completely innocent, but I still can’t feel too sympathetic for Apple. A trillion dollar company doesn’t like people leaving for other jobs? Hates that people are down on phones? Cry me a river.

  • In this world of home delivery apps launching and crashing down to earth, the people who make those big insulated boxes you strap to the back of e-bikes are the ones selling the picks and shovels.

  • TIL about signal.NotifyContext, allowing one to handle graceful shutdown on a signal as a regular context cancellation, without having to setup a buffered channel or separate goroutine. Graceful shutdown simply becomes the following:

    package main
    
    import (
      "context"
      "os"
      "os/signal"
      "syscall"
    )
    
    func main() {
      ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
      defer stop()
    
      doThing(ctx)  // assuming thing handles context cancellation gracefully
    
      shutdown()
    }
    

    Very useful. I’m probably more likely to add graceful shutdowns in my tools now.

  • Also, this magpie was good enough to sit still for a photo. It flew away as soon as I put my phone down.

    Auto-generated description: A black and white bird is perched on a curved branch amidst a backdrop of green grass, leaves, and a rocky hillside.
  • Short walk on the Lilydale to Warburton Rail Trail around Mount Evelyn this afternoon.

    Auto-generated description: A gravel path winds through a wooded area with trees and rocky terrain on either side. Auto-generated description: A dirt path leads through a lush, green forest towards a dark tunnel opening surrounded by trees and vegetation.
  • I saw someone strapping a hockey stick with a unicycle beside them the other day. It was a little odd, but I didn’t think much of it, until today when I saw a few other people with hockey sticks pushing unicycles towards a gym. It’s when I realised that Unicycle Hockey is a thing. TIL.

  • 🔗 Daring Fireball: OpenAI Help Center Describes What Is Wrong With the New ChatGPT

    These three paragraphs, from OpenAI’s own Help Center, sound more like a critic’s scathing review of what’s wrong with the new ChatGPT “super” app than a guide to how to use it.

    I read those paragraphs and was reminded of the complex feature sets that came from various flavours of commercial software from the 90’s, usually from Microsoft. Here’s an AI slop impression:

    Auto-generated description: An AI generated parody image of the back of a colourful product box details features of ChatGPT for Desktop, including usage modes, compatibility, and pricing information.
  • You know whenever you use apt install in a script and it prints out:

    WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
    

    Well, believe them. Because the CLI interface changed and it broke my CI/CD build. 🫠

  • My regular walking path to the cafe has been closed off due to the level crossing removal work. Fortunately, an alternative was available to me.

    Auto-generated description: A narrow dirt path runs alongside a fenced tennis court with green grass and tall trees on the other side.
  • Really enjoyed the latest Dithering where Ben Thompson and John Gruber discuss the new ChatGPT app. So many clippable moments, but this is probably the best one and covers my feelings exactly. The app really feels unfinished and rushed out the door without thinking the product through holistically.

  • I frickin’ hate browsing the App Store for an app, so any disinterested parties posting their recommendations is always welcome. So consider this paying that forward: anyone looking for a remote desktop client for the iPad, I can recommend RealVNC. I’ve been using it all morning to remotely connect to my Mac Mini and it’s been working quite well. The UX is decent, and I like how they map the iPad interaction model to mouse and keyboard. Don’t skip the tutorial, thought: it’s takes a bit of understanding how to use it, and their guide helps a lot.

  • I downloaded the ChatGPT desktop app, wondering if it could potentially be useful for replacing Pulse. In theory, ChatGPT Work (ugh! of all the names) could produce an RSS digest based on my history… provided I give it an export. Yes, ChatGPT Work does not have access to my ChatGPT vanilla chat history. And as far as I can tell, there’s no way to have the two products talk to each other. This seems like a very obvious thing to have. I can look pass the use of Electron (just look at what I code up) but to not have your history available to you when you open the app seems like a pretty large oversight. Especially when you consider how many people would come to this app already using ChatGPT.

  • More Kvetching About Stripe's Documentation

    Stripe’s documentation lacks clarity on the basic concepts and calculations related to invoicing, leaving users confused about how key fields like amount_due and ending_balance are determined. Continue reading →