An unfortunate aspect regarding the privacy discourse is how it has been subverted into a set of meaningless soundbites that detract from actual privacy issues. A commonly used refrain, often used to gatekeep software and services, is about how “they are selling your data”. That’s a gross oversimplification of what privacy is, and actively harms the concept of privacy by framing it as a binary. It…
Undervolting is something I’ve been ignoring for a long time on my GPU. In recent times, with the GPU shortage and the need to hold on to our PC parts for longer, undervolting is becoming more important. It helps reduce heat, reduce power consumption, might make the components last longer, and in some cases can even improve performance. I will cover how I undervolted my GPU on both Windows and…
While Linux is the best environment for development purposes, Windows has been my go-to for gaming and photo processing needs. But given how much time I spend in Linux, I naturally wondered whether I could reduce the need to dual boot. Gaming has certainly improved considerably, thanks to the efforts of Proton and Wine, but photo processing has always felt out of reach. Recently though, the same…
Terminal progress indicators are a common sight in command-line applications, often used to show progress of long running tasks and ensuring users don’t get bored. Implementing them in scripts these days is pretty straightforward thanks to various libraries, but I’ve been curious about how they actually work under the hood. The answer turned out to be very simple; the magic sauce is the character…
I have been seeing a number of articles and discussions regarding the decline of Stack Overflow posting activity over the past year. My immediate first thought was around the value that the question-answer dataset holds, and what would happen if it were to be shut down, or its vast repository of questions and answers rendered inaccessible; would it be prudent to start taking backups of the data,…
When running machine learning workloads that require GPU access, it’s usually necessary to have the CUDA toolkit ready. Although installing CUDA directly on the host is possible, I prefer to keep the host system clean and isolated from major dependencies. This is especially useful when working with libraries such as PyTorch, TensorFlow, and others that can end up in weird states of conflict with…
The most common way to run GitHub Actions is to use the hosted runners provided by GitHub, but these runners don’t have direct access to internal AWS resources such as databases or API/HTTP services in private VPCs. The usual approach to solving this would be to use self-hosted runners deployed within the same VPC, but that comes with the overhead of running and maintaining your own runners. One…
Traditionally there have been two main ways to deal with having to run Windows applications when using a Linux environment as a daily driver. The first is to dual boot into Windows, and the other is to use an emulation layer such as Wine or Proton. Recently I have been exploring alternatives to these approaches — running Windows applications in a lightweight Docker container or virtual machine.…
Firefox has a chatbot sidebar that can be used to interact with the popular LLM chatbot providers, such as Claude, Gemini, and ChatGPT. It is possible to allow it to also talk to a local LLM, although it’s not a readily visible option. Firefox with local chatbot The steps, roughly, involved installing ollama, open-webui, and configuring Firefox. Ollama Ollama is a tool that helps simplify running…
When working with multiple GitHub organisations, it is common to have to manage multiple SSH keys for git operations. The following solution is the one I have found to be the most convenient, with the least amount of overhead or behavioral changes, and as close to seamless as possible. Suppose you are in two orgs, org_1 and org_2 , and you have registered two SSH keys id_ed25519_org_1 and…
Since the Linux Terminal app was introduced for Android, I’ve been curious about the possibilities it could open up for personal app development. Considering that a smartphone is a portable computer, it makes sense that a user ought to have the ability to run their own apps on their own devices. The notion of running bespoke scripts or utilities for personal workflows feels logical and privacy…
Google’s Gemini CLI is command line, context aware assistant: it looks at your current directory, tools, and tries to make helpful suggestions. Here I go over how I was able to somewhat trim it down to a simple adhoc helper. I just type ? "How do I..." and get an answer. What gemini does By default, gemini runs in an interactive mode. It starts up a text interface with a little text-input-box,…
My terminal-based text editing almost always occurs in short sessions. I’ll usually want to modify something and get out. To me, it makes no sense to have to step on a learning curve for a text editor. A good tool gets out of your way, which is why I don’t tend to favour vim , and only tolerate nano . Recently, edit was open-sourced, and by chance I spotted that it had a Linux build , so I decided…
My favourite feature of any mouse that I’ve ever used is the automatic infinite scroll wheel mode. This is a mode where the scroll wheel, in its normal clicky mode, is flicked with enough force, and then continues to spin freely for a while, eventually slowing down and returning to normal mode. It’s a productivity enhancer that lets me rapidly scroll through long documents. It’s a gaming enhancer…
When my previous office building shut down, I ‘inherited’ a Pi-aware which had been set up many years ago. I was vaguely aware that it made use of something called RTL-SDR, but I didn’t actually understand what that meant. I thought it was just for tracking aircraft, but it turns out the receiver is a general purpose radio receiver and can be used for other things. The SDR simply stands for…
I have been looking at using uv for a Python project, and I’m quite satisfied with the productivity and performance it brings to the table for a local development environment. Currently, I find its documentation and examples could do with improvement in terms of CI/CD and Docker deployments; most examples and blog posts seem to focus on the final mile of running the application in a container, but…
Feature flags (or toggles) are often used to control the visibility of new features in a product. There are a few different ways to implement them, but the most talked and marketed about is to use feature flag management software. The simplest way of course is to hardcode them, though it’s the least written about. While feature flag management software can be powerful, they are also a source of…
Compose keys are a Linux feature that allows you to type special characters. They’re very useful for typing accents, umlauts, diacritics, and other special characters. All operating systems have a way of typing such characters, but they are, to put it mildly, a convoluted mess. Compose keys work in a very intuitive way, as the name implies, by composing two or more keys together. As an example, to…
Domains get blocked for a variety of reasons including security, family controls, content filtering, politics, and legal requirements. But when browsers encounter these blocks, they will usually display a somewhat generic and unhelpful error message. As end users it often isn’t clear to us why the domain was blocked, and unsurprisingly, encountering a blocked domain can be indistinguishable from…
I’ve been seeing some buzz around Sigstore recently, it’s a project that aims to improve software supply chain security by making signing and checking easier. It has seen ongoing work in the Python and Maven ecosystems, as well as npm and Github Actions , which is pretty significant. Sigstore is a project that aims to improve supply chain security, and one of its prominent projects is Cosign used…
On Ubuntu 22.04 and 24.04, the background image that you set for your desktop doesn’t appear on the login screen. I will go over two ways of synchronizing the login screen wallpaper to match the one chosen for the desktop. To skip straight to the scripts, see this Github repository . Desktop wallpaper, but dull login screen Setup Ensure that systemd-container is installed. sudo apt install…
While setting up PiHole on an Ubuntu 24.04 server, I realized that the usual instructions I’d been following for years on Debian systems for setting a static IP address (often involving /etc/network/interfaces or /etc/resolv.conf ) weren’t going to work here. It’s worth sharing now that I’ve learned how for myself. Netplan basically acts as a translation layer, it takes configuration files, and…
A reverse shell is a type of shell where the target machine (under attack) communicates back to an attacker’s machine, and importantly, gives the attacker control over the target machine. The attacker’s machine will be listening on a port. A malicious script runs on the target machine, which connects back to the attacker’s machine. The attacker’s machine receives the connection. The attacker is…
I’m not a networking professional, but I’ve often had to impersonate one. Here are some of the tools and commands I’ve found useful over the years. Reach a port on a server It’s not unusual for corporate firewalls or hotel WiFi to block certain ports/protocols, it might allow web traffic but not VPN or SSH; I want to find out if that’s happening. In work scenarios, an app on a remote server may be…
When working with certain AWS services that require secure connectivity over TCP, you might run into the dreaded “unable to get local issuer certificate” error. This is because the service is presenting a certificate signed by an Amazon CA that isn’t in your trust store. I’ve commonly seen this with services such as Redis, DocumentDB, RDS, etc. With the increased focus on security and expanding…
Returning to photography from a post-pandemic malaise has been an invaluable experience that forced me to re-evaluate my workflow and tools. The main reason for the break was the ease with which I slipped into staying at home, and the decreased prevalence of dedicated cameras and photography communities. There’s a post that talks about the rise, fall, and resurrection of Flickr which resonates…
I’ve modified my Kobo device to generate images from passages of text that I highlight. I select a passage of text, choose the “Visualize” option from the menu, and that text is passed to Stable Diffusion. The output is then displayed on the Kobo’s screen. Here it is in action. I’ve also added an ELI5 feature that simplifies the highlighted text using OpenAI’s GPT-3.5. Here is a quick demo:…
Git 2.34 introduced a new feature: the ability to sign commits using an SSH key instead of just a PGP key. This means you can now manage your SSH key with KeePassXC for both git operations and commit signing. It’s a convenient option, with everything being in one place; it’s certainly easier to manage than separate PGP keys. And it still offers the security benefits of a password manager — you can…
When the lockdown was announced in March 2020, there was a surge of traffic to online grocery sites. Although I had been an early adopter and frequent user of several online supermarkets, I found myself unable to access many of my usual shops due to the way they decided to handle the traffic. Most sites decided that the best course of action was to emulate fainting goats and would fall over, and…
A really nice quality of life feature I’ve noticed in some applications is the ability to automatically hyperlink some selected text when pasting a URL over it. To be clear this isn’t about automatically converting URLs in text into hyperlinks, rather when you have some text selected and you paste a URL over it, the text becomes a hyperlink to the URL just pasted. Here it is in action. Try…
GraphQL’s touted advantages are numerous, including data retrieval efficiency, and flexibility that it can enable. The Apollo GraphQL page even calls its developer experience its greatest benefit, but this is only true from the API owner’s perspective, not the API consumer’s. That might explain why it sells so well to API development teams in organisations; their local experience gives them the…
Due to the rapidly changing nature of LLM programming, this tutorial is likely to be outdated. I’ll still leave it up as it can be skimmed for general concept and ideas, which serve as a useful learning exercise. The specific libraries, platforms, and techniques will probably have changed. In this post I will go over an approach to getting developers familiar with, and write code against LLMs. The…
The most common programmatic interaction with Large Language Models (LLMs) and LLM APIs (ChatGPT, Claude) is to give it some natural language instructions and get a shaped, specific output back. For example you might ask it to summarize a news article for you, and have it respond only with the summary, for storage and further processing later. More advanced applications might have the LLM acting…
Due to the rapidly changing nature of the LLM landscape, this post may already be outdated. I’ll still leave it up as it can be skimmed for general concept and ideas, which serve as a useful learning exercise. While most well known Large Language Models (LLMs) are closed and behind paywalls, there exist open models such as LLaMa and its derivatives, available for free and private use. A thriving…
As I spend a lot of time on the CLI , I often need to look up commands, even if I’ve used them before. I like to offload memory elsewhere if I don’t need to remember things, including commands, boilerplate code, birthdays, phone numbers and so on, and do a search when I need them. As a convenience, I have written a CLI lookup tool , accessible from the commandline itself. It works by making use of…
Common ways of choosing a password manager are to see what everyone else is using, search for what’s popular, or just pick something convenient. I do the same, but also want to spend some time evaluating my choices because password managers are the ‘keys to the kingdom’. Threat modelling feels like a really good fit in helping evaluate these choices, doing so at a high level can go a long way…
My favorite kind of features are usually ones that let you start simple and still let you build powerfully on top without being overwhelming. .NET’s ConfigurationBuilder being one, is one of my favorite framework features. It’s used regularly in codebases, without much thought given to it, but I wanted to take a moment to appreciate it. The setup starts with a simple block, var currentEnvironment…
There are two ways that websites can offer users a choice between light and dark mode. The first makes use of pure CSS and is managed natively by the browser. The other involves a combination of CSS and Javascript and is usually accompanied by a sun/moon toggle that the user can click on. The pure CSS way The native way is actually quite simple. Design CSS for one color scheme, then override…
I recently switched from a Kindle device to a Kobo Libra 2, and have been playing around with its customization and tweaks. These are the ones I’ve found useful so far. They include dark mode, immersive reading, less fidgeting, Instapaper and Overdrive. Most important is integration with Calibre Web, and some unlocked features with NickelMenu. Kobo Libra 2 Better reading Reduce distractions I…
The common, prevailing advice given regarding TLS certificates is to avoid using wildcard certificates. That is, when securing a domain, it is considered a best practice to use a certificate for mydomain.example.com instead of *.example.com . The risk is that a compromised wildcard certificate has a large blast radius, and allows attackers to create multiple malicious domains under a ‘trusted’…
I have a simple epaper dashboard project , which displays the time, date, weather and calendar entries. Of course the format is entirely specific to English, and I had naïvely assumed that everyone would understand “Friday Feb 17, 2023” and “5:20 PM”. When I received a feature request to display the preferred time format based on the system’s locale, I decided to apply it to the days and dates…
A rite of passage exists, that after a certain amount of time spent writing on a platform, a blogger feels a need to revamp or migrate to something else. I used to come across such posts on various other blogs and I’d be dismissive of them. Just be happy with what you have, right? As it turns out, no , there are always good reasons to move, and it took me a while to understand that. I can say I am…
I used to develop my app solely for the Play Store, until just 2 years ago when I determined that the stress of arbitrary removals had accumulated to an unsustainable level. Several months later, I tentatively decided to repackage the app for F-Droid. It wasn’t out of some matter of principle, just one of convenience; I wanted the app to ‘live’ somewhere and F-Droid was an option that had been…
Security improvements tend to be a one way street, they are usually implemented in newer versions of operating systems, and by extension, on newer mobile devices. There is an assumption often made by technologists, that mobile device users are going through a constant upgrade cycle, but the assumption is made from a position of inequality, and grossly misunderstands how devices are used by a huge…
I prefer running my Torrent (and related tools) in a container, for isolation from my host OS, as well as the ability to route all of its traffic through a VPN. Although Docker images exist which bundle various tools with the VPN, it’s much cleaner to have a single container that manages the traffic, while leaving us with the freedom to choose which images we want going through the VPN. That means…
Due to the rapidly evolving nature of the GenAI ecosystem, the instructions in this post may become outdated as applications are developed, updated, and abandoned. Stable Diffusion is a machine learning model that can generate images from natural language descriptions. Because it’s open source, it’s also easy to run it locally, which makes it very convenient to experiment with in your own time.…
I have written a script that will attempt to update your Github user profile status with the game currently being played on Steam. I haven’t been using the Github Profile Status feature for any purpose, so might as well use it for something interesting to me. Example The script can mark the status as ‘busy’, and also expires the status after a certain number of hours.…
Dealing with open source software, I regularly encounter many kinds of licenses — MIT, Apache, BSD, GPL being the most prominent — and I’ve taken time out to read them. Of the many, the GNU General Public License (GPL) stands out the most. It reads like a letter to the reader rather than legalese, and feels quite in tune with the spirit of open source and software freedom. Although GPLv3 is the…
I used to have a simple life — I’d buy books off Amazon, and read them on a Kindle. But over the past few years, my reading habits changed drastically. I’m now reading a lot more things, from a lot more sources, on a lot more devices and have had to break out of the Amazon bubble. But I still wanted a relatively convenient setup for fetching and reading ebooks, and I’ve managed to achieve…
There is a growing focus on Zero Trust security models across businesses, and with this changing landscape will come a new set of security paradigms and processes that end users will need to adapt to. This isn’t going to be a frictionless process — workflow changes are very difficult to take up in established environments. They tend to have a habit of highlighting areas that hadn’t been considered…