We’ve moved on from the “Israel has a right to defend themselves” phase to the “Israel has a right to develop beach front real estate” phase and still most world leaders are silent about this.

Week in Review

This week I started getting back into some serious work for other clients. My schedule is kind of weird, I’m a consultant working 50-50 for two different companies (~20 hours each), so in a way I have two clients. However; one of the companies is an agency so I contract for them and then I contract for additional clients through them. I have two clients I bill but three or four clients I work for.

I’m happy to get back into agency work, it’s a lot of fun flitting from project to project. This is an overview of my week:

  • Working in a legacy Phoenix code base I spent a few hours doing PR review and then developing a new feature which will change the way a specific type of order gets processed. This project has a fairly lengthy state machine that orders will pass through (think, credit check, sales order, customer notification, shipping), it can get pretty complex depending on the customer’s location, configuration, and the product they ordered.
  • I’ve been working on some infrastructure updates in an old Rails project, we had fantastic junior do the back breaking work of migrating the app from Rails 5 to Rails 8. It’s working locally but there are some issues running it on the actual EC2 instance.
  • Working with TypeScript, GraphQL and Rails to develop a history modal to display PaperTrail versions. Most of the back end work was done by another developer to convert the actual Version record into a nice “log” I’m just trying to query them and display them with some filtering by date. This was part of a larger sprint this week and last which was all-hands on (about 8 developers).
  • Personally, I made a few improvements to my Go tool to fetch my current time for the month from Harvest. Further improvements would only be a waste of time but I’m having a lot of fun playing with Go.

Remember when the tech world solved racism by renaming master to main branch?

The ICC Must Issue An Arrest Warrant for Donald Trump

I wrote this a few weeks back the morning after the United States abducted the leader of the 53rd largest country (by population ~32 million), at the time I was thinking of shopping it around as an opinion piece or letter to the editor but it’s getting a little old. I’d like to put it somewhere before the world has completely moved on to the next unprecedented act.


It was just over a year ago when the International Criminal Court (ICC) issued arrest warrants for two high ranking Israeli officials, notably Prime Minister Benjamin Netanyahu. This warrant, I am to understand is largely symbolic; it is unlikely that the Prime Minister would find himself in any “hostile” countries (read “hostile” as countries willing to uphold international law). Any such warrant against the president of the United States would, likewise, be symbolic but important. If the international community is unwilling to uphold law and order, on even a symbolic level, than what kind of world order remains?

The brazen attack on Venezuela and subsequent disposal of President Nicolás Maduro was likely illegal under all but the most construed US laws and definitely illegal under international law. Those of my generation, and frankly anyone over the age of about thirty, ought to remember the US’s sabre-rattling leading up to the invasion of Iraq. At least George W. Bush had the decorum to lie about the pretenses of such an invasion (although that was also a clear breach of international law and against the best evidence of nearly all independent investigations). Twenty-three years later, Donald Trump needs no such veneers: thus far, he acts with impunity. In 2003, it was clear to those who were looking that the US was about to invade a sovereign nation to plunder it’s oil reserves. In 2026, one need not even read between the lines: “We’re going to have our very large US oil companies... spend billions of dollars start making money for the country and we are ready to stage a second and much larger attack if we need to do so.”

There are arguments to be made against the character and regime of President Maduro; however any such accusations could be leveled at any number of US-friendly regimes without the pretext for invasion or occupation. It was not narcotics trafficking, nor the lack of open and fair elections, or any number of paper-thin excuses for this attack on a non-hostile sovereign nation. Make no mistake, as Trump himself alluded to when he accused Venezuela of “ripping [us] off”; it was simply the Maduro Administration’s refusal to play ball with US interests. 

I’m sure there are no small number of nations that would love to slap the cuffs on Donald Trump; however, none would dare. The US is just too powerful to take orders from any other nation individually or in the collective. As a permanent member of the UN security council, their veto power makes that entire body impotent. Such is the world which the US created over the course of the 20th century and it is the one in which Donald Trump is now a beneficiary. Any warrants issued by the ICC, would carry the same power as that issued for Netanyahu. We can not have any illusions about this. However; any nation that wishes to be remembered on the right side of history must act in accordance with international law and call for the arrest of President Donald J. Trump. 

Finished reading: Small Things Like These by Claire Keegan 📚

It’s the first book I’ve read this year, so calling it “the best book I’ve read all year” would be true, but to lump this in with last year and the say the same may be true as well! Keegan’s voice is incredible, this book was pure poetry, effortlessly capturing both the highs and lows of human emotion. Although, it takes place 40 years ago, the financial worries and dreary outlook generally feel like they could be ripped straight from 2026.
The emotions I felt reading this book were not unlike those I feel reading A Christmas Carol, perhaps it was the Christmas time setting, or the newfound or recovered morality of the lead character but I think the writing itself was really that good.

Harvest Timers and Go!

This week I put together a tiny Go project. Go’s been on my “to learn” list for years now but I’ve never quite gotten around to it. Over the summer I got as far as reading a few articles and skimming the documentation but I didn’t have the time to make anything.

I’m a contractor working, primarily, for two clients. One is an agency that has their own Harvest account for tracking time against client projects. The other client is a traditional product company, I track time and bill them with my own, separate, Harvest account. It’s a bit of an annoyance because having two separate Harvest accounts means I have to sign in twice just to figure out how many hours I’ve worked in the month so far. I created a little CLI (the CLI part is not quite implemented yet) to query both accounts, grab my monthly hours, and total them.

Strapped for time I asked Opencode to generate a basic query to an endpoint and parse the returned JSON, this outline was enough for me to go the rest of the way implementing what I needed.

You can check it out here, but unless your in the exact same situation as me, it’s likely not going to do you much good!

codeberg.org/tfantina/…

I’ve tried to eliminate the weird echo chamber of HackerNews from my life as much as possible. Interesting to see from the most 1000 discussed books only ~50 were written by women. This is exactly the sort of reason I’ve moved on from the orange site.
kottke.org/26/01/004…

Week in Review

I’ve been diving back into some Elixir projects this week; mostly small stuff. I updated Sentry and ensured it was logging at all the endpoints. Story time with this client…

Some six years ago I wired up Sentry to start tracking errors when this code base was fairly shiny and new; at the time I used free account associated with my work email. My thinking at the time was we could pilot Sentry then start a paid plan. I think the nature of this project, and Elixir in general is that it’s just fairly fault tolerant. Also, due to various priorities, budgeting, staffing, yadda, yadda I never took the time to dial Sentry in and filter the noise. Occasionally I’d dip into the account to look for a specific error, about half way through the month I’d get the email saying we’d hit our limit for the month and that was that.

I should note this is not a small client, this application is processing millions a day in revenue! On the one hand they should have been paying for Sentry years ago, but on the other hand I get it. Security is not slacking in this organization, their servers get more junk requests to stuff like /wp-admin then any other client I’ve ever worked with. This is, in no small part I believe, due to their rigorous use of bug bounty and associated white hat programs. (It’s a source of pride that this particular application has never been hacked and generally scores better than most of their tech in pen-tests). It’s interesting how a tool that is so essential to modern web-development like Sentry can be omitted for years and years; I’m confident we could have continued just fine without it but I’m also betting that if we take the time to filter the noise this is going to make the customer happier and make our lives far more simple.

Pretty quiet on here over the holidays, partially due to illness and partially just wanting to be offline as much as possible. I’d still like to get some end of year wrap-ups together.

Watching a bit of the 2009 adaptation of A Christmas Carol, which I haven’t seen before but its bad… like really bad. Wild to think that Pixar’s Up came out the same year.