RSSAmplifier

Blog

Kothar Labs

Projects and articles by Mike Houston

kothar.netRSS feed ↗22 posts

Latest posts

Getting my grocery receipts into ChatGPT the long way round

My grocery purchase history from online orders over the last few years is sitting in a database, ready for analysis with an LLM - but getting it there turned into a surprisingly interesting journey through the Model Context Protocol (MCP).

Managing Multiple Git Identities with Conditional Includes

If you contribute to both internal and client Git repositories - or juggle multiple client projects - keeping your commit authors and SSH credentials in order can get messy fast. Thankfully, Git offers a powerful feature to help with that: conditional includes . In this post, I’ll walk through how I use this approach to keep my Git identity and credentials scoped correctly depending on the project…

CSView 1.3.8 (Windows x64)

A new build of CSView is available for Windows. This is a maintenance release updating the project dependencies to the latest versions, and fixing a minor bug relating to scroll bar handling. The new version is 1.3.8 and is available to download Version 2.0 for macOS is getting close to a release. Apologies to anyone who’s been waiting for this for a long time! It will be a paid application,…

CSView 2.0 Beta

CSView 2.0 Beta for MacOS is now available on TestFlight . Version 2.0 still doesn’t support all the features provided in CSView 1.x, however it’s at a point where I find it usable and want to get it into other people’s hands to see where any critical improvements are needed. See the Alpha release announcement for full details of the changes in CSView 2.0

CSView 1.3.6

A new build of CSView is available, and it now supports Apple Silicon Macs (i.e. M1 series of SoCs which use the ARM aarch64 architecture) The new version is 1.3.6 and is available to download Due to Java’s support for Apple Silicon, it’s not possible to build an app bundle which supports both Apple and Intel CPUs at present. This is a requirement for distributing the app through the App Store, so…

CSView 2.0 Alpha 1

CSView 2.0 Alpha 1 for MacOS is now available for download! Download CSView 2.0 Alpha 1 - macOS 10.12+, 64-bit Intel, 3.5MB Version 2.0 is a macOS native application, bringing performance and visual improvements. Startup time is improved over the 1.x implementation UI rendering is now able to take advantage of native graphics acceleration Dark/Light theme is picked up from your OS settings macOS…

MacOS Catalina - Notarization and App Store Signing with Java 11

With the release of macOS Catalina (10.15) there have been some changes to the way software needs to be signed. In particular, Apple has introduced a new Notarization service which allows developers to pre-register the digital signature of an application so that it can be later checked by the operating system when a user downloads software outside the App Store. I took this as a good opportunity…

Streaming multipart HTTP requests in Go

Having seen Peter Bourgon’s post on multipart http responses come up in the Golang Weekly newsletter, I thought I would write some notes on a related problem I was looking at recently: how to stream a multipart upload to a remote HTTP server. My specific use case is to receive a stream from AWS S3, and pipe it into the upload API for Asana. It’s probably ending up back in S3, but that’s neither…

Generic Adapters in Go

While playing about with ideas for generic types in Go, I have come up with what I’m calling a ‘Generic Adapter’. The approach I’ve taken here is essentialy that described by Kevin Gillette in a 2013 Post to golang-nuts . It implements ‘erasure-style’ generics by wrapping the generic implementation of each method with an adapter function which handles type assertions for the caller.

Backblaze B2 Performance Part 2

After my earlier experiments with B2 , I had an extremely interesting call with Backblaze about B2 features and performance. Firstly, they have recently added a caching layer to speed up serving repeatedly requested files. This reduces the delay as the file is reassembled from Reed-Solomon slices. They also suggested that I do some new tests, as they thought I should be seeing faster speeds, even…

Backblaze B2 and Go

I’ve been implementing a Go client library for the Backblaze B2 cloud storage service: go-backblaze . It works extremely well, but is a bit slow to get files back. Update 12th December: I’ve spoken to Backblaze, who have been working to improve performance. I have performed some new tests and written them up .

Organise Asana Projects

UPDATE : Ditto - the successor to this tool - has now been launched . Please give it a go and let me know how you get on! I was faced recently with wanting to move Asana projects from one workspace to another. Unfortunately this isn’t a feature in the Asana interface (yet). There’s a PHP script floating around GitHub which will copy tasks between projects. This requires you to do some manual…

File sync and cloud storage client comparison

I’ve been trying out a number of file sync clients recently, finding that many are trying to solve the same problem and meeting with varying success. Probably the best-known service in this category is Dropbox , but nearly every big cloud services company, and a multitude of startups which base their services on top of them, are providing a ‘cloud drive’ of some description.

Plex, SSL and Nginx

I’ve been experimenting with the Plex Media Server , and decided to have a go at securing remote access to the ‘Web Client’ interface using SSL (by default it runs over an unencrypted HTTP connection). This post is essentially a gathering of instructions from where I found them on the internet.

Resampling for fun and profit

I’m a co-author on a paper which was presented at RTNS this year. Sadly I didn’t have time to attend the conference, but it’s nice to have been able to contribute! Re-Sampling for Statistical Timing Analysis of Real-Time Systems

Dynamic Disqus Instantiation

I needed to use Disqus from a GWT app, so I needed to solve the problem of loading threads on demand as virtual pages in the app were changed. A small amount of reverse engineering and experimentation led me to construct a utility class (below). I also posted this answer on Stack Overflow .

Spotify for Linux media keys with DBUS

Now that Spotify has discontinued the free account , and restricted me to an ‘open’ account with only 10 hours of music a month, I’ve ended up paying for an ‘unlimited’ account. While I’m a little disappointed with this turn of events, it does mean I am now able to use the Linux client. It seems pretty decent so far, but I wanted to map some keys to do things like play/pause and next.

Lock-Free IPC

I was doing some reading a while back into lock-free algorithms for multi-threaded communication using buffers. The general idea is to use a circular buffer in shared memory to allow one process (or thread) to write data into a buffer so that another process can read it. The algorithm relies on atomic compare-and-swap instructions, which are part of the x86 instruction set and also present in…

Enabling IMAP SSL and TLS encryption for mail-notifier under Ubuntu

After struggling all morning to find or compile a mail notification applet that supports TLS encryption under Ubuntu, I finally read all the way to the end of the Launchpad bug for mail-notifier ( all 119 comments) and found David Jurenka ’s time-saving PPA with SSL support enabled . Thanks David!

Shorter Bash Prompts

I use Java a lot, and the common practice of naming java packages with long URI-derived namespaces often leads to my bash prompt becoming extremely long. Here’s a script to display an abbreviated path on the bash prompt.

Javada 0.1.1

I’ve released a new version of Javada today - just a maintenance fix, after an email request for a pre-compiled version. It’s available for download from: https://bitbucket.org/mikehouston/javada/downloads Also note, the licence is now LGPL.

Brief introduction to PolyORB

I’ve been experimenting with PolyORB at work, and the documentation, while fine for configuring and compiling your application, is sorely lacking on any help with implementing your CORBA servants. Here I’ll attempt to provide some brief hints on how to do things that don’t seem to be described in the documentation. The PolyORB mailing list is a good place to find more information. [Nov 2021]: The…