↓ Skip to main content

A fresh leaf

·4 mins

It has been a very long time since I pos­ted a new art­icle. The reas­ons for this are quite com­mon­place. Start­ing a fam­ily and build­ing a ca­reer cap­tured both my in­terest and en­ergy, leav­ing little of either for shar­ing.

Ob­vi­ously, I never stopped read­ing or learn­ing; how­ever, the vehicle for shar­ing changed to one with less fric­tion: Twit­ter. Edu­cat­ing my team­mates and col­leagues sat­is­fied my need to teach and share for a long time. It felt like this was the place where I could con­trib­ute. I found so many great art­icles and ideas that I simply wanted to amp­lify them, feel­ing un­able to add to their elo­quence. Ul­ti­mately, when fam­ily and ca­reer de­mands grew fur­ther, I stopped shar­ing com­pletely. (Twit­ter go­ing down the drain also didn’t help.)

Fast-forward a few years, and I found my­self con­fron­ted with burnout. I was and still am lucky enough to re­cover at my own pace, take the time to get back on my feet, and re­flect on the road that brought me here.

The burnout, while not nice to ex­per­i­ence, also has been a great boon. It al­lowed me to re­in­vent my­self, re-establish my sense of self, and plot a new course. Es­sen­tially, it meant go­ing back to the roots of do­ing what I en­joy: learn­ing, cre­at­ing, and shar­ing.

All this time, ideas have been float­ing around my head con­tinu­ously, ran­ging from aca­demic re­search top­ics and work tasks to house­hold im­prove­ments and side pro­jects.

For a long time, I was quite scep­tical about us­ing LLMs for pro­gram­ming. My ex­per­i­ence stemmed from early re­search agents around 2018–2020. I shared a com­mon sense of AI fa­tigue in the news. Some en­thu­si­astic col­leagues tried to con­vince me how great agen­tic pro­gram­ming with these “new fron­tier” mod­els was and never really suc­ceeded since I had such an un­der­whelm­ing ex­per­i­ence with LLMs in the past.

Then, three things con­verged to change my mind: genu­ine skin in the game, zero skills to in­vest­ig­ate on my own, and free ac­cess to a fron­tier model.

I saw Gamers Nexus: “216,000,000 Spy TVs | The LG Smart TV Prob­lem” on Hacker News about LG TVs al­legedly con­tain­ing spy­ware. I own an LG TV, an earlier model than the art­icle, and wanted to know whether my device was af­fected as well. I had no ex­per­i­ence with this type of dig­ging into sys­tems so I didn’t know where to start. Now I had skin in the game and really wanted to fig­ure this out. Co­in­cid­ent­ally, I got a link from someone to an OpenAI page and real­ised I cre­ated an ac­count there once be­cause my pass­word man­ager sug­ges­ted a lo­gin. Curi­ous, I logged in and saw that I had a month of free us­age! So why not use it for the in­vest­ig­a­tion?

Long story short, I star­ted by us­ing ChatGPT to ex­plain to me how I should ap­proach this in­vest­ig­a­tion. The ap­proach soun­ded reas­on­able. It quickly es­cal­ated to us­ing Co­dex with many agents. Along the way I made many mis­takes blow­ing through five-hour us­age lim­its, etc. But the agents were find­ing res­ults. Not the ones from the art­icle, but close. (Maybe more on that later.) This was amaz­ing: here was a tool that could do what I could not, and all I needed to do was nudge it for­ward, left, or right. I was hooked.

In a month, I went from an AI/LLM-sceptic to a guarded op­tim­ist. Do­ing sev­eral pro­jects, I dis­covered how to con­trol agents, the ef­fects of har­nesses, their strengths (and weak­nesses…), and the tend­en­cies of the dif­fer­ent model fam­il­ies. I went from us­ing ACP in Zed to just us­ing Co­dex and An­ti­grav­ity on the CLI, only rarely in­spect­ing the code manu­ally. Steer­ing the code and code qual­ity hap­pens with test-coverage, mutation-coverage, and lint­ing rules.

This is a jour­ney I feel I want to share. For that I needed to redo the site. I didn’t want to re­learn mod­ern Hugo or fig­ure out all the best themes out there and how to con­fig­ure them; I just wanted res­ults.

There was an­other im­petus. I have a long-standing pet peeve with how my blog looked be­fore, and how sites in gen­eral look. Spe­cific­ally for longer reads. I love the visual of text type­set in LaTeX (spe­cific­ally the Knuth–Plass line-breaking al­gorithm), and now Typst, but I can­not stand how most text looks in browsers, es­pe­cially with text-align: justify.

The solu­tion was simple. Clone my old site re­pos­it­ory, point Co­dex at it, ex­plain what I wanted to do, and it got crack­ing. It asked me a few ques­tions on what I liked, what design I wanted, and came back with a few themes. I ad­ded my text lay­out cri­teria and we went for­ward im­ple­ment­ing it. (It was also straight­for­ward to let it port the al­gorithm to Go, as I pre­vi­ously had it port the code to Swift for my KnowledgeBase Viewer.)

The res­ult is what you are read­ing now. I look for­ward to shar­ing more.