Full Width [alt+shift+f] Shortcuts [alt+shift+k]
Sign Up [alt+shift+s] Log In [alt+shift+l]
102
I didn’t write much this year. The projects that I worked on (at work) used up most of my creative mental capacity leaving little for writing. The backlog is brimming, however. Targets for 2024 ❌ Publish at least 40 posts 11 ❌ Reach at least 200k readers Don’t have an accurate number ❌ Have at least 6 posts on the front page of something Probably would have met this if I had posted more – I had one successful post on Jan 14, which is encouraging ❌ Make at least $50 from writing. Nope, did no monetization whatsoever Breakdown Some stats: Number of posts: 11 Total word count: 3125 Longest post: When am I “allowed” to quit and not be labeled a quitter? (630) Shortest post: Speaking at Hasso-Plattner-Institut (0, because it’s just a link to a LinkedIn post) Breakdown by category: business: 1 startups: 1 ethics: 1 robots: 1 architecture: 1 interviewing: 1 productivity: 1 selenium: 1 doctolib: 1 No trend there. Feedly still reports 18 followers - no movement. But it also marked the blog as inactive which is a shame. Targets for 2025 I would like to commit to writing more in 2024, but I’m not very confident that I will have the time. Regardless, the 2024 goals were quite lofty but achievable so it makes sense to try them again Publish at least 36 posts (3 per month) Reach at least 200k readers (not sure how to track this accurately since I’m not keen to add analytics and GoAccess doesn’t seem to be super accurate) Have at least 6 posts gain traction (front page of HN, 10 reactions on LinkedIn, etc) A review of the blog in 2024 was originally published by Ognjen Regoje at Ognjen Regoje • ognjen.io on January 01, 2025.
31st Dec 2024

Stay updated

Get a weekly newsletter with the top 5 articles worth reading every week.

More from Ognjen Regoje • ognjen.io

All conference talks should start with a small technical glitch that the speaker can easily solve

At a conference a while back, I noticed a couple of speakers get such a confidence boost after solving a small technical glitch. We should probably make that a part of every talk. Have the mic not connect automatically, or an almost-complete puzzle on the stage that the speaker can finish, or have someone forget their badge and the speaker return it to them. Maybe the next time I, or a consenting teammate, have to give a presentation I’ll try to engineer such a situation. All conference talks should start with a small technical glitch that the speaker can easily solve was originally published by Ognjen Regoje at Ognjen Regoje • ognjen.io on April 03, 2025.

2nd Apr 2025 51 votes
Green flags for investable founders

Here are a few things I’ve seen founders do that made me confident in their ability and dedication. Elevator pitch in LinkedIn tagline A founder who is all in is constantly selling. That means their tagline will: a) be for their company, not for them b) be the sales pitch, not a vague aspirational vision Value proposition keeps getting more specific If every time you talk to a founder and their value proposition is more and more specific to me indicates that they’re learning more and more about their USP, about their target customer, about the market. The opposite of this is a company that pivots every six months. No short stints in the CV Building a startup is decidedly a marathon. I think it takes about 4 years to make real progress in a startup. Folks who jump positions every year are chasing a career and are unlikely to want to slog through for such a long time. Not that there’s anything wrong with that, it’s just not the right profile. Worked at companies of different sizes A founder who’s seen multiple stages of a startup is more likely to be successful. While they might not have been in the top leadership positions they would have seen the challenges the organization faces, especially during the transitions. Worked in different industries, or not There is a difference between the technical and the business founders. The startups I’ve seen where the business founder was part of the industry for a while worked well. But I’ve also seen them get so focused on how things are that they can’t see how things should be. For technical founders, on the other hand, I think it’s a clear advantage to have been in different industries and seen different approaches. Switched to full-time as soon as possible It might be obvious but the sooner the founder goes full time the more skin in the game, but also belief in the business, they have. They’re that much more committed to it. The opposite of this is founders who are simultaneously CEOs of multiple companies. I don’t think that can ever work – least of all for startups. Don’t succumb to the hype The founders who aren’t always talking about how they’re going to incorporate the latest hype in their product seemed to get more accomplished. Founded, or was an early employee, of a startup that raised a round or two I think this is probably the biggest indicator. Having done the early stages, seed and maybe series A, eliminates A LOT of uncertainty. At least the company won’t fail because the founders aren’t competent at running a business, since they’ve done it before. I’d even be biased toward someone who did a startup over someone who’s been employed at a name-brand unicorn simply because the skill set is not at all equivalent. Green flags for investable founders was originally published by Ognjen Regoje at Ognjen Regoje • ognjen.io on January 03, 2024.

2nd Jan 2024 38 votes
A review of the blog in 2023

2023 was a busy year so I did not spend a lot of time blogging, unfortunately. It was only in December that I had meaningful time for writing. In the 2022 review I set a few targets for the blog in 2023: Targets for 2023 ❎ Publish at least 40 posts 14 ✅ Reach at least 150k readers With a couple of viral posts this is very easily achievable. I’m at 180k even though I only had a few posts. I will include a target for the number of posts as well. ❎ Get at least 10 posts professionally? publicized I was thinking of hiring someone to help me distribute the content, but a) I didn’t produce much of it and b) I didn’t hire anyone. ❎ Build an audience (recurring readers, Twitter, newsletter?) Did not do this at all. ❎ Publish something on at least two other sites Did not do this. And I think I will not focus on this going forward. Quantity I published 14 posts, totaling approximately 9700 words. The average blog post length is 695 words. Working on legacy code is the longest post at ~729 words, followed by Lie still in bed with 679. The sample size isn’t sufficient to comment on whether the average length is adequate. Popularity Lie still in bed was the most popular substantial article. That’s encouraging because it’s not about tech, it’s just generic advice. MIT No AI was fairly popular but got flagged on HackerNews which killed it. It was also very quick to write. Interestingly Reddit’s disrespectful design and Big tech should help tackle misinformation on smaller platforms made a comeback. I don’t have detailed tracking anymore, it’s all based on server logs, so I can’t dig deeper into where the traffic is coming from. Editing the source markdown of a generated static site in the browser had some traffic as well which is interesting. It’s probably the most interesting post I wrote in a long while. Feedly reports 18 followers. Up three. What I’ve learnt I think I got better at writing more clearly. I’m more comfortable, at least at the moment, with publishing posts and not worrying too much about whether they’re perfect. I think that’s at least partly because I wrote so many posts in December. I made one pass with the rough draft. Then another pass that finalized the content. Then a final one where I didn’t change the content but just proofread and ensured clarity. Then I published the post. I took to heart the 2022 objective to frame posts positively more positively and have done that for several of them. Targets for 2024 Publish at least 40 posts Reach at least 200k readers Have at least 6 posts on the front page of something Make at least $50 from writing. I’m not sure if this is a good objective but maybe it might motivate me to think of monetization alternatives. A review of the blog in 2023 was originally published by Ognjen Regoje at Ognjen Regoje • ognjen.io on January 01, 2024.

31st Dec 2023 38 votes
Not wanting to work remotely is now a competitive advantage

As much as working remotely is a competitive hiring advantage again, not wanting to work remotely is now an advantage for getting hired. A lot of companies are mandating returns to the office. Many more are scrapping fully remote positions, with some even rescinding fully-remote offers. So, for better or worse, not wanting to work remotely is now a competitive advantage. If that’s not one of your requirements you’re likely to pick up more offers. Not wanting to work remotely is now a competitive advantage was originally published by Ognjen Regoje at Ognjen Regoje • ognjen.io on October 15, 2023.

14th Oct 2023 41 votes

More in programming

Abusing ID3 chapters to turn videos into glanceable podcasts

I listen to a lot of podcasts, and I like how they fit around other tasks. I press play, lock my phone, and put it down. I’m free to wash the dishes, fold the laundry, or shop for groceries. Unfortunately, more and more information is only published as a video. Technical talks, conference sessions, video essays – they don’t work in an audio-only podcast app. I could convert these videos to MP3 files, but that breaks down the moment a video isn’t pure spoken word. If a speaker says, “Look at this slide” or holds up a diagram, an audio-only file leaves me stranded. I don’t want to give up the podcast player I like, nor stare at a screen for an hour – but I do want the information in these videos. To solve this, I’m abusing my podcast player’s chapter support. This gives me the best of both worlds: I can listen to a video as audio-first, and glance at my lock screen if I need a moment of visual context. The idea: Chapters every few seconds MP3 files can have ID3 metadata, and ID3 metadata can include chapters. A chapter covers a particular time range, and it can have an associated title, description, and cover art. My podcast app of choice is Overcast, which can’t play videos, but it does have robust chapter support. I can jump between chapters, navigate a table of contents, and see per-chapter cover art. To get videos into Overcast, I’m creating MP3 files with a new chapter every few seconds, and the per-chapter cover art is a corresponding frame from the video. As I play the file, I get a slow, stop-motion-like rendition of the original video. If my phone is locked, I can glance at my lock screen and see the current frame in the Now Playing screen. Overcast is developed by Marco Arment, and I got this idea from Forecast, his app for adding chapters to podcasts. In particular, I was struck by its ability to create chapters that don’t display in the chapter list – ideal if I don’t want a table of contents with hundreds of entries. As I was developing my script, I compared my output to the output from Forecast to ensure I was creating the chapters correctly. The code: FFmpeg and Mutagen There are three steps in this process: Convert a video file to an MP3 Extract images from the video at a fixed interval Insert the images as hidden chapters in the MP3 file Let’s go through each in turn. 1. Convert a video file to an MP3 Converting a video file to an MP3 is a single FFmpeg command: ffmpeg -i video.mp4 audio.mp3 This is consistently the slowest step of the process, and I do wonder if I could use different settings or an alternative encoder to make it go faster – but it’s not slow enough to be worth further investigation. 2. Extract images from the video at a fixed interval Extracting images from a video needs a more complicated FFmpeg command: ffmpeg -i video.mp4 \ -vf 'fps=1/5,scale=iw*sar:ih,scale=min(iw\,945):min(ih\,945):force_original_aspect_ratio=decrease' \ thumbnail_%04d.jpg This extracts an image every 5 seconds, downscales any image larger than 945 pixels square (while preserving the original aspect ratio), and saves the results as sequentially numbered JPEG images (thumbnail_0001.png, thumbnail_0002.png, and so on). The key is the -vf flag, which defines two FFmpeg filters: The fps filter selects one frame every 5 seconds (fps=1/5). The first scale filter scales the width based on the sample aspect ratio (scale=iw*sar:ih). Without this filter, frames can be stretched and distorted. The second scale filter scales the input video, preserving the original aspect ratio (force_original_aspect_ratio=decrease), and ensuring the output images fit within 945×945px or the size of the input video, whichever is smaller. My limit is 945 pixels because that’s the largest size that cover art is shown on my iPhone. This filter still isn’t completely correct – it sometimes creates images from portrait videos that are smaller than I’m expecting – but it’s good enough. These are only thumbnails for glancing at, and if I want to change it later, I can always do the image resizing outside FFmpeg. 3. Insert the images as hidden chapters in the MP3 file Inserting the chapters into the MP3 file is more complicated. Although FFmpeg has basic support for ID3 metadata, as far as I know, it can’t insert chapters with per-chapter artwork. Instead, I’m going to reach for Python and the Mutagen library. Here’s the code to add a chapter to an MP3 file: from mutagen.id3 import APIC, CHAP, ID3, PictureType audio = ID3("audio.mp3") with open("thumbnail_0001.jpg", "rb") as f: img_data = f.read() image_frame = APIC(mime="image/jpeg", type=PictureType.OTHER, data=img_data) chapter_frame = CHAP( element_id="chp1", start_time=0, end_time=5 * 1000, sub_frames=[image_frame] ) audio.add(chapter_frame) audio.save() This creates a single chapter that lasts the first 5 seconds (0 to 5000 milliseconds), and the per-chapter cover art is thumbnail_0001.jpg. If we ran this in a loop, we could add images for every 5 second slice of the original video. This code is inserting two frames into the ID3 metadata: The CHAP (chapter) frame contains the timing information, and it can have subframes for metadata like title, chapter art, or associated URL. The APIC (attached picture) subframe contains information about a picture, which can either be a blob of image data or a URL to an image on the web. Normally, you’d also insert a CTOC frame which defines a table of contents, but I don’t want a TOC with hundreds of 5-second chapters, so I’m deliberately not doing this here. This is allowed by the ID3 spec – you’re not required to insert a CTOC frame if you’re using chapters, and you can have chapters that aren’t listed in your table of contents. To work out which frames I needed, I used Forecast to create some chapters by hand, and I inspected their frames. In particular, loading an MP3 and calling Mutagen’s pprint() method shows a human-readable list of frames, and then I could drill into the individual fields: from mutagen.id3 import ID3 audio = ID3("audio.mp3") print(audio.pprint()) I wrapped all this code in a project called glancecast, which allows you to convert a video file with a single command, with optional flags to set the frame length and chapter art size: $ python3 glancecast.py interesting_talk.mp4 interesting_talk.mp3 The process takes a minute or so to complete, most of which is spent transcoding the video file to MP3. The resulting MP3s are usually 40 to 50 MB in size, which is very reasonable. The outcome: How it looks in practice Here’s what one of these “glanceable” podcasts looks like in Overcast and on my lock screen: Maggie Appleton presented this talk over two years ago and it’s been on my “talks to watch” list ever since. Once I put it in Overcast? I listened to it in less than a day. It’s not a lot of extra information, but enough that I can quickly glance down and get the gist of what a speaker is saying. Both views update with a new frame every few seconds, or I can put my phone in my pocket and ignore the screen. I’ve used this approach for half a dozen videos so far, and I’m happy with the results. I expect to keep using it, because I have a long queue of videos I’ve been meaning to watch. If you’d like to try this, check out glancecast for the full code and instructions. [If the formatting of this post looks odd in your feed reader, visit the original article]

16 hours ago 1 votes
AI Isn’t Replacing Open Source

Andrew Baker, the current Group CIO at Capitec Bank wrote an interesting piece on AI and open source, and how these tools that generate code according to one’s specification may replace the general reliance on open source implementations done by contributors around the world. I’d really recommend reading it. I have great admiration and respectContinue reading "AI Isn’t Replacing Open Source"

23 hours ago 1 votes
Confessions of an Unrepentant Slop Snob

A framework for thinking about when AI involvement is additive or a violation

2 days ago 1 votes
Planning with Agents: Divided Worlds, Boundary Objects, and Thicker Interfaces

Why we need richer, thicker interfaces and better boundary objects for collaborative planning with agents

2 days ago 1 votes
Foundations of Agent Friendly Codebases

A look at 10 foundational pillars that enable agents to operate more competently and more efficiently in any codebase.

3 days ago 1 votes
📚 BoredReading

You seem to be enjoying this.

Join free to unlock everything.

Create free account

Already have an account? Sign in