I’ve previously spent some time implementing wordle , and since then enjoyed watching others discuss how to solve the game using programming, especially the solutions based on information theory. 
 Naturally, I was interested in trying them out, given my own implementation of the game. Let me show you how I used SQL to solve Wordle, using maths from information theory. 
 Wordle?…
I like to explore data, as can be seen in previous posts.
I also love to learn new tools on the way.
In this case, a friend’s request for help turned into a challenge around fuzzy matching of text strings.
So I took the opportunity to go and learn a new tool, and to present it here. 
 Let me tell you about DuckDB, which acts like sqlite on steroids, perfect for data analysis…
I’ve written a lot about Termux in the past , and since then, have continued to refine workflows around Android terminals, trying to push it to extremes. With extra software, or accessories, how light can you go without a real computer, while retaining a good development environment? 
 In this post, I want to show how far a tiny bit of hardware and software together have pushed my…
Today I want to celebrate niche tooling that makes life more comfortable on the computer.
For context, I like to work with computers from the keyboard, minimizing use of the mouse.
But this is often difficult to do consistently, especially when everything is a web app, a world known to be mouse-focused.
Let me tell you about the fantastic Firefox extensions Vimium, and Edit With Emacs,…
I’ve been thinking a lot about risk registers recently. I feel like people don’t
know enough about them, or reject them on principle for being “more process”. 
 I’ve worked in projects where the process was heavy, and like many, I very much
didn’t like it then. But since moving to more “agile” environments, I’ve
repeatedly been…
I’ve written in the past about using Makefiles for build automation and documentation .
But sometimes I wish to provide help to users, that doesn’t require
being a Makefiles expert to read! 
 Let’s explore how we can teach users our build system by turning
the project’s Makefile (and awk ) into a cheap documentation-as-code tool. 
 What it looks like…
The packaging workflow of Python has historically been a bit messy, starting
with pip being just good enough, and virtualenvs being a great idea but a
bit unwieldy. Installation was difficult, and tools like anaconda filled the
gaps. 
 Lately, there’s been renaissance of package tooling in Python thanks to other
languages innovating in the area, inspiring and pollinating…
In the software world, tickets (as implemented in Jira, etc) often have a bad
reputation, and I think it’s undeserved, once we reframe what, or who tickets
are for . 
 In this article I want to revisit the purpose of tickets, usually “tickets for
project management”, explore an alternative viewpoint of “tickets as engineering
records”, and…
In programming, there are patterns everywhere: patterns of building code,
patterns for organising components, even patterns for how to test things. A
whole industry is looking for
patterns to solve all their problems. 
 But amongst them all, there’s one pattern I whole-heartedly love, it’s the Early Exit. In this
short and sweet post, I want to declare my undying…
Since my earliest university days, I’ve spent a lot of time trying to get better
at computers, immersing myself in the world of Linux, and generally
improving my software development skills. 
 One of the aspects that was the most helpful to help me grow was attempting to
replicate my normal dev workflow, but with less: Learn to operate on Linux not
Windows, then learn to…
Every now and then, at work, I find myself discussing git worfklows, commit
messages, branching, releasing, versioning, changelogs etc. Since my opinion has
remained fairly consistent for the past few years, I found myself repeating the
same points a lot, so I wrote it down. This page is the resulting compilation of
my opinions on the software development lifecycle (SDLC), without…
The most boring part of setting up a new code project is typing the boilerplate:
it’s easy to forget bits, so we just copy the last project’s folder and “file the serial numbers off” on the project name. 
 Copy-pasta-driven project setup is not great though, as it’s too easy to forget
replacing values in obscure files, or misunderstand why project is set…
Last Friday, I performed a presentation to my colleagues about Makefiles, and I
want to share it to the public. 
 Of note, this presentation is setting aside what people usually know of
Makefiles (autoconf-generated blobs, opaque to any inspection because
machine-created), and instead I introduce the concept of file transformation as
a graph, then teach Makefiles basics (using…
I’ve recently written a series of articles about Gherkin: its usage for
requirements gathering , about its uses in BDD , and a lower-tech alternative to Cucumber , which I’m still experimenting with. 
 I wanted to showcase all of these ideas brought together, as well as show how
comfy modern Python tooling can be. But more than writing code, I would need to
explain my…
Let’s explore how a file-format design exercise turned into
reinventing the wheel, and let’s all appreciate how lucky we are that
the protocols that the internet are built on have fantastic public
documents called RFC s. 
 Designing a file format 
 I was idly thinking about designing a good binary file format for a side project
of mine called qrxfil . The…
In the previous post, I showed how Gherkin Scenarios provide a great framework
for acceptance test definition. I also showed how the dreams of the BDD movement
extend to automating Gherkin, using a tool called Cucumber, enforcing
traceability of acceptance tests. 
 In this article, I want to explain my disilusionment towards Cucumber, and show
how a low-tech alternative emerged…
In the previous post in this series on Gherkin , I showed the tools that Gherkin
Features provide for requirements tracking, and mentioned ambitious goals for
the Behaviour-driven Development (BDD) movement. In this article, I want to
expand on these BDD ideals, show Gherkin Scenarios, and explain how the dream of
traceability led to Cucumber, a tool for automating acceptance test…
The most common mistake I see developers make is building the wrong thing : Not
tracking exactly what is required from the start, and instead getting excited
about the cool technical problems ahead. Fast forward a few days, weeks, months,
showcasing the product near completion, suddenly the rift between what’s needed
and what was built becomes obvious, in a frenzy of last…
Here’s how attempting to export images off a Word Document
led to a quest for data deduplication and classification using the
shell. 
 The images I wanted to export were MS Word diagrams drawn in Word,
rather than PNG files 1 .
Because those doodle-shapes do not export to PNG well, I first
copy-pasted them into Powerpoint to get the familiar “save as…
Like many developers, I keep track of my configuration files in
version control, to make moving to new machines is simpler and share
code with others. This process started out for my Emacs config files
at first, but grew to consume other aspects: bash functions, git
aliases… Since 2016, I have accumulated over 500 git commits . 
 Now the dotfiles are tracked, the next…
I was trying to convert bank-issued CSV files that have a weird data
layout, for automatic processing by the excellent ledger . This made me
learn a new thing about awk . Follow me down the UNIXy goodness! 
 The data I was getting looks like this: 
 Transaction Date,Transaction Description,Debit Amount,Credit Amount,Balance
 29/02/2018,Restaurant,14.5,,1234.2
…
In order to troubleshoot a bug in the very early history of a project
using git, I needed a way to show the git diff from “nothing” to the
first commit. Since git keeps a linked graph of commits, what I wanted
was a diff from the commit before the first one. Searching the onlines
dug up this answer on StackOverflow , showing that there’s a specific
commit hash…
I’m writing code to back up my user data off a website that lets me
 see all of my info (including querying by time, account etc) but
doesn’t have export features (officially). I am certain there’s an API
behind the site that I just have to make sense of. 
 Since the webapp is requesting data from the API when I click, we
should be able to record the web…
When writing long sentences in documentation repositories, git tends to show
really unhelpful diffs. They are unreadable because long lines aren’t broken,
which hides edits happening towards end of line. A colleague of mine asked me if git
couldn’t be configured to make this sort of thing more obvious. Challenge accepted! 
 
			 Figure 1: Can you spot…
Get a cool graph of commits from the command line! For newbies and experts
alike, git is a bit hard to visualize. Here’s a handy git command to make
understanding git easier. 
 git log --decorate --oneline --graph
 
			 Figure 1: Git graph of this repository 
		 
 

 This can be made into a git command via an entry your ~/.gitconfig :…
Last night, I presented about Termux to EdLug, the Edinburgh Linux User group
(see the event page on meetup.com ) in a talk titled “The freedom of shelling
out on Android”. It was tons of fun showing off how your Android phone/tablet
getting a terminal unlocks a powerful tool! 
 
 
I've made the slides available on this website, click on the slide…
Who am I? 
 I’m Jean-Baptiste Doyon, but everyone calls me Jb (sounds like “G-Bay” in
French). Across many misinterpretations, it evolved into the online handle Jiby
(my French friends make it sound like the English initialism for Great
Britain ), giving the domain name of this website. 
 While I’m natively French, originally from a town near Nice, I…
Welcome to my website! 
 This blog is meant to record some of the thoughts I keep coming back to, or
discussions I’ve had over and over again with different people. My
rule of thumb for inclusion here is “if you’ve had to say it more than
twice, it’s time to write it down”. 
 See the About page for my background and motivations. 
 Look forward…