<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vassilios Karakoidas — Blog</title>
    <link>https://bkarak.wizhut.tech/blog</link>
    <description>Writing on software, computer science, AI, hobbies and personal observations, from 2005 to today.</description>
    <language>en</language>
    <lastBuildDate>Sat, 31 Oct 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://bkarak.wizhut.tech/blog/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>OSS, a scheduler from 1998, reverse engineered</title>
      <link>https://bkarak.wizhut.tech/blog/2026/31102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/31102026</guid>
      <pubDate>Sat, 31 Oct 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Two months ago I handed The Anger of Pharaoh XXXV, a DOS game from 1997, to Claude Code and watched it come back to life in a browser. Today it was the turn of the next zip on my software page: OSS, the Operating System Simulator.</description>
    </item>
    <item>
      <title>Blast from the past: the Heroku buildpacks I forked</title>
      <link>https://bkarak.wizhut.tech/blog/2026/29102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/29102026</guid>
      <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
      <category>Tools &amp; Systems</category>
      <description>Recently, going through my GitHub account, I found three repositories I had completely forgotten; forks of Heroku's Python, Node.js and Go buildpacks. The Go one (2020) has no commits of mine at all, so I must have forked it just to read it. The other two have 38 commits between them, from November 2013 to February 2015. When I opened them, I remembered about half of what they did. So this post is a small exercise in archaeology. The git log remembers more than I do, and I want to write it down before I forget the other half.</description>
    </item>
    <item>
      <title>The eternal pivots of AI companies</title>
      <link>https://bkarak.wizhut.tech/blog/2026/27102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/27102026</guid>
      <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <description>On 12 October, Andrej Karpathy (an OpenAI co-founder, now at Anthropic) dusted off one of his posts from April and split the world into four groups. Around 6 billion people have barely touched an LLM (large language model). Between 1 and 2 billion use a free chatbot, mostly as a better search engine or a writing aid. About 20 million professionals run agents on real projects. And roughly 5,000 people have access to the internal frontier systems, of which he wrote that &quot;the external world has seen the preview&quot;.</description>
    </item>
    <item>
      <title>Software Development Com-(mit|ed)-ians, the AI edition</title>
      <link>https://bkarak.wizhut.tech/blog/2026/22102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/22102026</guid>
      <pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate>
      <category>Software Engineering</category>
      <description>Back in 2010 I wrote a column called Software Commit-ians, one of my Devil's Advocate pieces (I found another one in a drawer recently), and in 2018 I put it on Medium as Software Development Com-(mit|ed)-ians. It was a field guide to the people you meet in a large development effort; seven of them, each with a tip on how to survive them. I re-read it this week. Most of the cast is still around (people do not change that fast), but the room they work in has changed a lot, and some of the new arrivals would not have made sense in 2010. One of them is not even a person.</description>
    </item>
    <item>
      <title>AI reverse engineering and the end of software (as we know it)</title>
      <link>https://bkarak.wizhut.tech/blog/2026/17102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/17102026</guid>
      <pubDate>Sat, 17 Oct 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <description>On September 30, someone pushed the first commit of PhotoCraft to GitHub. It is a photo editor written from scratch in Rust, it opens and saves PSD (Photoshop Document) files, and it looks very much like Photoshop. Brandon Thomas, who used to run storyteller.ai, built it with Claude Opus 5.5, as part of a project called ArtCraft.</description>
    </item>
    <item>
      <title>The wartime CTO</title>
      <link>https://bkarak.wizhut.tech/blog/2026/16102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/16102026</guid>
      <pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate>
      <category>Engineering Management</category>
      <description>In The Godfather, just before the family moves its business to Las Vegas, Michael Corleone tells Tom Hagen that he is out. Tom is the consigliere, the family lawyer, almost a son to Vito, and a brilliant negotiator. He asks why. Michael answers with one line; &quot;You're not a wartime consigliere.&quot;</description>
    </item>
    <item>
      <title>Nested sets of pairs, twenty-four years later</title>
      <link>https://bkarak.wizhut.tech/blog/2026/10102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/10102026</guid>
      <pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate>
      <category>Math</category>
      <description>There is a directory on my disk called nsp-ncp. It holds nine C programs that were meant to do the same thing, seven more in C++, two Visual Basic projects, a handful of Word documents in Greek and two papers in PostScript. Today I pointed Claude Code at it and asked for three things; pick the best of the C programs and make a repository out of it, give it a page on this site, and write this post. I added, helpfully, that the one in nsp-ultra-fast was probably the fastest.</description>
    </item>
    <item>
      <title>Shortest common superstring: the factor of two, measured</title>
      <link>https://bkarak.wizhut.tech/blog/2026/07102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/07102026</guid>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <category>Math</category>
      <description>A couple of weeks ago I wrote about the mathematicians' reaction to the Navier–Stokes announcement, and then about how OpenAI actually ran it. Since then OpenAI has put the rest of that work in the open; the openai/math repository holds 722 manuscripts in 372 families, produced by an internal model that was posed about 4,000 open problems (each result took about three hours of ChatGPT Pro thinking on average, according to its README). Most of it is far from anything I can judge. But result 128 is not. It is about strings, and strings I can test on my laptop.</description>
    </item>
    <item>
      <title>The Devil's Advocate: The Web (2008), found in a drawer</title>
      <link>https://bkarak.wizhut.tech/blog/2026/05102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/05102026</guid>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <category>Software Engineering</category>
      <description>Recently, while digging through an old Subversion export (yes, I kept those), I found a folder named devil advocate - The Web (2008). Inside it were a Word file, a Pages archive and a PDF, which according to its own metadata was exported on 10 July 2008, from Mac OS X 10.5.4. Next to it sit five more folders of the same series: Software Engineering Maturity, Spammers, The Scientific Retribution and War of the Worlds from 2008, and Software Commit-ians from 2010 (that one survived; it became Software Development Com-(mit|ed)-ians in 2018).</description>
    </item>
    <item>
      <title>Four numbers for a regular expression</title>
      <link>https://bkarak.wizhut.tech/blog/2026/04102026-2</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/04102026-2</guid>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <category>Projects &amp; Releases</category>
      <description>When Diomidis Spinellis and I wrote the FIRE/J paper (it came out in Software: Practice and Experience in 2008), we needed a way to say that one benchmark expression was harder than another. &quot;Longer&quot; is not an answer; [a-z] is five characters and abcde is five characters, and nobody would call them equally hard. So I wrote a small Java program that counted the operators in each expression and computed two of the complexity measures of Ehrenfeucht and Zeiger (Journal of Computer and System Sciences, 1976). The operator counts became the occurrence table in the paper, and the two measures lined the expressions up.</description>
    </item>
    <item>
      <title>SDriver/XPath, seventeen years on: the same overhead</title>
      <link>https://bkarak.wizhut.tech/blog/2026/04102026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/04102026</guid>
      <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
      <category>Projects &amp; Releases</category>
      <description>For years my software page has had an entry called SDriver/XPath sitting in the Deprecated section, tagged &quot;abandonware&quot;, with no page of its own (lately, a link to its paper). That was a fair description. The code was last built in 2009, with Ant, for Java 1.6, against a native MD5 library that shipped binaries for PowerPC Macs (yes, really).</description>
    </item>
    <item>
      <title>Inlining a language model: four languages, three walls, and a memory bus</title>
      <link>https://bkarak.wizhut.tech/blog/2026/30092026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/30092026</guid>
      <pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <description>On Friday, 25 September, a small idea came up; download an open-weight model and write an inference engine with the weights compiled into the program. Not a checkpoint file next to the binary, not a blob glued at the end of it. Every weight an ordinary number in the source code, and a running program that never opens a file.</description>
    </item>
    <item>
      <title>PEP 8 and the standard library: half the violations of 2008, and the one rule it gave up on</title>
      <link>https://bkarak.wizhut.tech/blog/2026/28092026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/28092026</guid>
      <pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate>
      <category>Programming</category>
      <description>Back in November I wrote that the Python standard library ignores PEP 8 a little more with every release, and I had a table to prove it; 4,479 violations in Python 3.0.1, 16,560 in 3.14.0, and a steady climb in between. Last week I went back to that script, because I wanted to turn it into something more serious, and the table fell apart in an afternoon.</description>
    </item>
    <item>
      <title>Porting a typed-decision engine to Apple's foundation models: a thousand tests and the limits</title>
      <link>https://bkarak.wizhut.tech/blog/2026/23092026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/23092026</guid>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <description>A few minutes after midnight on 23 September, I set out to build one thing; the architecture of laya-mlx, built on Apple's foundation models and nothing else. By half past eight in the evening the repository was public on GitHub, with an engine, a thousand tests, a snake game and a README full of measurements (a few of them flattering, most of them not).</description>
    </item>
    <item>
      <title>Ten thousand agents, and who was steering</title>
      <link>https://bkarak.wizhut.tech/blog/2026/21092026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/21092026</guid>
      <pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Yesterday I wrote here what I think about the Navier-Stokes announcement and the call to slow down that followed it. What I did not do is open the lid. I gave an opinion about a machine I had not looked inside, which is exactly the thing I complain about when other people do it.</description>
    </item>
    <item>
      <title>Math, agents, and the call to slow down</title>
      <link>https://bkarak.wizhut.tech/blog/2026/20092026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/20092026</guid>
      <pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate>
      <category>Math</category>
      <description>Last month it was a bit crazy for the mathematical world. Suddenly, OpenAI claimed that it had solved one of the Millennium Problems, the Navier-Stokes equation. Everyone was shocked.</description>
    </item>
    <item>
      <title>The two applets I was never going to rebuild</title>
      <link>https://bkarak.wizhut.tech/blog/2026/16092026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/16092026</guid>
      <pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate>
      <category>Projects &amp; Releases</category>
      <description>In October 1999, in the Artificial Intelligence Laboratory of the University of Piraeus, Theodoros Theodorou and I wrote an 8-puzzle for a course assignment, supervised by Themis Panayotopoulos. It was a Java applet, because in 1999, if a thing had to run inside a browser and do more than blink, it was a Java applet. Around the same time I ported Sokoban to Java on my own, and signed the source the way we signed things back then; Sokoban Ver. 1.00 - Java Port By ReneGade/TiS. (ReneGade/TiS was my handle. It is on the about page now, so it is not much of a secret any more.)</description>
    </item>
    <item>
      <title>FIRE/J, eighteen years later: the JIT took its cut</title>
      <link>https://bkarak.wizhut.tech/blog/2026/07092026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/07092026</guid>
      <pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
      <category>Programming</category>
      <description>In 2007 Diomidis Spinellis and I wrote a paper about a regular expression engine that cheats. Instead of interpreting an automaton, FIRE/J turns every expression into a JVM class of its own: the DFA becomes straight-line bytecode, one block per state, a goto per transition, and the JVM's just-in-time compiler turns that into native code. The paper came out in Software: Practice and Experience the year after, with a benchmark that put the generated code well ahead of everything else on the JVM and of the C libraries too. The measurements were made on a 2.8 GHz Pentium 4 with Java 5.</description>
    </item>
    <item>
      <title>The Anger of Pharaoh XXXV, reverse engineered</title>
      <link>https://bkarak.wizhut.tech/blog/2026/03092026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/03092026</guid>
      <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Yesterday I handed a 74 KB DOS executable from 1997 to Claude Code and asked a simple question: can you make this run in a browser? No source code, no emulator, just the zip. Then I sat back and watched.</description>
    </item>
    <item>
      <title>The static analysis toolbox in 2026</title>
      <link>https://bkarak.wizhut.tech/blog/2026/02092026</link>
      <guid isPermaLink="true">https://bkarak.wizhut.tech/blog/2026/02092026</guid>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <category>Tools &amp; Systems</category>
      <description>I spent a good part of my PhD years on static analysis and software metrics. Back then, running a detector over a large Java system was something you kicked off before going home (and hoped had finished by the morning, because quite often it had run out of heap around 3am). In 2026 the same analysis is a pipeline step that finishes before the coffee is ready.</description>
    </item>
  </channel>
</rss>
