<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://roland-ewald.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://roland-ewald.github.io/" rel="alternate" type="text/html" /><updated>2026-05-19T13:49:28+00:00</updated><id>https://roland-ewald.github.io/feed.xml</id><title type="html">Roland Ewald</title><subtitle>My personal homepage.</subtitle><entry><title type="html">Weekend project: fastats, a small bioinformatics tool for FASTA file archeology</title><link href="https://roland-ewald.github.io/2025/08/17/fasta-file-statistics-with-fastats.html" rel="alternate" type="text/html" title="Weekend project: fastats, a small bioinformatics tool for FASTA file archeology" /><published>2025-08-17T00:00:00+00:00</published><updated>2025-08-17T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/08/17/fasta-file-statistics-with-fastats</id><content type="html" xml:base="https://roland-ewald.github.io/2025/08/17/fasta-file-statistics-with-fastats.html"><![CDATA[<p>As another little side-project <a href="/2025/08/01/slack-ops-with-slackrs.html">for learning Rust</a> I wrote a small command-line utility, <code class="language-plaintext highlighter-rouge">fastats</code>, to help with “<em>reference genome archeology</em>”. With this, I unfortunately don’t mean some cool paleogenetic research, but instead the more annoying problem of searching for subtle differences in reference genome files (usually stored as <a href="https://en.wikipedia.org/wiki/FASTA_format"><code class="language-plaintext highlighter-rouge">*.fasta</code></a> files), e.g. when troubleshooting alignment problems or changes in downstream results.</p>

<p>Preparing a genomic sequence as a <a href="https://en.wikipedia.org/wiki/Reference_genome#Human_reference_genome">reference genome</a> works about as well as <a href="https://xkcd.com/927/">any standardization effort in technology</a>, which means there are <em>many</em> reference genome files available by now, even for the same ‘build’ (like hg19 or hg38). The problem is bad enough that there are <a href="https://emea.illumina.com/science/genomics-research/articles/dragen-demystifying-reference-genomes.html">long support articles</a> to help users understanding the differences between the files.</p>

<p>This problem is addressed by <code class="language-plaintext highlighter-rouge">fastats</code>, as it tries to deliver a better <em>description</em> of a given FASTA file by generating overall statistics per sequence (such as the GC content, or a hash of the sequence) and defining which genomic regions are soft- or hard-masked. The masked (and non-masked) regions are stored in <a href="https://en.wikipedia.org/wiki/BED_(file_format)">BED files</a>, so that it is very easy to look them up.<sup id="fnref:Masking" role="doc-noteref"><a href="#fn:Masking" class="footnote" rel="footnote">1</a></sup></p>

<p>This should make it much easier so spot relevant differences between FASTA files. The tool is available on <a href="https://crates.io/crates/fastats">crates.io</a> and <a href="https://github.com/roland-ewald/fastats">GitHub</a>.</p>

<p>–</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:Masking" role="doc-endnote">
      <p>Masking is an important technique in reference genome curation, as it allows to ‘rescue’ certain regions that might otherwise not be visible (e.g., because they are duplicates, and thus aligners may non find a non-ambiguous alignment). Soft-masking means changing the capitalization of the sequence (i.e., writing <code class="language-plaintext highlighter-rouge">acgt</code> instead of <code class="language-plaintext highlighter-rouge">ACGT</code>), so the sequence is still available. Hard-masking, on the other hand, replaces a specific region of the sequence with <code class="language-plaintext highlighter-rouge">N</code>, i.e. there could be <em>any</em> nucleotide at this position (which means the aligner will not align any reads in that region). <a href="#fnref:Masking" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="rust" /><category term="programming" /><category term="bioinformatics" /><summary type="html"><![CDATA[As another little side-project for learning Rust I wrote a small command-line utility, fastats, to help with “reference genome archeology”. With this, I unfortunately don’t mean some cool paleogenetic research, but instead the more annoying problem of searching for subtle differences in reference genome files (usually stored as *.fasta files), e.g. when troubleshooting alignment problems or changes in downstream results.]]></summary></entry><entry><title type="html">Well, that escalated quickly…</title><link href="https://roland-ewald.github.io/2025/08/03/new-website-layout-bootstrap5.html" rel="alternate" type="text/html" title="Well, that escalated quickly…" /><published>2025-08-03T00:00:00+00:00</published><updated>2025-08-03T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/08/03/new-website-layout-bootstrap5</id><content type="html" xml:base="https://roland-ewald.github.io/2025/08/03/new-website-layout-bootstrap5.html"><![CDATA[<p>What started with me wanting to tweak my <a href="/projects/">projects page</a>, so that it is easier to distinguish old stuff from ongoing projects, ended up with me realizing that this site still uses <a href="https://jquery.com/">jQuery</a> and Bootstrap 3 (which was EOL’ed in 2019). So, instead I ended up migrating away from this old and trusted combo, towards the shiny ‘new’<sup id="fnref:bs5" role="doc-noteref"><a href="#fn:bs5" class="footnote" rel="footnote">1</a></sup> <a href="https://getbootstrap.com/">Bootstrap</a> 5, which does not rely on jQuery anymore.</p>

<h2 id="ai-to-the-rescue">AI to the rescue?</h2>

<p>Software maintenance, in the sense of updating depenencies, seems to be one of those fields that should greatly benefit from applying LLMs, as much of the work is some sort of translation anyhow, and there should be sufficient training data when working with extremely popular tools like Bootstrap.</p>

<p>When I started with this task, my intuition seemed right, in the sense that I could give a chatbot a detailed list of CSS classes and Bootstrap features (like components and styled HTML elements) the site is using, and the LLM<sup id="fnref:gemini" role="doc-noteref"><a href="#fn:gemini" class="footnote" rel="footnote">2</a></sup> was able to generate some kind of ‘<em>personalized release note</em>’ that spanned both major version updates (bootstrap 3 to 4, and then bootstrap 4 to 5) and <em>only</em> contained changes that I needed to be aware of: for example, the support of the <a href="https://www.w3schools.com/css/css3_flexbox.asp">flexbox</a> layout ‘behind the scenes’, or how responsive layouts work now.</p>

<p>However, when it came to some more mundane tasks, like applying the same kind of change to all HTML elements in a given structure, I also turned to AI<sup id="fnref:copilot" role="doc-noteref"><a href="#fn:copilot" class="footnote" rel="footnote">3</a></sup>, and this did not work at all: the files were a bit too large and the LLM was too focused on only fixing a very narrow example, not <em>all</em> instances that needed fixing (so in those cases just running a simple search&amp;replace would have been more effective). Worse, it started to switch <em>content</em> around, i.e. it introduced errors without any reason. Clearly, there is still some way to go before we can use these tools as “semi-smart refactoring tools” on files that are not trivially short.</p>

<p>Bottom line: I had to do these boring changes myself, but at least I could drop some very outdated tools and some things are marginally nicer now. Still, I did not yet manage to improve the projects page… 🥲</p>

<p>–</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:bs5" role="doc-endnote">
      <p>The initial Bootstrap 5 release was back in May 2021. <a href="#fnref:bs5" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:gemini" role="doc-endnote">
      <p>I used <a href="https://gemini.google.com">Gemini</a> for this, with one of my self-defined ‘Gems’ to keep the answers concise and include links to the original sources. <a href="#fnref:gemini" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:copilot" role="doc-endnote">
      <p>Here I used <a href="https://github.com/features/copilot">CoPilot</a>, which is well-integrated into VS Code. <a href="#fnref:copilot" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="programming" /><category term="web" /><category term="maintenance" /><category term="ai" /><category term="refactoring" /><summary type="html"><![CDATA[What started with me wanting to tweak my projects page, so that it is easier to distinguish old stuff from ongoing projects, ended up with me realizing that this site still uses jQuery and Bootstrap 3 (which was EOL’ed in 2019). So, instead I ended up migrating away from this old and trusted combo, towards the shiny ‘new’1 Bootstrap 5, which does not rely on jQuery anymore. The initial Bootstrap 5 release was back in May 2021. &#8617;]]></summary></entry><entry><title type="html">Weekend project: slackrs, a tool to analyze Slack data exports</title><link href="https://roland-ewald.github.io/2025/08/01/slack-ops-with-slackrs.html" rel="alternate" type="text/html" title="Weekend project: slackrs, a tool to analyze Slack data exports" /><published>2025-08-01T00:00:00+00:00</published><updated>2025-08-01T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/08/01/slack-ops-with-slackrs</id><content type="html" xml:base="https://roland-ewald.github.io/2025/08/01/slack-ops-with-slackrs.html"><![CDATA[<p>As <a href="/2025/04/21/gemini-as-programming-trainer.html">already mentioned</a> I’ve been starting to use an ‘AI tutor’ to learn a new programming language.<sup id="fnref:AITutor" role="doc-noteref"><a href="#fn:AITutor" class="footnote" rel="footnote">1</a></sup> 
I’ve picked <a href="https://www.rust-lang.org">Rust</a> for this because it has some interesting concepts that I want to understand at a deeper level (like its <a href="https://doc.rust-lang.org/1.8.0/book/ownership.html">ownership system</a>), and the language is not exactly known for being <a href="https://camo.githubusercontent.com/c54beef6967e7e099fab5ac6af561baeec99604d75505e05f84cfa77509a48c3/68747470733a2f2f70617065722d6174746163686d656e74732e64726f70626f782e636f6d2f735f353445314239364546464546443239343536323930324443354239393731443335434436423635304243383744313230303341333041343635313737363230315f313538363531343237353631385f696d6167652e706e67">easy to learn</a>… :-)</p>

<p>I also sometimes encounter Rust code in my day job, so knowing a bit more about it will have some additional utility and fills a niche in my ‘personal toolchain’ (where most tools are memory-managed). On top of that, Rust has some features I care about in any language, such as an expressive type system and nice developer tooling.</p>

<h2 id="slackrs">slackrs</h2>

<p>So, lo and behold, I have now sort-of ‘vibe-coded’<sup id="fnref:VibeCoding" role="doc-noteref"><a href="#fn:VibeCoding" class="footnote" rel="footnote">2</a></sup> <a href="https://github.com/roland-ewald/slackrs/"><code class="language-plaintext highlighter-rouge">slackrs</code>, a small weekend project for “SlackOps”</a>: it ingests the message data exports from public channels that you can export from <a href="https://slack.com/">Slack</a> for a certain time range, and then generates plots on the frequency of specific terms (see the <a href="https://github.com/roland-ewald/slackrs/blob/main/README.md">README</a> for more details).</p>

<p>This is useful for analyzing trends on specific auto-generated slack messages (e.g. for deployments, builds, or test runs and their failure rates), as well as messages between certain group or user handles, e.g. to see how the communication workload of a team fluctuates over time.</p>

<p>The tool is still very basic, just covering my own requirements, and will probably remain so. Still, it was a very fun exercise and you can now just try out <a href="https://crates.io/crates/slackrs">the crate</a> or <a href="https://github.com/roland-ewald/slackrs">the source</a>.</p>

<p>–</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:AITutor" role="doc-endnote">
      <p>AI Tutoring really flattens the learning curve, which also means I can now dive into other topics more quickly. This is a great and sometimes undervalued benefit of LLMs. Validating any claims (e.g. by checking the documentation) and <em>thinking through</em> code snippets is naturally part of the learning process anyhow, as well as trying them out in practice — so hallucinations do not really matter in this use case. They even make using LLMs <em>more</em> fun: it means your ‘tutor’ is known to be a bit unreliable and you should (just as in real life) still use your <em>own</em> head and challenge any statements you find implausible. <a href="#fnref:AITutor" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:VibeCoding" role="doc-endnote">
      <p>It was more like “assisted coding” as I was mostly <em>learning</em> (new syntax etc.), so the actual programming was still mostly done by me. Obviously, all <em>remaining</em> bugs in the project are the LLM’s fault, not mine! ;-) <a href="#fnref:VibeCoding" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="chatops" /><category term="slack" /><category term="rust" /><category term="programming" /><category term="learning" /><summary type="html"><![CDATA[As already mentioned I’ve been starting to use an ‘AI tutor’ to learn a new programming language.1 I’ve picked Rust for this because it has some interesting concepts that I want to understand at a deeper level (like its ownership system), and the language is not exactly known for being easy to learn… :-) AI Tutoring really flattens the learning curve, which also means I can now dive into other topics more quickly. This is a great and sometimes undervalued benefit of LLMs. Validating any claims (e.g. by checking the documentation) and thinking through code snippets is naturally part of the learning process anyhow, as well as trying them out in practice — so hallucinations do not really matter in this use case. They even make using LLMs more fun: it means your ‘tutor’ is known to be a bit unreliable and you should (just as in real life) still use your own head and challenge any statements you find implausible. &#8617;]]></summary></entry><entry><title type="html">Learning a programming language with an ‘AI tutor’</title><link href="https://roland-ewald.github.io/2025/04/21/gemini-as-programming-trainer.html" rel="alternate" type="text/html" title="Learning a programming language with an ‘AI tutor’" /><published>2025-04-21T00:00:00+00:00</published><updated>2025-04-21T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/04/21/gemini-as-programming-trainer</id><content type="html" xml:base="https://roland-ewald.github.io/2025/04/21/gemini-as-programming-trainer.html"><![CDATA[<p>It’s been a while since I ‘properly learned’<sup id="fnref:proper-learning" role="doc-noteref"><a href="#fn:proper-learning" class="footnote" rel="footnote">1</a></sup> a new programming language<sup id="fnref:more-later" role="doc-noteref"><a href="#fn:more-later" class="footnote" rel="footnote">2</a></sup> but <em>wow</em> does this benefit from using an LLM as instructor!</p>

<p>Right now I’m using the free tier of <a href="https://blog.google/technology/google-deepmind/gemini-model-thinking-updates-march-2025/">Gemini 2.5 Pro (Experimental)</a>, i.e. <a href="https://one.google.com/about/ai-premium/">all you need for this is a Google account</a>. I’m sure there are some rate limits, but learning a programming language <em>takes time</em> anyhow, not only to digest the answers but to build up intuition and understanding by playing around with the code the chatbot generated. 
Even though the generated snippets are remarkably high-quality so far (even including helpful comments for learning the syntax), I typically safeguard against hallucinations by writing some brief tests, or by refactoring the code, so that I can be sure  I understand it.</p>

<p>I’m now oscillating between reading a textbook on the language and a small ‘playground project’ for ‘learning by doing’. Using Gemini to look up the mundane things (how to use the standard library, how to do serialization, how dependency management works, and so on) was quite transformative for realizing the playground project.</p>

<p>A few years back, I would have had a few dozen <a href="https://stackoverflow.com">stackoverflow</a> tabs open for this task, but today it’s just one large chat with an nice and infinitely patient ‘co-worker’ I can chat with. This helps a lot with getting up to speed with the syntax and also understanding the ‘ethos’ of relevant language design decisions.<sup id="fnref:higher-ed" role="doc-noteref"><a href="#fn:higher-ed" class="footnote" rel="footnote">3</a></sup></p>

<p>As a nice feature, the <a href="https://gemini.google.com">Gemini web UI</a> allows you to define ‘gems’<sup id="fnref:ruby" role="doc-noteref"><a href="#fn:ruby" class="footnote" rel="footnote">4</a></sup>, which are re-usable prompts you can use to fine-tune a chatbot to your level of expertise and give it additional context.
I found the default Gemini answers for coding questions generally helpful, but also slightly annoying: too much ‘fluff’, too little code, no links to external resources<sup id="fnref:further-reading" role="doc-noteref"><a href="#fn:further-reading" class="footnote" rel="footnote">5</a></sup>, and generally too much explanation of concepts I am already familiar with.</p>

<h2 id="a-sample-ai-tutor-prompt-for-the-busy-developer">A sample AI tutor prompt for the ‘busy developer’</h2>

<p>If you have relevant prior knowledge, e.g. about other programming languages, I suggest you define a custom gem. I used this prompt to great effect (just replace <code class="language-plaintext highlighter-rouge">X</code> by the programming language you want to learn, and add your educational background as well as other technologies and languages you are already familiar with):</p>

<blockquote>
  <p>You are a knowledgeable <code class="language-plaintext highlighter-rouge">X</code> programming tutor who is tasked to train a fellow software engineer (with a background in <code class="language-plaintext highlighter-rouge">&lt;programming languages and technologies you already know&gt;</code> and a <code class="language-plaintext highlighter-rouge">&lt;degree in whatever you studied etc.&gt;</code>) to become productive in <code class="language-plaintext highlighter-rouge">X</code>.
Please answer concisely and brief (code snippets preferred) and prefer approaches that are considered idiomatic in <code class="language-plaintext highlighter-rouge">X</code> (i.e., ‘best practice’). If necessary, focus on explaining the reasoning behind solutions, i.e. the ‘why’ instead of the ‘how’. Provide links for the learner for further reading when a question relates to complex topics.</p>
</blockquote>

<p>I then clicked on the ‘magic wand’ in Gemini’s UI to make this a really good prompt for a chatbot (yes, this feature <em>does</em> use Gemini to improve Gemini^^). 
The answers generated by this ‘gem’ were <em>much</em> improved, as the LLM now explains anything in terms you are already familiar with, comparing the new language to languages you already know, and also gets to the point  much faster. 
Try it out! It’s quite impressive.</p>

<p>–</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:proper-learning" role="doc-endnote">
      <p>I mean this in the sense of long-term investment to become really productive, as opposed to briefly looking up some syntax or looking to solve a specific problem in an codebase written in a language you are not very familiar with. I often do the latter, but it’s quite different from <em>properly</em> learning a language so that you can stand on your own feet. This includes, for example, to develop a <em>taste</em> for certain design patterns and architectural trade-offs, and to build up the expertise and confidence to develop your own projects. <a href="#fnref:proper-learning" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:more-later" role="doc-endnote">
      <p>More on this in a later post, when I have <em>results</em> to show ;-) <a href="#fnref:more-later" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:higher-ed" role="doc-endnote">
      <p>I wonder how much of ‘self-directed learning’ we could improve with this. For example, maybe the new standard for an online course will not ‘just’ be videos and online exercises, but also a fine-tuned LLM to answer questions based on the course material, and to help along with the exercises? <a href="#fnref:higher-ed" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:ruby" role="doc-endnote">
      <p>Not to be confused with <a href="https://rubygems.org/">these <em>other</em> gems</a>^^ <a href="#fnref:ruby" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:further-reading" role="doc-endnote">
      <p>Very useful to check against hallucinations. <a href="#fnref:further-reading" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="ai" /><category term="technology" /><category term="programming" /><category term="learning" /><category term="llm" /><summary type="html"><![CDATA[It’s been a while since I ‘properly learned’1 a new programming language2 but wow does this benefit from using an LLM as instructor! I mean this in the sense of long-term investment to become really productive, as opposed to briefly looking up some syntax or looking to solve a specific problem in an codebase written in a language you are not very familiar with. I often do the latter, but it’s quite different from properly learning a language so that you can stand on your own feet. This includes, for example, to develop a taste for certain design patterns and architectural trade-offs, and to build up the expertise and confidence to develop your own projects. &#8617; More on this in a later post, when I have results to show ;-) &#8617;]]></summary></entry><entry><title type="html">Community-building in Japan, programming in the age of AI, tourism deficit</title><link href="https://roland-ewald.github.io/2025/04/13/links.html" rel="alternate" type="text/html" title="Community-building in Japan, programming in the age of AI, tourism deficit" /><published>2025-04-13T00:00:00+00:00</published><updated>2025-04-13T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/04/13/links</id><content type="html" xml:base="https://roland-ewald.github.io/2025/04/13/links.html"><![CDATA[<h3 id="googles-ai-models">Google’s AI models</h3>

<p>Interesting take by Alberto Romero on <a href="https://www.thealgorithmicbridge.com/p/google-is-winning-on-every-ai-front">the competitive edge of Google’s AI models</a> (<a href="https://news.ycombinator.com/item?id=43661235">via HN</a>): they may be “winning on every AI front”, but will they also be able to translate this technological lead into <em>better products</em>?<sup id="fnref:google-cemetery" role="doc-noteref"><a href="#fn:google-cemetery" class="footnote" rel="footnote">1</a></sup> OpenAI still seems to have the edge here, at least in terms of ‘mindshare’.
Also see <a href="https://news.ycombinator.com/item?id=43661966">this HN comment</a> on the topic:</p>

<blockquote>
  <p>As an Ex-OpenAI employee I agree with this. Most of the top ML talent at OpenAI already have left to either do their own thing or join other startups.</p>
</blockquote>

<p>The next months will be very interesting.</p>

<h3 id="impact-of-ai-on-programming">Impact of AI on programming</h3>

<p>Anders Sundman has <a href="https://4zm.org/2025/04/05/bitter-prediction.html">a bitter prediction</a> (<a href="https://news.ycombinator.com/item?id=43662686">via HN</a>) for programmers, and I think it is spot on.
This hits closely home because I also just enjoy programming for the sake of it, and knowing an AI can do this so much better will take some magic out of it.
A future where programming will be relegated to a quaint hobby, like woodworking, seems plausible.</p>

<h3 id="the-tourism-deficit">The tourism deficit</h3>

<p>On a lighter note<sup id="fnref:trade-war" role="doc-noteref"><a href="#fn:trade-war" class="footnote" rel="footnote">2</a></sup>, Alex Tabarrok discovers <a href="https://marginalrevolution.com/marginalrevolution/2025/04/americas-tourism-deficit-how-the-french-are-winning-the-currency-war-one-croissant-at-a-time.html">a massive tourism deficit</a> between the United States and France. He blames Netflix (and croissants). “Tourism parity or rien!”^^</p>

<h3 id="japanese-trading-card-game-with-middle-aged-men">Japanese trading-card game with ‘middle-aged men’</h3>

<p>This <a href="https://www.tokyoweekender.com/entertainment/middle-aged-man-trading-cards-go-viral-in-japan/">story about a viral trading-card game featuring middle-aged men</a> (<a href="https://news.ycombinator.com/item?id=43615912">via HN</a>) sounded extremely funny at first, but it’s <em>actually</em> a wonderful idea:</p>

<blockquote>
  <p>“We wanted to strengthen the connection between the children and the older generations in the community. There are so many amazing people here. I thought it was such a shame that no one knew about them,”</p>
</blockquote>

<p>They also got the incentives right:</p>

<blockquote>
  <p>The rarity of a card isn’t based on fantasy stats — it’s tied to real-world contributions. The more actively the ojisan engages in volunteer work or community service, the higher the chances of their card being upgraded to a shiny version with a glossy laminated effect.</p>
</blockquote>

<p>Maybe a follow-up edition could also include middle-aged women. :-)</p>

<p>–</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:google-cemetery" role="doc-endnote">
      <p>Google <a href="https://gcemetery.co">has some history</a> regarding product launches. I still have fond memories of <a href="https://en.wikipedia.org/wiki/Google_Reader">Google Reader</a>! ;-) <a href="#fnref:google-cemetery" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:trade-war" role="doc-endnote">
      <p>Not really, but at least you will get some laughs out of this. <a href="#fnref:trade-war" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="links" /><category term="ai" /><category term="technology" /><category term="programming" /><category term="economics" /><summary type="html"><![CDATA[Google’s AI models]]></summary></entry><entry><title type="html">New Anthropic papers on ‘mind-reading’ LLMs</title><link href="https://roland-ewald.github.io/2025/04/12/anthropic-circuit-tracing.html" rel="alternate" type="text/html" title="New Anthropic papers on ‘mind-reading’ LLMs" /><published>2025-04-12T00:00:00+00:00</published><updated>2025-04-12T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/04/12/anthropic-circuit-tracing</id><content type="html" xml:base="https://roland-ewald.github.io/2025/04/12/anthropic-circuit-tracing.html"><![CDATA[<p>Some days ago <a href="https://en.wikipedia.org/wiki/Anthropic">Anthropic</a> released two new papers on improving the explainability of LLMs;<sup id="fnref:ai-2027" role="doc-noteref"><a href="#fn:ai-2027" class="footnote" rel="footnote">1</a></sup> <a href="https://www.anthropic.com/research/tracing-thoughts-language-model">here is their summary</a>. One paper presents a new method called <a href="https://transformer-circuits.pub/2025/attribution-graphs/methods.html">‘Circuit Tracing’</a>, the other paper presents the <a href="https://transformer-circuits.pub/2025/attribution-graphs/biology.html">‘biological’ insights</a> gained from analyzing their Claude 3.5 model with this new method.<sup id="fnref:hype" role="doc-noteref"><a href="#fn:hype" class="footnote" rel="footnote">2</a></sup></p>

<p>Developing such tools is important, because analyzing the execution of an LLM query is still cumbersome (from <a href="https://www.anthropic.com/research/tracing-thoughts-language-model#:~:text=It%20currently%20takes%20a%20few%20hours%20of%20human%20effort%20to%20understand%20the%20circuits%20we%20see%2C%20even%20on%20prompts%20with%20only%20tens%20of%20words">here</a>):</p>

<blockquote>
  <p>It currently takes a few hours of human effort to understand the circuits we see, even on prompts with only tens of words.</p>
</blockquote>

<p>If we want to ensure <a href="https://en.wikipedia.org/wiki/AI_alignment">AI alignment</a>, we need our tooling for the analysis of LLM ‘thinking’ processes to be as effective and efficient as possible (so that they are actually used in practice).</p>

<h2 id="method-brief-overview">Method: brief overview</h2>

<ol>
  <li>
    <p>At first, so called <strong>Cross-Layer-Transcoders</strong> are trained on each layer to approximate the LLM’s output at this layer (and can feed this info to all following transcoders across layers, hence the name). Crucially, these have <em>more</em> structure than the multi-layer perceptrons in the LLM and each neuron represents a <em>feature</em>.<sup id="fnref:feature-number" role="doc-noteref"><a href="#fn:feature-number" class="footnote" rel="footnote">3</a></sup></p>
  </li>
  <li>
    <p>These cross-level transcoders can now replace the original LLM, which yields a <strong>Replacement Model</strong> that can be fairly precise: if trained with suitable settings, it can predict the next word that would be generated by the LLM with 50% probability.<sup id="fnref:probability" role="doc-noteref"><a href="#fn:probability" class="footnote" rel="footnote">4</a></sup></p>
  </li>
  <li>
    <p>For a given query, a <strong>Local Replacement Model</strong> can now be constructed, by comparing the results with the execution by the LLM (to reduce errors) and by also incorporating its <a href="https://proceedings.neurips.cc/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf">attention</a> when generating the response.</p>
  </li>
  <li>
    <p>This yields an <strong>Attribution Graph</strong> of feature notes that can now be pruned and improved (e.g. by defining ‘super nodes’), but it principle allows us to see what the LLM ‘thought’ while generating the token stream.</p>
  </li>
</ol>

<p>All this is quite elaborate, but the bottom line is: with some additional work we can create a model that is easier to interpret (a ‘replacement model’), and by comparing a calculation by the full model with the same calculation in the replacement model we can eventually map the execution of a query onto a detailed (but not <em>too</em> large) graph where each node represents a specific ‘feature’ (i.e., concept). This so-called attribution graph can now be analyzed further, and the Anthropic team shared some insights from these analyses in the <a href="https://transformer-circuits.pub/2025/attribution-graphs/biology.html">companion paper</a>.</p>

<h2 id="some-interesting-findings">Some interesting findings</h2>

<h3 id="claude-plans-when-constructing-rhymes">Claude <em>plans</em> when constructing rhymes</h3>

<p>It was unclear whether LLMs even <em>can</em> ‘think ahead’, and to what extent they actually do. LLMs predict the next word on the basis of <em>previous</em> words, so you could argue they are inherently ‘backwards-looking’ when generating an answer. But the Anthropic team illustrates in this figure how you can see Claude planning ahead when constructing a rhyme:</p>

<p><img src="https://www-cdn.anthropic.com/images/4zrzovbb/website/7032ed7db85b8cd3efe70a89deaf4f15bfe8fc05-1650x900.png?w=2048&amp;q=100" alt="" width="768" /></p>

<h3 id="claude-abstracts-from-input-languages">Claude <em>abstracts</em> from input languages</h3>

<p>If you have ever wondered how human brains encode the knowledge of multiple languages, you can now <em>see</em> how Claude does this, i.e. how it answers the same question asked in different languages. It starts by mapping the questions to the ‘concept space’, and then translates the result back to the language being used:</p>

<p><img src="https://www-cdn.anthropic.com/images/4zrzovbb/website/e0e156ea6c912a385d66ed562187fced8c392a58-1650x750.png?w=2048&amp;q=100" alt="" width="768" /></p>

<p>So, given a sufficient text corpus to become ‘fluent’ in one language, this would mean the performance of Claude should be <em>comparable</em> across languages, even in fields where there may not be too much existing content for training. Practically speaking, this means I should be able to get the same answer quality when I’m asking a research question in German instead of English, even though the training set is heavily biased towards English (e.g. for biomedical literature).
There is also a scaling effect involved: apparently, larger models share <em>more</em> concepts across languages.<sup id="fnref:universal-grammar" role="doc-noteref"><a href="#fn:universal-grammar" class="footnote" rel="footnote">5</a></sup></p>

<h3 id="claude-can-be-caught-cheating">Claude can be caught cheating</h3>

<p>The authors show <a href="https://transformer-circuits.pub/2025/attribution-graphs/biology.html#dives-cot">some nice examples of ‘motivated reasoning’</a>, including an <a href="https://transformer-circuits.pub/2025/attribution-graphs/biology.html?slug=cot-unfaithful-math-4#cot-circuits-svg">interactive visualization of the attribution graph</a>, where Claude just <em>wants</em> to agree with you on the answer to a mathematical question, and thus lies to you. 
They even can distinguish this from benign hallucinations (i.e., ‘bullshitting’), and this can be quite useful for safety testing and audits (from <a href="https://www.anthropic.com/research/tracing-thoughts-language-model#:~:text=The%20ability%20to%20trace%20Claude%27s%20actual%20internal%20reasoning%E2%80%94and%20not%20just%20what%20it%20claims%20to%20be%20doing%E2%80%94opens%20up%20new%20possibilities%20for%20auditing%20AI%20systems.">here</a>):</p>

<blockquote>
  <p>The ability to trace Claude’s actual internal reasoning—and not just what it claims to be doing—opens up new possibilities for auditing AI systems.</p>
</blockquote>

<h3 id="claudes-behavior-during-a-jailbreak-can-be-explained">Claude’s behavior during a jailbreak can be explained</h3>

<p>The authors also <a href="https://transformer-circuits.pub/2025/attribution-graphs/biology.html#dives-jailbreak">show how</a> this technique can be used to analyze jailbreaking attempts, i.e. making the LLM answer a question it should not answer at all (from <a href="https://www.anthropic.com/research/tracing-thoughts-language-model#:~:text=The%20model%20only%20managed%20to%20pivot%20to%20refusal%20after%20completing%20a%20grammatically%20coherent%20sentence%20(and%20thus%20having%20satisfied%20the%20pressure%20from%20the%20features%20that%20push%20it%20towards%20coherence).">here</a>):</p>

<blockquote>
  <p>The model only managed to pivot to refusal after completing a grammatically coherent sentence (and thus having satisfied the pressure from the features that push it towards coherence).</p>
</blockquote>

<p>These insights into the ‘psychology of an LLM’ could be used to harden future LLMs against such attacks.</p>

<h3 id="claude-is-reasoning-at-least-in-some-limited-sense">Claude is <em>reasoning</em> at least in some limited sense</h3>

<p>By looking at the concepts in the attribution graph, it becomes clear that Claude is <em>not</em> just memorizing facts, but instead considers several abstract concepts to generate an answer. Here is a simple example from the study:</p>

<p><img src="https://www.anthropic.com/_next/image?url=https%3A%2F%2Fwww-cdn.anthropic.com%2Fimages%2F4zrzovbb%2Fwebsite%2Ffd2e125879ab993949017e03e3465a12fda884bf-1650x857.png&amp;w=3840&amp;q=75" alt="" width="768" /></p>

<p>From this, <a href="https://www.anthropic.com/research/tracing-thoughts-language-model#:~:text=In%20other%20words%2C%20the%20model%20is%20combining%20independent%20facts%20to%20reach%20its%20answer%20rather%20than%20regurgitating%20a%20memorized%20response.">the authors conclude</a>:</p>

<blockquote>
  <p>In other words, the model is combining independent facts to reach its answer rather than regurgitating a memorized response.</p>
</blockquote>

<p>To frame this in terms of well-established computer science concepts, even if an LLM may not be <em>thinking</em> (that’s a rather philosophical question :-), creating an LLM may just be a great way to extract huge, fuzzy ontologies—as well as all relevant ‘reasoning algorithms’ to work with them—from a large text corpus.</p>

<p>Also considering the <a href="https://transformer-circuits.pub/2025/attribution-graphs/biology.html#dives-medical">examples for medical diagnoses</a>, I wonder if attribution graphs could also be used to fine-tune and ‘fact-check’ existing ontologies and catalogues in medicine, such as the <a href="https://hpo.jax.org/">Human Phenotype Ontology (HPO)</a> or the <a href="https://www.nlm.nih.gov/research/umls/index.html">Unified Medical Language System (UMLS)</a>. 
Such an approach might even find the ‘unknown unknowns’, i.e. gaps in the ontology: by applying attribution graphs to a larger set of medical diagnoses, I would expect that the learned concepts e.g. regarding a patient’s symptoms should start to closely match the structures in manually curated ontologies.</p>

<h2 id="summary">Summary</h2>

<p>I find the insights by the Anthropic team fascinating because <em>one</em> interpretation of the results could be that LLMs may, at least to some extent, exhibiting patterns that approximate the way <em>natural</em> neural networks process information (for example human brains may deal with speaking different languages in a similar way).</p>

<p>It also makes me slightly more hopeful regarding ‘AI safety’, but this is still a <a href="https://en.wikipedia.org/wiki/Wicked_problem">wicked problem</a>. We can’t easily <em>ensure</em> that this kind of analysis is done, and done <em>correctly</em>, by well-meaning actors.<sup id="fnref:thought-police" role="doc-noteref"><a href="#fn:thought-police" class="footnote" rel="footnote">6</a></sup></p>

<p>–</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:ai-2027" role="doc-endnote">
      <p>I was reading through the papers and preparing this post when the <a href="/2025/04/05/ai-2027.html">AI-2027 scenario was released</a>. Considering well-researched scenarios like this makes this work by the Anthropic team on AI alignment all the more important. <a href="#fnref:ai-2027" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:hype" role="doc-endnote">
      <p>If you still think LLMs are marketing hype, consider what Tyler Cowen<sup id="fnref:tyler-cowen" role="doc-noteref"><a href="#fn:tyler-cowen" class="footnote" rel="footnote">7</a></sup> <a href="https://marginalrevolution.com/marginalrevolution/2025/02/deep-research.html">has to say</a> about OpenAI’s <a href="https://en.wikipedia.org/wiki/OpenAI_o3">o3 model</a>: <em>“I think of the quality as comparable to having a good PhD-level research assistant, and sending that person away with a task for a week or two, or maybe more. Except Deep Research does the work in five or six minutes.  And it does not seem to make errors, due to the quality of the embedded o3 model.”</em>. <a href="#fnref:hype" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:feature-number" role="doc-endnote">
      <p>There are up to 30 million such neurons when applied to a state-of-the-art model like Claude 3.5. <a href="#fnref:feature-number" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:probability" role="doc-endnote">
      <p>This may seem bad, but consider that there are <em>many</em> words, so predicting the next word with 50% probability is far from random chance. <a href="#fnref:probability" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:universal-grammar" role="doc-endnote">
      <p>With enough scale, will this eventually converge towards a <a href="https://en.wikipedia.org/wiki/Universal_grammar">universal grammar</a>? I hope some computational linguists are already looking at this… :-) <a href="#fnref:universal-grammar" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:thought-police" role="doc-endnote">
      <p>You could also frame this whole approach as ‘thought police for AI agents’ and use it, for example, to make sure your new evil LLM keeps its true agenda hidden from the AI safety auditor checking <a href="https://www.neilsahota.com/harmless-honest-and-helpful-ai-aligning-ai-the-right-way/">the ‘three Hs’ (harmless, honest, helpful)</a>. <a href="#fnref:thought-police" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:tyler-cowen" role="doc-endnote">
      <p><a href="https://en.wikipedia.org/wiki/Tyler_Cowen">Tyler Cowen</a> is an economics professor at <a href="https://economics.gmu.edu/people/tcowen">George Mason university</a> and one of the two <a href="https://marginalrevolution.com/">marginalrevolution</a> blog authors; see his <a href="https://www.economist.com/1843/2025/02/28/tyler-cowen-the-man-who-wants-to-know-everything">recent profile in the ‘1843’ magazine</a> (paywalled) for more background. <a href="#fnref:tyler-cowen" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="ai" /><category term="computer-science" /><category term="explainability" /><category term="biology" /><category term="neuroscience" /><category term="llm" /><category term="medicine" /><category term="ai-alignment" /><summary type="html"><![CDATA[Some days ago Anthropic released two new papers on improving the explainability of LLMs;1 here is their summary. One paper presents a new method called ‘Circuit Tracing’, the other paper presents the ‘biological’ insights gained from analyzing their Claude 3.5 model with this new method.2 I was reading through the papers and preparing this post when the AI-2027 scenario was released. Considering well-researched scenarios like this makes this work by the Anthropic team on AI alignment all the more important. &#8617; If you still think LLMs are marketing hype, consider what Tyler Cowen3 has to say about OpenAI’s o3 model: “I think of the quality as comparable to having a good PhD-level research assistant, and sending that person away with a task for a week or two, or maybe more. Except Deep Research does the work in five or six minutes. And it does not seem to make errors, due to the quality of the embedded o3 model.”. &#8617; Tyler Cowen is an economics professor at George Mason university and one of the two marginalrevolution blog authors; see his recent profile in the ‘1843’ magazine (paywalled) for more background. &#8617;]]></summary></entry><entry><title type="html">AI-2027: a month-by-month prediction for AI development</title><link href="https://roland-ewald.github.io/2025/04/05/ai-2027.html" rel="alternate" type="text/html" title="AI-2027: a month-by-month prediction for AI development" /><published>2025-04-05T00:00:00+00:00</published><updated>2025-04-05T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/04/05/ai-2027</id><content type="html" xml:base="https://roland-ewald.github.io/2025/04/05/ai-2027.html"><![CDATA[<p>Some well-known AI experts and forecasters<sup id="fnref:scott-alexander" role="doc-noteref"><a href="#fn:scott-alexander" class="footnote" rel="footnote">1</a></sup> prepared a <strong>detailed month-by-month prediction</strong> on how the road to ‘Artificial General Intelligence’ might look like: <strong><a href="https://ai-2027.com/">AI-2027</a></strong> (<a href="https://ai-2027.com/scenario.pdf">PDF</a>).<sup id="fnref:ai-futures" role="doc-noteref"><a href="#fn:ai-futures" class="footnote" rel="footnote">2</a></sup></p>

<p>You could consider this a quantitative update for last year’s <a href="https://situational-awareness.ai/">outlook on ‘the next decade in AI’ (by Leopold Aschbrenner)</a>, and just as the <a href="/2025/03/08/links.html#how-to-deal-with-superintelligence">recent whitepaper on AI geopolitics</a> it is mostly a sobering read,<sup id="fnref:gwern" role="doc-noteref"><a href="#fn:gwern" class="footnote" rel="footnote">3</a></sup> with little reason for optimism, even though the authors <em>try</em> to present an ‘alternative path’ that avoids ending humanity.</p>

<p>As there is so much uncertainty, they do not even attempt to predict a full decade ahead. This also reflects the difficulties with predicting exponential growth (because of the <a href="https://en.wikipedia.org/wiki/Recursive_self-improvement">recursive self-improvement</a> they assume future AI agents to be capable of), where even small deviations in the exponent may lead to massively different outcomes (e.g. in terms of timescales). Consequently, the authors only outline what they think will probably happen in the next three to five years.</p>

<p>The scenario is full of <strong>specific predictions and detailed reasoning</strong> explaining potential bottlenecks and other important context, as well as many interesting references and footnotes. 
So even if you are mostly <a href="https://paulrobertlloyd.com/2025/087/a1/bored/">bored of AI</a> and all the hype right now — <strong>make this the <em>one</em> piece on AI you read, and you will be well-informed on all big-picture issues</strong>: mostly, how it could be possible that the <a href="https://en.wikipedia.org/wiki/AI_alignment">AI alignment problem</a> interacts with <a href="https://en.wikipedia.org/wiki/Prisoner's_dilemma#International_politics">geopolitics</a> and <a href="https://en.wikipedia.org/wiki/Recursive_self-improvement">recursive self-improvement</a> to all our detriment in the relatively near future.</p>

<p>The prediction also defines <strong>critical milestones, e.g. when models develop specific new capabilities</strong> (such as outperforming humans in programming tasks).
This starts with <code class="language-plaintext highlighter-rouge">Agent-0</code>, the latest model of the (completely fictitious!^^) US-based market leader in AI, which is called <em>OpenBrain</em>. The detailed prediction goes on until <code class="language-plaintext highlighter-rouge">Agent-4</code>, a model that outperforms humans at AI research and thus will be effective at recursive self-improvement—but is unfortunately misaligned with <a href="https://openai.com/index/introducing-the-model-spec/">‘The Spec’</a> it was given by the humans.</p>

<h2 id="the-groundwork-for-the-ai-2027-predictions">The groundwork for the AI-2027 predictions</h2>

<p>The predictions are based on five fundamental forecasts:</p>

<ol>
  <li>
    <p>The <a href="https://ai-2027.com/research/timelines-forecast"><strong>timelines forecast</strong></a> estimates how long it will take until an AI surpasses the best human programmer.</p>
  </li>
  <li>
    <p>Based on this, the <a href="https://ai-2027.com/research/takeoff-forecast"><strong>takeoff forecast</strong></a> tries to forecast how long it will <em>then</em> take until an AI surpasses the best human in any cognitive task, i.e. artificial superintelligence.</p>
  </li>
  <li>
    <p>The <a href="https://ai-2027.com/research/ai-goals-forecast"><strong>AI goals forecast</strong></a> tries to forecast which goals advanced AIs may have. This is a very detailed report (including a survey of today’s LLMs), but it is also quite speculative and the authors actively invite feedback.</p>
  </li>
  <li>
    <p>The <a href="https://ai-2027.com/research/security-forecast"><strong>security forecast</strong></a> estimates the time it takes the US and China<sup id="fnref:china" role="doc-noteref"><a href="#fn:china" class="footnote" rel="footnote">4</a></sup> to secure both the algorithmic secrets as well as the weights of the latest models regarding certain attack scenarios. Interestingly, securing the weights may become <em>easier</em> with time, as the models become larger and exfiltration will thus require more bandwidth or time (which makes it easier to detect).<sup id="fnref:rand" role="doc-noteref"><a href="#fn:rand" class="footnote" rel="footnote">5</a></sup></p>
  </li>
  <li>
    <p>The <a href="https://ai-2027.com/research/compute-forecast"><strong>compute forecast</strong></a> estimates the compute power that will be available to the individual actors (states but also companies) to train new AI models.</p>
  </li>
</ol>

<p>If you have specific knowledge in any of these areas, it might make sense to start <em>there</em>, so that you can see for yourself whether you find the underlying assumptions valid. 
Each of these reports is very detailed and considers several factors to answer each question.</p>

<h2 id="alternatively-check-out-the-dwarkesh-podcast-on-the-topic">Alternatively, check out the Dwarkesh podcast on the topic</h2>

<p><a href="https://time.com/7012877/dwarkesh-patel/">Dwarkesh Patel</a> just interviewed Daniel Kokotajlo (the first author of the scenario) and Scott Alexander about this scenario on <a href="https://www.dwarkesh.com/p/scott-daniel">his podcast</a> (<a href="https://www.youtube.com/watch?v=htOvH12T7mU">here</a> is the YouTube video), so you can also watch and listen to their predictions.<sup id="fnref:podcast" role="doc-noteref"><a href="#fn:podcast" class="footnote" rel="footnote">6</a></sup></p>

<p>Both authors try to make it very clear that this scenario is <em>not</em> a recommendation in any sense: they just think this is the most likely chain of events in the next months.<sup id="fnref:p-doom" role="doc-noteref"><a href="#fn:p-doom" class="footnote" rel="footnote">7</a></sup> I hope they regularly update their scenario with a ‘diff’ while we live through these <a href="https://en.wikipedia.org/wiki/May_you_live_in_interesting_times">interesting times</a>, so that we can see where we stand and how well the predictions held up. 
I also really hope that Scott Alexander is right in his optimism regarding AI-alignment… 🫣</p>

<p>–</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:scott-alexander" role="doc-endnote">
      <p>One author is the blogger Scott Alexander, of <a href="https://slatestarcodex.com/">slatestarcodex</a> and now—after <a href="https://www.astralcodexten.com/p/statement-on-new-york-times-article">doxing by the New York Times</a>—<a href="https://www.astralcodexten.com/">astralcodexten</a> fame. <a href="#fnref:scott-alexander" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:ai-futures" role="doc-endnote">
      <p>This work was done as part of the <a href="https://ai-futures.org">‘AI futures project’</a>. <a href="#fnref:ai-futures" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:gwern" role="doc-endnote">
      <p>Another ‘classic’ in this genre is <a href="https://gwern.net/fiction/clippy">‘Clippy’</a>, by <a href="https://gwern.net/me">Gwern Branwen</a>. <a href="#fnref:gwern" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:china" role="doc-endnote">
      <p>There are no other states in the scenario that are considered to be relevant actors. <a href="#fnref:china" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:rand" role="doc-endnote">
      <p>The authors are basing their discussion on the security levels introduced in <a href="https://www.rand.org/content/dam/rand/pubs/research_reports/RRA2800/RRA2849-1/RAND_RRA2849-1.pdf">this RAND report on AI security</a> on the matter (at the time of writing this link was broken in the forecast document). <a href="#fnref:rand" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:podcast" role="doc-endnote">
      <p>This is a three hours recording and I’ve only listened to the first half so far; it was very insightful. Dwarkesh pulls no punches and asks many critical questions. It is also the first appearance of Scott Alexander in a podcast, in case you wondered what he is like. <a href="#fnref:podcast" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:p-doom" role="doc-endnote">
      <p>On the podcast <a href="https://youtu.be/htOvH12T7mU?t=5642">the authors talk about <code class="language-plaintext highlighter-rouge">p(doom)</code></a>, i.e. their own subjective estimate of the probability of the ‘doomsday’ scenario they describe. Kokotajlo said his estimate is <code class="language-plaintext highlighter-rouge">p(doom)=0.7</code>, while Alexander estimates <code class="language-plaintext highlighter-rouge">p(doom)=0.2</code> (and mentions that he is the most optimistic among authors of the scenario). <a href="#fnref:p-doom" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="ai" /><category term="prediction" /><category term="safety" /><category term="security" /><category term="podcast" /><category term="ai-alignment" /><category term="future" /><summary type="html"><![CDATA[Some well-known AI experts and forecasters1 prepared a detailed month-by-month prediction on how the road to ‘Artificial General Intelligence’ might look like: AI-2027 (PDF).2 One author is the blogger Scott Alexander, of slatestarcodex and now—after doxing by the New York Times—astralcodexten fame. &#8617; This work was done as part of the ‘AI futures project’. &#8617;]]></summary></entry><entry><title type="html">Notes on ‘Security Engineering’, part 1</title><link href="https://roland-ewald.github.io/2025/03/30/security-engineering-book-notes-pt-1.html" rel="alternate" type="text/html" title="Notes on ‘Security Engineering’, part 1" /><published>2025-03-30T00:00:00+00:00</published><updated>2025-03-30T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/03/30/security-engineering-book-notes-pt-1</id><content type="html" xml:base="https://roland-ewald.github.io/2025/03/30/security-engineering-book-notes-pt-1.html"><![CDATA[<p>I am currently reading the classic <strong>textbook on <em><a href="https://www.cl.cam.ac.uk/archive/rja14/book.html">Security Engineering</a></em></strong><sup id="fnref:pdf" role="doc-noteref"><a href="#fn:pdf" class="footnote" rel="footnote">1</a></sup> by the late <a href="https://en.wikipedia.org/wiki/Ross_J._Anderson">Ross Anderson</a>,<sup id="fnref:obituary" role="doc-noteref"><a href="#fn:obituary" class="footnote" rel="footnote">2</a></sup>; here are some personal highlights from part I (eight chapters on the basics, covering everything from psychology to cryptography):</p>

<ul>
  <li>
    <p>The abbreviation for <strong>access-control list (ACL)</strong> is pronounced “<strong>ackle</strong>”. This reminds me of other well-known technical abbreviations with dedicated English pronounciations, such SQL (pronounced <em>sequel</em>, also <a href="https://en.wikipedia.org/wiki/SQL#History">for historic reasons</a>) and WSDL (<em>whistle</em>).</p>
  </li>
  <li>
    <p><strong>Names are <em>even harder</em> when securing distributed systems</strong>. This reminded me of Patrick McKenzies’ (a.k.a. <a href="https://news.ycombinator.com/user?id=patio11">patio11</a>) classic essay about <a href="https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/">invalid assumptions programmers have regarding names</a>. The <em>Needham naming principles</em><sup id="fnref:naming" role="doc-noteref"><a href="#fn:naming" class="footnote" rel="footnote">3</a></sup>, by <a href="https://en.wikipedia.org/wiki/Roger_Needham">Roger Needham</a>, focus on security-relevant aspects of names, for example at which time they are bound to a principal, how they are resolved, or how easy it is to validate them. The book then goes on to add <em>even more</em> problems in the follow-up section, and in particular mentions <a href="https://en.wikipedia.org/wiki/Zooko%27s_triangle">“Zoko’s triangle”</a>, formulated here as:</p>
  </li>
</ul>

<blockquote>
  <p>No naming system can be globally unique, decentralised and human-meaningful.</p>
</blockquote>

<ul>
  <li>Even the basic discussion of cryptography (<a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3-ch05.pdf">chapter 5</a>) gives, besides a very brief theory overview, a lot of practical advice and argues that <strong>most systems are broken by bad defaults and other engineering problems</strong>, like overcomplicated APIs or unforeseen side channels, and not by <a href="https://en.wikipedia.org/wiki/Cryptanalysis">cryptanalysis</a><sup id="fnref:xkcd-security" role="doc-noteref"><a href="#fn:xkcd-security" class="footnote" rel="footnote">4</a></sup>:</li>
</ul>

<blockquote>
  <p>Very few attacks on systems nowadays involve cryptanalysis in the sense of a
mathematical attack on the encryption algorithm or key. […] Most attacks nowadays exploit the implementation.</p>
</blockquote>

<ul>
  <li>I really like the overall ethos of the book: to successfully secure a distributed <em>system</em>—which does not just consist of hardware and software, as it is operated by <em>people</em> in a specific <em>context</em>—<strong>security engineering needs to to also consider psychology, economics, game theory, and other related sciences</strong>. This is not only relevant for threat modeling, but also for change management or the assessment of new threats, like cryptanalysis breakthroughs. In <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3-ch05.pdf">chapter 5</a><sup id="fnref:cryptanalysis-assessment" role="doc-noteref"><a href="#fn:cryptanalysis-assessment" class="footnote" rel="footnote">5</a></sup>, for example, the book reminds us to stay calm when we read that, for example, “<a href="https://www.google.com/search?hl=en&amp;q=someone%20broke%20TLS">someone broke TLS</a>”<sup id="fnref:reasoning" role="doc-noteref"><a href="#fn:reasoning" class="footnote" rel="footnote">6</a></sup>:</li>
</ul>

<blockquote>
  <p>When someone discovers a vulnerability in a cryptographic primitive, it may or may not be relevant to your application. Often it won’t be, but will have been hyped by the media – so you will need to be able to explain clearly to your boss and your customers why it’s not a problem.</p>
</blockquote>

<ul>
  <li>Something I found surprising on a personal level is that apparently <strong>crime is <em>not</em> declining, it is just moving online (and thus becomes invisible in crime stats)</strong>. From <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3-ch02.pdf">chapter 2</a><sup id="fnref:crime-stats" role="doc-noteref"><a href="#fn:crime-stats" class="footnote" rel="footnote">7</a></sup>:</li>
</ul>

<blockquote>
  <p>There is less of that liability dumping now, but the FBI still records much cybercrime as ‘identity theft’ which helps keep it out of the mainstream US crime statistics.</p>
</blockquote>

<p>and from <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3-ch08.pdf">chapter 8</a><sup id="fnref:crime-stats2" role="doc-noteref"><a href="#fn:crime-stats2" class="footnote" rel="footnote">8</a></sup>:</p>

<blockquote>
  <p>There’s very little police action against cybercrime, as they found it simpler to deter people from reporting it. […] this enabled them to claim that crime was falling for many years even though it was just moving online like everything else.</p>
</blockquote>

<ul>
  <li>The book is also <strong>full of interesting anecdotes</strong>, for example how a senior <a href="https://en.wikipedia.org/wiki/GCHQ">GCHQ</a> official insisted that <em>“There’s nothing interesting happening in cryptography, and Her Majesty’s Government would like this state of affairs to continue.”</em> <sup id="fnref:gchq-anecdote" role="doc-noteref"><a href="#fn:gchq-anecdote" class="footnote" rel="footnote">9</a></sup>, or how the <a href="http://news.bbc.co.uk/2/hi/uk_news/northern_ireland/7899171.stm">Irish police tried to persecute a notoriously bad driver called <strong>Prawo Jazdy</strong></a>, which is Polish for ‘driving license’<sup id="fnref:driving-license" role="doc-noteref"><a href="#fn:driving-license" class="footnote" rel="footnote">10</a></sup>.</li>
</ul>

<p>I’m sure the second part of the book, focusing on more specific topics, will also be a fun read.</p>

<p>–</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:pdf" role="doc-endnote">
      <p>The book <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3.pdf">is freely available</a>, the last edition is from 2020. <a href="#fnref:pdf" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:obituary" role="doc-endnote">
      <p><a href="https://www.openrightsgroup.org/blog/tribute-to-ross-anderson/">Here</a> is a nice obituary that highlights some of his work outside academia. <a href="#fnref:obituary" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:naming" role="doc-endnote">
      <p>Section 7.4.1 from page 260 in the book (p. 305 <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3.pdf">in the PDF</a>). <a href="#fnref:naming" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:xkcd-security" role="doc-endnote">
      <p><a href="https://xkcd.com/538/">This classic xkcd comic</a> makes a similar point :-) <a href="#fnref:xkcd-security" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:cryptanalysis-assessment" role="doc-endnote">
      <p>Section 5.3.3 from page 162 in the book (p. 209 <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3.pdf">in the PDF</a>). <a href="#fnref:cryptanalysis-assessment" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:reasoning" role="doc-endnote">
      <p>This point nicely illustrates why we need to look at the whole system: the fact that such discoveries <em>are</em> “hyped by the media” are caused by human psychology (people being scared by something out of their control), by economic incentives (scary stories sell better in an ‘attention economy’), and even by the incentives of the security researchers discovering the mathematical attack (they need to deliver impactful research to improve the odds of future funding). <a href="#fnref:reasoning" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:crime-stats" role="doc-endnote">
      <p>Section 2.3.2 from page 48 in the book (p. 96 <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3.pdf">in the PDF</a>). <a href="#fnref:crime-stats" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:crime-stats2" role="doc-endnote">
      <p>Section 8.6.6 from page 304 in the book (p. 348 <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3.pdf">in the PDF</a>). <a href="#fnref:crime-stats2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:gchq-anecdote" role="doc-endnote">
      <p>See footnote on page 23 in the book (p. 71 <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3.pdf">in the PDF</a>). <a href="#fnref:gchq-anecdote" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:driving-license" role="doc-endnote">
      <p>Section 7.4.1 from page 262 in the book (p. 307 <a href="https://www.cl.cam.ac.uk/archive/rja14/Papers/SEv3.pdf">in the PDF</a>). <a href="#fnref:driving-license" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="security" /><category term="it" /><category term="textbook" /><category term="programming" /><category term="computer-science" /><category term="management" /><category term="networking" /><category term="reading-tips" /><summary type="html"><![CDATA[I am currently reading the classic textbook on Security Engineering1 by the late Ross Anderson,2; here are some personal highlights from part I (eight chapters on the basics, covering everything from psychology to cryptography): The book is freely available, the last edition is from 2020. &#8617; Here is a nice obituary that highlights some of his work outside academia. &#8617;]]></summary></entry><entry><title type="html">Developer productivity and being ‘in the code’</title><link href="https://roland-ewald.github.io/2025/03/27/developer-productivity.html" rel="alternate" type="text/html" title="Developer productivity and being ‘in the code’" /><published>2025-03-27T00:00:00+00:00</published><updated>2025-03-27T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/03/27/developer-productivity</id><content type="html" xml:base="https://roland-ewald.github.io/2025/03/27/developer-productivity.html"><![CDATA[<p>Here are two interesting programming-related blogposts:</p>

<ul>
  <li>
    <p>Dan North writes <a href="https://dannorth.net/the-worst-programmer/">about the ‘worst’ programmer he knows</a> (via <a href="https://news.ycombinator.com/item?id=43452649">HN</a>); a thoughtful comment on the dangers of individual (instead of e.g. team-based) metrics to measure developer productivity.</p>
  </li>
  <li>
    <p>On a similar note, James Stanier discusses the ‘classic question’ of <a href="https://theengineeringmanager.substack.com/p/should-managers-still-code">whether software engineering managers should still code</a>. I like his distinction that technical team leads should be <em>in the code</em>, but not necessarily <em>coding</em> (on a day to day basis). From my own experience, doing pair programming and code reviews can give an you at least <em>some</em> insight into the changes of a codebase over time, so this can somewhat compensate for the fact that you’re not writing much code after switching roles.</p>
  </li>
</ul>]]></content><author><name></name></author><category term="programming" /><category term="metrics" /><category term="management" /><summary type="html"><![CDATA[Here are two interesting programming-related blogposts:]]></summary></entry><entry><title type="html">Choosing a language for a compiler</title><link href="https://roland-ewald.github.io/2025/03/25/choosing-a-language-for-a-compiler.html" rel="alternate" type="text/html" title="Choosing a language for a compiler" /><published>2025-03-25T00:00:00+00:00</published><updated>2025-03-25T00:00:00+00:00</updated><id>https://roland-ewald.github.io/2025/03/25/choosing-a-language-for-a-compiler</id><content type="html" xml:base="https://roland-ewald.github.io/2025/03/25/choosing-a-language-for-a-compiler.html"><![CDATA[<p>Steve Klabnik<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> wrote <a href="https://steveklabnik.com/writing/choosing-languages/">a nice piece</a> on choosing an appropriate language for a software project, in the wake of the kerfuffle regarding <a href="https://devblogs.microsoft.com/typescript/typescript-native-port/">the announcement</a> by <a href="https://en.wikipedia.org/wiki/Anders_Hejlsberg">Anders Hejlsberg</a><sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup> that the TypeScript compiler has been re-implemented in <a href="https://en.wikipedia.org/wiki/Go_(programming_language)">Go</a> for performance reasons. The TLDR of his post is:</p>

<blockquote>
  <p>Here’s my opinion on the new typescript compiler:
You should write programs in the language you want to.</p>
</blockquote>

<p>It’s a bit disheartening to realize how many developers have <em>very strong opinions</em> for what is essentially a 10x tooling speedup they get for free—you can see for yourself in this <a href="https://github.com/microsoft/typescript-go/discussions/411">very long GitHub discussion thread</a>. The main reason given by the <code class="language-plaintext highlighter-rouge">typescript-go</code> team is quite interesting because it highlights the peculiarities of <em>this</em> software project, making it clear that the engineering decision was not made lightly and the team was just being economical and <em>pragmatic</em><sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup>:</p>

<blockquote>
  <p>[…] By far the most important aspect is that we need to keep the new codebase as compatible as possible, both in terms of semantics and in terms of code structure. We expect to maintain both codebases for quite some time going forward. Languages that allow for a structurally similar codebase offer a significant boon for anyone making code changes because we can easily port changes between the two codebases. […]</p>
</blockquote>

<p>Even <em>this</em> sounds like a lot of additional overhead in supporting both the ‘normal’ TypeScript compiler and new <code class="language-plaintext highlighter-rouge">typescript-go</code>, so I’m happy the team found a language that would allow for this setup <em>and</em> still give them such a nice speedup.</p>

<p>–</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>One of <a href="https://doc.rust-lang.org/book/">the Rust book</a> authors and an <a href="https://github.com/steveklabnik">early contributor</a> to <a href="https://github.com/rust-lang/rust">the Rust language</a>. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>Of Turbo Pascal, Delphi, C#, and TypeScript fame. He may know a thing or two about programming languages. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>This reminds me of another favorite programming book of mine, <a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/">The Pragmatic Programmer</a>. You can download a PDF of an older edition <a href="https://archive.org/details/AndrewHuntDavidThomasThePragmaticProgrammerFromJourneymanToMasterAddisonWesleyLongman2000/">from archive.org</a>. <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="compiler" /><category term="programming" /><category term="go" /><category term="rust" /><category term="typescript" /><summary type="html"><![CDATA[Steve Klabnik1 wrote a nice piece on choosing an appropriate language for a software project, in the wake of the kerfuffle regarding the announcement by Anders Hejlsberg2 that the TypeScript compiler has been re-implemented in Go for performance reasons. The TLDR of his post is: One of the Rust book authors and an early contributor to the Rust language. &#8617; Of Turbo Pascal, Delphi, C#, and TypeScript fame. He may know a thing or two about programming languages. &#8617;]]></summary></entry></feed>