RSSAmplifier

Blog

Philip Mateescu

philipm.atRSS feed ↗61 posts

Latest posts

TIL: Fixing no video playing in Firefox on Linux Mint -- broken ring buffer

The problem: On Linux Mint 22.3 with a Radeon RX 5700 XT (Navi 10) connected via DisplayPort, YouTube videos (and video playback generally) in both Firefox and Chrome would hang indefinitely with a spinning loading cursor — no frame ever rendered, no audio. Interestingly, downloading the same video and playing it locally worked fine, which pointed away from a codec/decode issue and toward…

Rejecting working AI code

Good rules from Vinicius Brasil on When [to] reject AI code even if it works : More and more, I reject AI code for the same reasons: I reject AI code when I can’t explain the approach in my own words. I reject AI code when the diff is bigger than the problem. I reject AI code when it introduces abstractions before proving they’re needed. I reject AI code when it works locally but makes the system…

A reverse signal for judging competency

Speaking of the output-competence decoupling , this is a signal that can be used in reverse to figure out what you can improve: Planktonne : A general pattern for LLMs is that they look really good at things you are bad at. What that means is that if you find yourself thinking of its output as significantly better than yours in a particular domain, there’s a high chance that you are not equipped…

TIL: "output-competence decoupling"

I learned of this term from a thoughtful essay from No One’s Happy that examines the flood of AI in the workplace from within, and also without. Generative AI can produce work that looks expert without being expert, and the failure arrives in two shapes. The first is when novices in a field are able to produce work that resembles what their seniors produce, faster or more advanced than their…

TIL: git sparse-checkout

This is useful in having both a limited footprint from a repo, while also the ability to update. I use this to keep a library of AI skills up-to-date, without having to copy them manually: $ cd ~/.agents/ $ git clone --filter = blob:none --sparse https://github.com/anthropics/skills anthropics-skills $ cd anthropics-skills $ git sparse-checkout set skills/frontend-design $ ln -s…

Techcrunch: Tech CEOs are apparently suffering from AI psychosis

There have been multiple reports of similar … “enthusiasm”, and this this Techcrunch article nails it: CEOs are uniquely prone to AI psychosis because they’re sufficiently distant from the last mile of work that still has to happen to generate most value with AI. Per Aaron Levie of Box.com: CEOs “play with AI,” develop a prototype, or generate a contract, to use Levie’s examples, and then make the…

Derek Sivers: Geography is four-dimensional

Thoughtful post from Derek Sivers arguing that time is a component of a place: When someone speaks of a place, you have to ask, “When?” Geography is four-dimensional. You can’t know a place - only a place as it was at a time. Where is bound to when. Unless you are in a place right now, you can only speak of it in past-tense. Any 3D place that changes with time is needs that fourth, time dimension…

Quote -- "Paying for someone else to own a problem"

An excellent quote from Quinn Keast’s What, then, are we paying for? : Paying for software isn’t paying for a solution. It’s paying for someone else to own a problem. This feels the software equivalent of “People don’t want to buy a quarter-inch drill. They want a quarter-inch hole!” Another quote that goes to the heart of the matter: It’s paying for someone who has the taste and the context to…

Getting `fnm` to clean up its auto-links

fnm is a fantastically fast node manager, which make it a pleasure to use over nvm . fnm handles its own node versions and it observes .node-version files in folder, automatically installing/loading the proper node version. Part of how it does that: It keeps a user-global installation in $HOME/Library/Application\ Support/fnm , and it’s where it stores the various node versions installed by the…

Copying ignored files to new git worktrees

When creating a git worktree, files ignored by .gitignore are (rightfully) not copied. But often we exclude in .gitignore files that are useful for development. For example, .env files; or for .NET, appsettings.local.json files. If the intent of the worktree is to have a useful-for-development folder and branch, then these files need to be copied over. Here’s my solution involving post-checkout…

Good designs converge

Wonderful essay by Paul Graham: The Brand Age . I learned a lot about watch history from it. I like how he positions branding and design as opposite: Branding isn’t merely orthogonal to good design, but opposed to it. Branding by definition has to be distinctive. But good design, like math or science, seeks the right answer, and right answers tend to converge. […] It’s the same if you want to set…

TIL: Adding custom wallpaper folders to macOS

A nice, notarized program, that makes adding a wallpaper folder as easy as /usr/local/bin/wallpaper-folder add ~/Pictures/Wallpapers AI Summary The article explains how macOS wallpaper folder handling changed in macOS 26 and how that broke simple scripted approaches admins used to add brand or custom wallpaper collections. Previously you could drop images into /Library/Desktop Pictures (which…

TIL: GitHub 10x+ Commit Surge in 2026

Kyle Daigle, COO of Github, responding to an tweet with some data about the insane amount of code GH sees as the result of AI: There were 1 billion commits in 2025. Now, it’s 275 million per week, on pace for 14 billion this year if growth remains linear (spoiler: it won’t.) GitHub Actions has grown from 500M minutes/week in 2023 to 1B minutes/week in 2025, and now 2.1B minutes so far this week.

TIL: Setting a minimum release age for packages

I learned , in the light of the axios compromise that a good deal of package managers support setting a minimum release age for packages: ~/.npmrc min-release-age=7 # days ignore-scripts=true ~/Library/Preferences/pnpm/rc minimum-release-age=10080 # minutes ~/.bunfig.toml [install] minimumReleaseAge = 604800 # seconds For Python with uv (which by now should be the default): ~/.config/uv/uv.toml…

TIL: Getting VS Code running on (fresh) Linux Mint v22.3

The first step of Visual Studio Code install is deceptively simple: download the .deb file, double-click to open. Trying to log into accounts causes a notification/error: You’re running in a GNOME environment but the OS keyring is not available for encryption. Ensure you have gnome-keyring or another libsecret compatible implementation installed and running. The keyring troubleshooting page…

TIL: Setting up Claude Code with Azure Foundry models

Claude has documentation on this, but I find the Azure Foundry’s documentation more useful because the instructions are more up-to-date with their UI (currently changing once more). The one thing I wasn’t so comfortable with is setting the keys and all in env vars. If any process has access to the environment, it can extricate these values, even by mistake, and that’s not desirable. Luckily, the…

TIL: Pairing a Logitech K380 keyboard on Linux Mint

The Bluetooth Manager in Linux Mint 22.3 detects the Logitech K380 keyboard, but doesn’t display the pairing code, or doesn’t display it for long enough (supposedly 10 seconds, but I didn’t see it at all). There are two approaches: The script from ValeriaRoyal/logitech-k380-bluetooth-linux-fix is the simplest version. Scans for the code and gives you 60 seconds to enter it. I didn’t try this one,…

"The machine didn't take your craft. You gave it up." -- David Abram

It’s a bit of a long essay by David Abram in which he argues that LLMs shifted where problems are solved, much the way we shifted to high-level languages or compiler. I have been doing this for years, and the hardest parts of the job were never about typing out code. I have always struggled most with understanding systems, debugging things that made no sense, designing architectures that wouldn’t…

Removing the menu icons in macOS Tahoe

Saw this advice from multiple sources, most pointing to @stroughtonsmith : defaults write -g NSMenuEnableActionImages -bool NO followed by a computer restart results in the menu icons being hidden, except for when apps specifically overwrite this settings. It even preserves the couple of instances you do want icons, like for window zoom/resize. Firefox, for example, keeps icons for the Bookmarks…

Two macOS tools for sandboxing agents

Both Agent Safehouse and Nono (get it, no-no?) use macOS sandboxing to execute agents. Agent Safehouse Pull down a self-contained Bash script with curl , and drop it in ~/.local/bin . Run your agent command prefixed with safehouse : safehouse opencode . The tool auto-detects the git root of the working directory, applies a deny-all baseline, and layers on permissions for common toolchains. Nono…

TIL: Essential Claude Code Skills and Commands

Summary The article explains the difference between Claude Code’s built-in slash commands and its prompt-based skills: slash commands are fixed, non-AI operations (like /clear or /model), while skills load instruction files into Claude’s context and can spawn subagents, accept arguments, use tools, and include supporting files and frontmatter. The commands-and-skills systems have been unified…

TIL: Single-executable local LLM

Summary llamafile is a single-file executable format that packages an open LLM’s runtime and weights so the model can run locally with no installation. By combining llama.cpp with Cosmopolitan Libc, a llamafile contains everything needed to execute a model on a user’s machine and aims to make open LLMs more accessible to developers and end users. Technically, llamafiles add runtime dispatching for…

TIL: lnav - a fast log viewer with remote capabilities

A TUI for log files. Summary lnav is a terminal-based log file viewer that lets you merge, tail, search, filter, and query log files without any server or complex setup. It automatically detects file formats, unpacks compressed files on the fly, and provides online help and operation previews to simplify use. Designed for performance, lnav can outperform standard terminal tools when processing…

TIL: PR (anti-) patterns in the world of agentic AI

Simon Willison on PR (anti-) patterns in the world of agentic AI There are some behaviors that are anti-patterns in our weird new world of agentic engineering. It’s so easy to create AI PR slop in this new world, even on private teams. If you open a PR with hundreds (or thousands) of lines of code that an agent produced for you, and you haven’t done the work to ensure that code is functional…

How long will my Mac’s SSD last? About 3000 erase-write cycles

**Key points** * SSDs wear out differently from hard disks. * Expect modern Mac internal SSDs to wear out after at least 3,000 erase-write cycles. * To monitor wear, measure the total data written to the SSD. * Expect an internal SSD to wear out when that total reaches 3,000 times the total capacity of the SSD. * For a given amount of data written to an SSD, the larger the total capacity of the…

TIL: LLM Pricing Calculator

LLM Pricing Calculator allows you to compare models and there it includes nice explanations like “ 1.33x input vs Gemini 2.0 Flash Lite, 1.33x output ”. Can also calculate operation pricing if the number of input and output (and cached) tokens are known.

TIL: How to Audit a Rails Codebase: Legacy App Playbook

The post has a really strong opener: […] the first week isn’t about reading the code. It’s about reading the signals. The client already has opinions about what’s wrong. They’re usually partially right and almost always wrong about why . Your job in week one is to separate what looks bad from what’s actually dangerous. Summary This guide outlines a practical, week-one playbook for auditing legacy…

TIL: Jetbrains DataGrip -- Automatically start VPN connection

A good security approach when working with Azure-hosted databases is to connect through a VPN tunnel. This typically involves installing the Azure VPN Client and importing a profile file, and then starting that VPN tunnel before connecting to the database. On macOS the above creates a system-wide VPN profile, which means it can be started from the command line with: scutil --nc start "vpn profile…

TIL: VCR.py -- records and replays HTTP calls for testing

Summary VCR.py is a Python library inspired by Ruby’s VCR, which simplifies and accelerates testing that involves HTTP requests. VCR.py records HTTP interactions the first time they occur and saves them in a ‘cassette’ file. On subsequent test runs, it replays these interactions, eliminating the need for actual HTTP traffic. This approach allows for offline testing, ensures deterministic test…

Automating TIL Posts from GitHub Issues

I read a lot of things on the internet and rarely write about them. The friction of opening an editor, writing front matter, crafting a summary, and opening a PR is just high enough that it doesn’t happen. So I set up a workflow to do most of it for me. The idea: create a GitHub issue with a link (or just some notes), and a GitHub Action kicks off, fetches the article, asks an LLM to summarize it…

TIL: Building a self-updating profile README for GitHub

Summary Today I learned about a new feature on GitHub that allows you to create a profile README by setting up a repository with the same name as your GitHub account. Create a repo with the same name as your account: github.com/foobar/foobar; Add a README.md to it; and GitHub will render the contents at the top of your personal profile page. Bonus: automate update with GH Actions Source: Building…

Connect From PyODBC to SQL Server in DataBricks Cluster

It’s a shame that clusters created in Azure DataBricks don’t have the pyodbc drivers for Microsoft SQL Server installed by default. Perhaps the people who normally use DataBricks don’t typically connect to SQL Server, but it feels that it’d be easier if the images provided by Microsoft would enable that by default. Then, to make things more difficult, a lot of the answers on the Internet on how to…

Cached Claims when Using Windows Authentication in ASP.NET Core

In Loading Claims when Using Windows Authentication in ASP.NET Core we examined an approach for injecting Claims into the ClaimsPrincipal in order to enable policy usage – [Authorization(Policy = "SomePolicy")] – on controller actions. One of the purposes of the IClaimsTransformation implementation is to provide an easier, and somewhat efficient, way to use authorization policies. As such, we…

Replicating macOS's say command in Windows

Is say , macOS has a wonderful command line utility which I found to be useful to use in conjuction with long-running processes or even debugging to help draw attention, more so that typical beeping would do. In short, say speaks text - is a Text-to-Speech (TTS) program. say "Hello, there" I wanted something similar on Windows and while there’s no direct equivalent, luckily .NET provides an entire…

Enumerating Directly to a FileResult

ASP.NET Core controllers have a series of file method that deal with returning files to the browser. The methods can be grouped in three categories, all returning a FileResult : returning a file specified by path: File(String, ...) and friends; returning an array of bytes making up a file contents: File(byte[], ...) , etc; returning a file whose content is read from a stream: File(Stream, ...) ,…

Two Approaches to Searching Users in Active Directory

I’m sure there are more than two ways to perform searches against Active Directory, however I wanted to highlight two approaches: DirectorySearcher and PrincipalSearcher . The former, DirectorySearcher comes from System.DirectoryServices and it’s the more “bare-metal” version of the two. PrincipalSearcher , of System.DirectoryServices.AccountManagement provenance, is more of a query by example…

Loading Claims when Using Windows Authentication in ASP.NET Core 2.x

NOTE 1: the post below applies to ASP.NET Core 2.x. Things have remained conceptually the same in 3.1 and 5.0, though a few registration options or layouts may have been changed. For an updated version of the code in here, see my Github repo which contains a fully runnable sample. NOTE 2: When using IIS Express, the claim transformation mentioned in this post is called on each request. The Cached…

Thirty_minutes_before_coding

By noticing them missing in a good deal of projects and the friction and occasional frustration that came with it, I have came up with a list of things I would like to have in place before I start writing even a single line of code. This list attempts to address three questions: What is this project and/or what purpose does it solve? How does one run it or use it? How can one contribute? Those are…

Converting to Base64 in Powershell

There are a variety of ways to send a file to Web end-point and encode it in the the process. For example , using Invoke-RestMethod -InFile ( docs ): C:\PS> Invoke-RestMethod -Uri http://example.com ` -Method Post -ContentType 'multipart/form-data' ` -InFile c:\temp\test.txt However, if we want/need to include one or more files as part of a larger JSON payload, perhaps with other information for…

Versioning Assemblies with Cake and Git

Requirements Given an application, I want to be able to trace its binaries back to the source code “version” it was built from; As such, I want this identification ability to be automatically employed during the build process; I want to have easy ways of retrieving this information , as well as the version of code it was built from; All files built at the same time have the same version ; I use…

Touch Command in PowerShell

The two simplest use cases for the touch command are to: Create one or more files, if they don’t exist; Update the access date or modification date of files without changing their content. To replicate these two cases in PowerShell, we make use of the LastWriteTime property of a FileSystemInfo object, as well as creating an empty file if one does not exist at the specified path. You can add the…

See Unread Emails in iOS Mail App

I don’t aim for Inbox Zero, but I aim to read all the emails I receive, however, with default setting the iOS Mail app does not make it easy. For a while, it seemed that the only way to find unread emails and get that red badge to disappear was to scroll through the inboxes and try to find the emails with a blue dot to their left. Turns out there’s a better way and that indeed the iOS Mail app has…

PUT and DELETE with HTML Forms in ExpressJS

In trying to send data from an HTML form to an ExpressJS backend I soon discovered two things: FORM elements only support GET and POST , not PUT , nor DELETE ; ExpressJS does not have a built-in way to address this but fortunately there’s a middleware plugin, method-override , that does. method-override ’s documentation is great and very much on point, except for the FORM post override section,…

django-permissivecsrf

I bet you’re here because you’ve run into the puzzling Django error CSRF verification failed. Request aborted. Reason given for failure: Referer checking failed - http://<domain>/ does not match https://<domain>/. I’ll double down that this happens when you try to make your login form post to HTTPS, perhaps to https://<domain>/accounts/login/ . If I’m mostly right, you’ve run into the problem I’ve…

Miniature Minifier Makefile

A solution that uses only make and curl: # c/o: http://wonko.com/post/simple-makefile-to-minify-css-and-js # Patterns matching CSS files that should be minified. Files with a -min.css # suffix will be ignored. CSS_FILES = $( filter-out %.min.css, $( wildcard \ css/ * .css \ css/ ** / * .css \ )) # Patterns matching JS files that should be minified. Files with a -min.js # suffix will be ignored.…

Kendo Grid Select Editor

I’m going to assume you’re reading this post because you’d like to find out how to use a regular HTML SELECT as an editor in a Kendo grid , and that you already know why you want to do that - you just had a hard time figuring out how to. If you just want to see the code and don’t care about the explanation, here is a jsFiddle to play with, also a gist for your forking pleasure. If you wonder why…

Templates for GoodNotes

Recently I’ve been testing a few apps for taking notes and I have settled on GoodNotes . It’s a really good looking app and the developers are dedicated to it. How dedicated? They had a retina version out within days after the iPad 3 release. After a few weeks of giving up paper and exclusively using the app, I’ve created a few templates for the type of notes I find myself taking most frequently.…

Asymmetric Sparkbars

I am creating some sparkbars, sparkline’s poorer cousin, for a project I’ll talk about soon, and I wanted to represent in a single chart both additions and subtractions. As it happens, there’s an entire range of Unicode characters devoted to blocks: U+2580 to U+259F , of which U+2581, “Lower one eighth block”, through U+2588, “Full block”, seem perfect for rendering text sparklines. The smart way…

Json.NET and NHibernate Serialization Blues

After spending some irritating hours with Microsoft’s JavaScriptSerializer , I’ve switched over to Json.NET and I’ve been happier. That matters. A lot. I have better control over serialization, for example I can specify how to handle circular references ( ReferenceLoopHandling ), or whether to include nulls ( NullValueHandling ) and/or default values ( DefaultValueHandling ); it also gives me more…

JSON Entity Converter

Whether in the context of my friend Curtis’s BORAX proposal, or my own , we will eventually need to serialize our domain objects and ship them to the browser. Our best solutions is probably some sort of Domain Transfer Object (DTO) , but for a second let’s assume we take the quick route and turn our domain objects directly into JSON mush. Is ASP.NET MVC 3 we can use the JsonResult class, but with…