Archives


These are the archives for The Technical Blog of James!

The early content which previously appeared on https://ttboj.wordpress.com/, has been migrated here.


Better dmesg in five minutes Posted on Nov 17, 2024
How to handle dmesg on a modern computer

A new provisioning tool built with mgmt Posted on Mar 27, 2024
A modern, easy and powerful provisioning tool

Bash $PATH filtering Posted on Mar 2, 2024
How to filter things out of bash completion

Upcoming Speaking and Events Posted on Jan 31, 2024
Where to get your mgmt fix in the next month

Git branch filtering Posted on Jan 28, 2024
How to make git branch filtering more palatable

Five minute hacks: Swapping left and right headphone audio in wireplumber Posted on Nov 22, 2023
How to actually make this happen.

One minute hacks: Saving time inserting images in Libreoffice Posted on Aug 2, 2023
How to anchor as character by default.

UEFI booting, and with a new kernel module Posted on Jul 24, 2023
How to get your dracut-built initramfs machine to boot with UEFI when you're missing a kernel module.

Improving git diff output in 5 min Posted on Jun 1, 2023
How to get rid of the annoying a/ and b/ prefixes.

Blocked select logging (deadlock finding) in golang Posted on May 26, 2023
How to log when you're waiting for a blocked select statement...

Deadline context test cancellation in golang Posted on Feb 24, 2023
How to map the cancellation context into your golang tests...

Magic typing with shortcuts on Linux Posted on Jun 16, 2021
How to workaround bad software by automating your typing.

USB Audio on a Boombox Posted on Jan 11, 2021
Getting USB audio working on a Sony ZS-RS60BT

Working at Amazon Posted on Dec 28, 2020
I found a new job

James is available for hire! Posted on Sep 10, 2020
Looking For A Job

Inexpensive Dynamic DNS over IRC Posted on Sep 1, 2020
Building inexpensive dynamic dns infrastructure for sysadmins

USB Car Audio in a Civic Posted on Aug 24, 2020
Getting USB car audio working in a 2013 Honda Civic EX

Mgmt Configuration Language: Class and Include Posted on Jul 26, 2019
Class and Include statements in the Mgmt Configuration Language

Upcoming Speaking and Events Posted on Feb 2, 2019
Where to get your mgmt fix in the next month

A guide to fighting with a Cisco access point Posted on Dec 21, 2018
How eight hours with Cisco Aironet gear made me angry for life

The End of a Red Giant Posted on Oct 30, 2018
Thoughts on IBM's acquisition of Red Hat

Hyperlinks in GNOME terminal Posted on Jun 29, 2018
how to benefit from fancy hyperlinks in your terminal...

Breaking out of the Slack walled garden Posted on Jun 22, 2018
how to use Slack via IRC since the gateway closed...

A new sync primitive in golang Posted on May 20, 2018
a new synchronization primitive for golang...

Leaving Red Hat Posted on Apr 4, 2018
purpleidea is moving on...

Running `make` from anywhere Posted on Mar 10, 2018
Run commands from your `Makefile`, even if you're nested deeply!

Mgmt Configuration Language Posted on Feb 5, 2018
Introducing the Mgmt Configuration Language

Hello World! Posted on Nov 13, 2017
First test of new blog

Copyleft is Dead. Long live Copyleft! Posted on Oct 17, 2017

Extracting movies from libreoffice Posted on Jul 12, 2017

Declarative vs. Imperative paradigms Posted on May 5, 2017

Osmocom femtocell un-boxing Posted on Apr 30, 2017

Metaparameters in mgmt Posted on Mar 1, 2017

Faster golang builds Posted on Feb 26, 2017

Send/Recv in mgmt Posted on Dec 7, 2016

Remote execution in mgmt Posted on Oct 7, 2016

mgmt has a logo Posted on Sep 30, 2016

Live dmesg following Posted on Aug 29, 2016

Seen in downtown Montreal... Posted on Aug 3, 2016

Automatic clustering in mgmt Posted on Jun 20, 2016

One hour hacks: Remote LUKS over SSH Posted on Apr 25, 2016

Automatic grouping in mgmt Posted on Mar 30, 2016

Automatic edges in mgmt Posted on Mar 14, 2016

Introducing: git tpush Posted on Feb 16, 2016

Debugging golang programs Posted on Feb 15, 2016

Next generation configuration mgmt Posted on Jan 18, 2016

Upcoming speaking Posted on Jan 18, 2016

Trying out Ceph with Oh-My-Vagrant Posted on Dec 28, 2015

Vagrant and Oh-My-Vagrant on RHEL7 Posted on Aug 11, 2015

Making an empty RPM Posted on Aug 11, 2015

A super privileged Puppet container Posted on Jun 12, 2015

Docker containers in Oh-My-Vagrant Posted on Apr 20, 2015

Fancy git aliases and git cherryfetch Posted on Mar 16, 2015

Introducing: Silent counter Posted on Feb 9, 2015

Hacking out an Openshift app Posted on Oct 18, 2014

Introducing: Oh My Vagrant! Posted on Sep 3, 2014

Rough data density calculations Posted on Aug 27, 2014

Restarting GNOME shell via SSH Posted on May 29, 2014

Working at RedHat Posted on Apr 2, 2014

Puppet-Gluster now available as RPM Posted on Mar 27, 2014

Introducing Puppet Exec['again'] Posted on Mar 24, 2014

Speaking at SCALE today! Posted on Feb 21, 2014

Building a snow shelter Posted on Feb 17, 2014

Scathing review of the Lenovo X240 Posted on Feb 2, 2014

Show the exit status in your $PS1 Posted on Jan 29, 2014

Vagrant vsftp and other tricks Posted on Dec 21, 2013

Vagrant on Fedora with libvirt Posted on Dec 9, 2013

Documentation for Puppet-Gluster Posted on Nov 20, 2013

Iteration in Puppet Posted on Nov 17, 2013

first release of puppet-shorewall Posted on Oct 21, 2013

GNOME Montreal Summit Posted on Oct 15, 2013

Finite state machines in puppet Posted on Sep 28, 2013

No Ads! Posted on Sep 26, 2013

Installing missing GNOME games Posted on Sep 26, 2013

Gluster Community Day, Thursday Posted on Sep 20, 2013

Linuxcon day three, Wednesday Posted on Sep 18, 2013

Linuxcon day two, Tuesday Posted on Sep 18, 2013

Linuxcon day one, Monday Posted on Sep 18, 2013

Puppet-Gluster and me at Linuxcon Posted on Sep 2, 2013

Finding YAML errors in puppet Posted on Aug 25, 2013

Playing with FreeIPA and puppet Posted on Jun 18, 2013

puppet lsi hardware raid module Posted on Jun 17, 2013

puppet matlab module Posted on Jun 4, 2013

puppet rsnapshot module Posted on Jun 4, 2013

Forcing firefox to remember passwords Posted on May 17, 2013

Mothers day hacks Posted on May 12, 2013

Fixing jerky scrolling in Firefox Posted on Apr 11, 2013

A quick anaconda trick Posted on Mar 4, 2013

Automatic hiera lookups in puppet 3.x Posted on Feb 20, 2013

hello planet puppet Posted on Nov 23, 2012

setting timed events in puppet Posted on Nov 14, 2012

Multifile mode for text editors Posted on Oct 24, 2012

Our fusion future Posted on Oct 20, 2012

puppet gluster module now in git Posted on Jul 27, 2012

a puppet module for gluster Posted on Jul 24, 2012

my gluster setup, described Posted on Jul 19, 2012

fedora 14 to 17 upgrade Posted on Jun 4, 2012

IPMI for linux professionals Posted on Apr 25, 2012

how to use ssh escape characters Posted on Apr 25, 2012

Dear internets Posted on Feb 22, 2012

sparse rsync magic Posted on Feb 22, 2012

git, gitosis, gitweb and friends... Posted on Aug 19, 2010

gnome-do trick Posted on Mar 31, 2010

lecturing and git-bisect Posted on Mar 31, 2010

getting gedit to work like magic Posted on Mar 9, 2010

n900 features that should be added Posted on Mar 2, 2010

a custom epiphany location bar Posted on Feb 22, 2010

reading obscure documentation Posted on Feb 8, 2010

getopt vs. optparse vs. argparse Posted on Feb 3, 2010

sorting out the confusion Posted on Jan 27, 2010

piping data through ssh Posted on Dec 9, 2009

really well written article Posted on Nov 16, 2009

IPVS + shorewall Posted on Nov 5, 2009

scary man pages Posted on Nov 2, 2009

tech support for a keyboard Posted on Oct 23, 2009

the python subprocess module Posted on Oct 7, 2009

ssh hanging Posted on Jul 29, 2009

cheetah == fortran Posted on Jul 21, 2009

[py]inotify, polling, gtk and gio Posted on Jul 21, 2009

evanescent 0.3 Posted on Jul 14, 2009

logging out of $SESSION Posted on Jul 13, 2009

brilliant: get rid of mono Posted on Jun 8, 2009

coloured tab completion Posted on Jun 2, 2009

Server Fault Posted on May 27, 2009

community Posted on May 27, 2009

first babble Posted on May 22, 2009

Posted on Jan 1, 0001

Links...