Go visit the website any of your favourite AI agent or tool. Navigate to installation instructions.
It’s very likely going to be a form of: curl URL | bash or npm i -g. Claude Code, OpenCode, Codex, Pi - all of them. I get it, it’s convenient.
Thing is, even if you “trust” the provider, you can’t rule out supply chain attacks. npm is already notorious on that front. Despite a prolonged effort by the npm folks to clean this up, the problem remains that contaminating the supply chain remains and has become ever so lucrative. And if things couldn’t get worse, now there’s hundreds of published vibecoded software that recommend the same process. The unsafe behaviour seems to have become the de facto way to install any software.
We’ve been expanding the team at DigiUsher. I’ve interviewed dozens of engineers. I noticed a pattern: almost everyone defaults to microservices when conversation moves to system design. When I ask why, the answers are often vague. In my experience, it’s the same set of engineers who haven’t yet been exposed to the overhead of a new microservice.
I have yet to see a microservice architecture that doesn’t carry significant unnecessary complexity compared to a well-built monolith.
I rely heavily on Wake-on-LAN to wake my desktop and ssh in for working remotely. Last month I ran into an issue; Wake-on-LAN wasn’t working. I had to physically press the button or press a key on the keyboard to wake up my desktop.
Over a weekend, I sat down to figure out what was going on.
The Arch Wiki Wake-on-LAN page has a bunch of suggestions on how to get Wake-on-LAN working correctly, but it wasn’t obvious to me what had changed in a system that had been working fine for over two years. Running sudo ethtool enp34s0 | grep Wake-on: showed that Wake-on value was d, disabled.
I often work with JSON responses and need to process, view or compare objects. I have come to depend on a bunch of command line tools for these tasks. Do you use any other tools? Let me know in comments below.
bat (better cousin of cat) is perfect for reading syntax highlighted JSON. It’ll use a pager for files that don’t fit on the screen and files can be searched by using the / operator.
Updated in October 2024, to work with Wayland and native OSC-52 support
My current working setup is tmux + neovim. On top of that, I use my desktop for development that I often access remotely outside of home.
One of the drawbacks of working remotely via SSH was that I couldn’t copy to my client’s native clipboard (eg: to share code snippets in Slack) remotely.
OSC-52 has been around for a while and has been adopted gradually which is what I used to get a working copy paste working on my remote tmux session. Note that all layers of communication from the terminal to the editor need to support OSC-52 and have the feature enabled.
OpenAPI-Generator is a spectacular tool built on top of OpenAPI schemas that can generate API clients from OpenAPI schemas. Coupled with the automatically generated OpenAPI schema in FastAPI, it’s a formidable paradigm to learn. I’ve been using this pattern in some of my recent projects and it’s made me very productive.
If you are looking for a real world example using this pattern, you can look at my FastAPI-Starter project, which is a Cookiecutter project that uses this pattern and tons of other helpful features.
I really like my Sony 1000XM3 headphones. They are super comfortable to wear and pack away compactly when I’m travelling.
I have always hated one feature though: the headphones always start with noise-cancelling (NC) enabled. This default setting irritates me because it means I have to charge my headphones more often. In addition, I’ve also had ear fatigue when I use NC for too long. [0]
Sony provides no way to change this default (they would rather add gamification to their mobile app). After a late evening session with lots of tea for company, I finally figured out a setup to disable NC that works on Linux. It uses a combination of a Python script, udev and systemd to send a magic payload over bluetooth right after the headset is connected.
Heroku makes it a breeze to deploy applications to the cloud on their free instances. Although it’s straightforward, here are my notes of how I set up the “Deploy to Heroku” button for No Cookie Analytics.
The No Cookie Analytics comprises separate backend and frontend (SPA) apps. To make the deployment process less complex, I set up a monolith Docker image where the backend served static assets.
I take a lot of notes and it was becoming a real headache to organise and revise things I had studied. I’ve been eyeing the e-ink tablet market since Remarkable launched a few years ago. The lack of a backlight and a recently introduced subscription model drove me to go for a Boox Note Air 2 instead.
Here’s my experience of using the tablet for 6 weeks.
It was around the start of the pandemic in 2020 that I started hacking away at some of the ideas that I had collected but didn’t have a chance to work on. I had come across the FingerprintJS project, and I had an idea to use similar fingerprints for a cookie-free analytics platform. At that time, other competitors in this market were still in their infancy, and I wanted to build an analytics product that will have more information for marketeers to base business decisions on. I started building No Cookie Analytics.
Update (2021-10-31): DuckDuckGo now includes results for Wikivoyage again, as do Bing and Yahoo.
I have been planning a long due vacation and I was doing some research into the places I wanted to visit. My goto travel guide is Wikivoyage: it’s well organised, text-heavy (instead of slideshow-heavy alternatives) and skimming the guide of a region will generally give a good idea of what to expect.
So imagine my surprise when I enter a query with the keyword “Wikivoyage” on DuckDuckGo:
Incorporating anti-spam measures are the least of concerns while building a user generated content (UGC) platform. Unless you’re paranoid and spend precious time building moderation features in your platform, there will come a day when you sorely miss those tools. This is a story about exactly how this happened and how I dealt with it at Polarsteps.
I’ve been building No Cookie Analytics in Vue using the Vuetify framework. Most of my time was spent hacking away without any due regard to performance. I looked at the PageSpeed Insights score, which handed out an abysmal score of 29 (out of 100). It was not shocking, I hadn’t spent any time on this part. The app was sluggish and I knew I had to fix it. Here’s my before and after scores with the steps I took to optimise the app:
I recently migrated a medium sized Flask application from Python 2 to Python 3. Python 2 was retired over a year ago and upgrading the app was long overdue. I imagine there are still others who could use my lessons to migrate their apps.
A medium sized Flask application, ~20000 LoC running on Heroku with multiple celery workers. The app was already using the latest version of Python 2.7, which is a necessary stepping stone from 2.x to 3.x.
Working and living from home gave me a lot of free time that I could dedicate to reading. I read 40 books this year. I usually read fiction, however this year I aimed to read a mix of fiction and non-fiction.
IPython makes for very productive and effortless sessions working interactively with Python. From the numerous extensions for IPython, autoreload is one I use often. It’s very useful for working with existing code and being able to edit code from my code editor and have changes reflected automatically within the IPython terminal.
The recent takedown of the youtube-dl project resurfaced memories of a similar project, udemy-dl, that I worked on years ago. I also had to abandon the project due to a DMCA notice. In light of what happened to youtube-dl this felt like the right time to write about it.
Back in 2013 when I was starting off as a software consultant, I landed a project to build a desktop GUI application. I found a Udemy course for Python GUI development using Qt. After I started the course I ran into an obstacle. My internet was awful. It was slow (4 Mb/s, if I remember correctly) and disconnected frequently making streaming videos a painful experience.
I recently set up Mycroft (an open source personal assistant) on my Raspberry Pi. I bought a set of cheap speakers which run on USB power and plugged them into the 3.5mm output and the power cable to a USB port on the Pi itself. Right away I heard constant crackling noises coming out of the speakers. I figured I had a set of defective speakers but I could not reproduce this when I tried the same setup with my laptop.