<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Michiels Blog</title><link href="https://tildeweb.nl/~michiel/" rel="alternate"/><link href="https://tildeweb.nl/~michiel/atom.xml" rel="self"/><id>https://tildeweb.nl/~michiel/</id><updated>2026-02-12T08:00:00+01:00</updated><subtitle>Blog</subtitle><entry><title>65 lines of Markdown - a Claude Code sensation</title><link href="https://tildeweb.nl/~michiel/65-lines-of-markdown-a-claude-code-sensation.html" rel="alternate"/><published>2026-02-12T08:00:00+01:00</published><updated>2026-02-12T08:00:00+01:00</updated><author><name>Michiel W. Beijen</name></author><id>tag:tildeweb.nl,2026-02-12:/~michiel/65-lines-of-markdown-a-claude-code-sensation.html</id><summary type="html">AI hype trains</summary><content type="html">&lt;p&gt;Yesterday my employer organized an AI workshop. My company works a lot with AI
supported code editing; using Cursor and VS Code, GitHub Copilot. Plus we do
custom stuff using AWS Bedrock, agents using Strands and so on, all the stuff
everyone is working with nowadays.&lt;/p&gt;
&lt;p&gt;Our facilitator explained how custom rules files can be so very helpful for AI
tooling. He linked to this extension with
&lt;a href="https://github.com/forrestchang/andrej-karpathy-skills"&gt;Karpathy-Inspired Claude Code Guidelines&lt;/a&gt;
as an example. Apparently this plugin is very popular! Yesterday morning the
project had 3.5K stars and at the end of the day this already increased to
3.9K. That&amp;rsquo;s a lot of stars.&lt;/p&gt;
&lt;p&gt;I went on to investigate what this extension actually does and found that it&amp;rsquo;s
just
&lt;a href="https://github.com/forrestchang/andrej-karpathy-skills/blob/main/CLAUDE.md"&gt;one Markdown file of 65 lines long&lt;/a&gt;
that lays out four principles; the first one is &lt;em&gt;&amp;ldquo;Think Before Coding&amp;rdquo;&lt;/em&gt;, added
with some packaging to make it install in Claude Code.&lt;/p&gt;
&lt;h2&gt;Publishing it as a Cursor extension&lt;/h2&gt;
&lt;p&gt;But I don&amp;rsquo;t use Claude Code, so I fired up Codex CLI and turned it into an
&lt;a href="https://marketplace.visualstudio.com/items?itemName=MichielWBeijen.andrej-karpathy-skills-cursor-vscode"&gt;extension for VS Code&lt;/a&gt;
and for
&lt;a href="https://open-vsx.org/extension/MichielWBeijen/andrej-karpathy-skills-cursor-vscode"&gt;Cursor&lt;/a&gt;,
which is a fork of VS Code but uses a plugin registry from the Eclipse
Foundation.&lt;/p&gt;
&lt;p&gt;&lt;img alt="vscode extension" src="images/karpathy-extension-vscode.png"&gt;&lt;/p&gt;
&lt;p&gt;Getting the plugins published was the most work. On the &amp;lsquo;VS Code Marketplace&amp;rsquo; I
am not a &lt;em&gt;Verified Publisher&lt;/em&gt; meaning I do not get a green check mark next to
my name, and you will get a warning if you want to install my extension. And
apparently the only way to get rid of that is to wait for six months with at
least one extension published and then apply for verification. So starting
August I can apply for that and any new extensions get automatically trusted.&lt;/p&gt;
&lt;p&gt;For Cursor the process felt very cumbersome: I had to create an account on
&lt;a href="https://open-vsx.org"&gt;open-vsx.org&lt;/a&gt;, create an Eclipse Foundation account,
link those accounts, link to my GitHub account, sign an Eclipse agreement, and
finally create a GitHub Issue to &amp;lsquo;claim&amp;rsquo; my VS Code Marketplace namespace.&lt;/p&gt;
&lt;h2&gt;Using the extension&lt;/h2&gt;
&lt;p&gt;So, what does using the extension actually feel like? Because of the
non-deterministic nature of these models, I found it hard to tell. I tried a
simple refactoring, and I had the idea that it was very reluctant in making
changes. Was the result better? I&amp;rsquo;m not really sure.&lt;/p&gt;
&lt;p&gt;Typically, your Cursor rules would list the constraints for &lt;em&gt;your&lt;/em&gt; environment,
explaining what coding standards to adhere to, architectural constraints and so
on. I get that, it makes sense.&lt;/p&gt;
&lt;p&gt;I find it wild to think that a company spends millions and millions of dollars
on training a model, with tons of engineers meticulously improving output, and
then some guy comes along and writes 60 lines of text including &lt;strong&gt;Think before
coding&lt;/strong&gt; in the rules and &lt;em&gt;that&lt;/em&gt; would make all the difference.&lt;/p&gt;
&lt;p&gt;But the original repository has almost 4,000 stars, and surely, 4,000
developers can&amp;rsquo;t be wrong?&lt;/p&gt;
&lt;p&gt;Please try for yourself! Install the extension, don&amp;rsquo;t forget to
&lt;a href="https://github.com/mbeijen/andrej-karpathy-skills-cursor-vscode"&gt;star my repository&lt;/a&gt;
and see the results.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Paul Simon" src="images/paul-simon.jpg"&gt;&lt;/p&gt;
&lt;p&gt;As Paul Simon wrote: &lt;em&gt;These are the days of miracle and wonder&lt;/em&gt;!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://news.ycombinator.com/item?id=46986001"&gt;Discussion on Hacker News&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</content></entry><entry><title>My issues with ProtonMail</title><link href="https://tildeweb.nl/~michiel/protonmail-issues.html" rel="alternate"/><published>2026-02-05T21:21:00+01:00</published><updated>2026-02-05T21:21:00+01:00</updated><author><name>Michiel W. Beijen</name></author><id>tag:tildeweb.nl,2026-02-05:/~michiel/protonmail-issues.html</id><summary type="html">Some issues I have with the mail service I would like to love</summary><content type="html">&lt;p&gt;I use my own domain for email, which I&amp;rsquo;d recommend to everyone. I was on a
cheap Hetzner &amp;lsquo;web hosting with email&amp;rsquo; plan before, which wasn&amp;rsquo;t ideal. During
last November&amp;rsquo;s Black Friday sales I got a ProtonMail subscription and moved my
domain there. But I&amp;rsquo;ve run into several issues, some with how their product
works, others specific to my setup.&lt;/p&gt;
&lt;h3&gt;Can not open some mails on mobile&lt;/h3&gt;
&lt;p&gt;A small percentage of emails simply won&amp;rsquo;t open on iOS. When I tap them, the app
briefly shows the subject, then closes. I can&amp;rsquo;t read the content. These same
emails work fine in the web interface.&lt;/p&gt;
&lt;p&gt;This is a serious problem: your mail client should be able to read mail! I
haven&amp;rsquo;t been burned yet, but I worry about the day I need to show a boarding
pass or concert ticket at the door and can&amp;rsquo;t open it.&lt;/p&gt;
&lt;p&gt;I realized there is a workaround for this: opening the web interface in my
mobile browser, but that&amp;rsquo;s far from ideal. ProtonMail has confirmed the issue
and says they&amp;rsquo;re working on a fix.&lt;/p&gt;
&lt;p&gt;&lt;img alt="ProtonMail iOS failing to open an email" class="small" src="images/protonmail-ios-cannot-open-mail.avif"&gt;&lt;/p&gt;
&lt;h3&gt;Mail spoof warning does not show in mobile app&lt;/h3&gt;
&lt;p&gt;My employer recently switched payroll providers. ProtonMail warns that their
mail server isn&amp;rsquo;t properly configured and the messages could be spoofed, yet
coworkers on Gmail or Outlook see no such warning. After checking with our
security officer, we concluded the mails are valid and ProtonMail is being
overly cautious.&lt;/p&gt;
&lt;p&gt;&lt;img alt="ProtonMail desktop showing spoof warning" class="small" src="images/protonmail-desktop-mail-spoof-warning.png"&gt;&lt;/p&gt;
&lt;p&gt;The strange part: this warning only appears in the web interface, not the iOS
app, or on the Android app.&lt;/p&gt;
&lt;p&gt;&lt;img alt="ProtonMail iOS showing no spoof warning" class="small" src="images/protonmail-ios-no-spoof.png"&gt;&lt;/p&gt;
&lt;p&gt;If there were an actual spoofing attempt, I&amp;rsquo;d want to know, especially on
mobile! I&amp;rsquo;ve raised this issue with Proton support.&lt;/p&gt;
&lt;h3&gt;Mail read flags do not seem to sync between mobile and desktop&lt;/h3&gt;
&lt;p&gt;Emails I&amp;rsquo;ve read on my phone sometimes show up as unread in webmail later.
&lt;a href="https://www.reddit.com/r/ProtonMail/comments/1q82b2r/protonmail_unread_flags_not_synchronizing_between/"&gt;Others on Reddit&lt;/a&gt;
report the same thing, and Proton has confirmed they&amp;rsquo;re investigating. This is
table-stakes stuff for a mail client.&lt;/p&gt;
&lt;h3&gt;Pulsating menu in ProtonMail&lt;/h3&gt;
&lt;p&gt;When I open the context menu in a message, it &amp;lsquo;pulsates&amp;rsquo;. A minor issue, but
it&amp;rsquo;s been there for over two months, testament to the lack of polish in their
apps. This only happens on iOS; a co-worker on Android doesn&amp;rsquo;t see it.&lt;/p&gt;
&lt;p&gt;&lt;img alt="ProtonMail iOS pulsating context menu" class="small" src="images/protonmail-ios-pulsating-menu.avif"&gt;&lt;/p&gt;
&lt;h3&gt;No third party mobile clients&lt;/h3&gt;
&lt;p&gt;ProtonMail encrypts all data at rest and decrypts on your device. Nice in
theory, but it means no standard IMAP, so you can&amp;rsquo;t use your favorite mail
client directly.&lt;/p&gt;
&lt;p&gt;The workaround is installing the ProtonMail Bridge on your laptop, which
decrypts locally and exposes IMAP for Thunderbird, Outlook, etc. But this
doesn&amp;rsquo;t work on mobile. There you&amp;rsquo;re stuck with their app or the web interface.&lt;/p&gt;
&lt;p&gt;I use Linux with ProtonMail in a browser tab; I don&amp;rsquo;t love the Bridge approach.&lt;/p&gt;
&lt;h3&gt;No instant search in webmail without local indexing&lt;/h3&gt;
&lt;p&gt;Another consequence of client-side decryption: search doesn&amp;rsquo;t just work. For
full-text search, your browser has to download and index all your mail locally.
This takes a long time initially.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I really want to love ProtonMail. They&amp;rsquo;re steward-owned, privacy-focused,
European, and building out a full suite of products (VPN, calendar, etc.). But
their core product is email, and it has too many rough edges. I expected better
from a company that&amp;rsquo;s been around this long and is this popular. I&amp;rsquo;ll be
migrating elsewhere soon.&lt;/p&gt;
&lt;p&gt;That said, most of my issues are with the iOS app. Android users likely have a
better experience.&lt;/p&gt;</content></entry><entry><title>Reinout van Rees on prefect.io</title><link href="https://tildeweb.nl/~michiel/reinout-python-leiden-20260122.html" rel="alternate"/><published>2026-01-22T21:00:00+01:00</published><updated>2026-01-22T21:00:00+01:00</updated><author><name>Michiel W. Beijen</name></author><id>tag:tildeweb.nl,2026-01-22:/~michiel/reinout-python-leiden-20260122.html</id><summary type="html">Summary of Python Leiden talk</summary><content type="html">&lt;p&gt;Reinout is a long-time visitor of the Python Leiden meetup. In fact, he is a
regular on most nearby Python meetups and conferences. The nice thing is that
he also writes summaries of the talks he attends and he publishes those on his
&lt;a href="https://reinout.vanrees.org/weblog/"&gt;blog&lt;/a&gt;. I really appreciate this! Today he
gave a talk at our meetup, and I decided to &amp;lsquo;return the favour&amp;rsquo; so here is my
summary of his talk!&lt;/p&gt;
&lt;p&gt;Reinout discusses &lt;a href="https://prefect.io"&gt;prefect.io&lt;/a&gt;: it is a server that
provides a dashboard, has an API, shows workflows, and allows you to
start/restart jobs, examine logs, and such.&lt;/p&gt;
&lt;p&gt;In his company much IT-related work involves loading data from web APIs,
transforming it in some form, loading it in databases and so on.&lt;/p&gt;
&lt;p&gt;Previously this was all done on the command line and people had to log in over
SSH and there were constraints about rotating ssh keys which all made it very
cumbersome. Now they have a nice web UI and not so much IT restraints and it&amp;rsquo;s
much easier for people because they can just log in to a web UI and click
around.&lt;/p&gt;
&lt;p&gt;In Prefect, workflows are defined. Workflows consists of one or more tasks.
Those tasks are written in python. Prefect comes with some niceties to
configure retries on your tasks, it provides a custom logging framework and a
lot more. In the UI you can manually start jobs, configure workers, and monitor
progress.&lt;/p&gt;
&lt;p&gt;Prefect does not provide its own authentication mechanism at the moment. So if
you want to &amp;lsquo;protect&amp;rsquo; it people are using HTTP Basic auth.&lt;/p&gt;
&lt;p&gt;It comes with a docker setup, which is what Reinout is using. Also a hosted
version is available.&lt;/p&gt;
&lt;p&gt;Reinout created a cookiecutter template that allows non-programmers to create
simple python tasks. This has built in workflow that creates a github
repository, and configures github actions that creates docker containers on
every commit on main, and pushes those to a docker registry.&lt;/p&gt;
&lt;p&gt;He uses &amp;lsquo;watchtower&amp;rsquo; in the docker compose setup, which allows him to simply
deploy the stack once, and the stack will poll for updated containers and keep
itself up to date.&lt;/p&gt;
&lt;p&gt;I think it&amp;rsquo;s nice to see that they are able to provide a frictionless way to
set up, deploy and monitor data jobs for people who are more data-minded and
not hardcore sofware developers!&lt;/p&gt;</content></entry><entry><title>JPEG XL Test Page</title><link href="https://tildeweb.nl/~michiel/jxl.html" rel="alternate"/><published>2026-01-21T17:30:00+01:00</published><updated>2026-01-21T17:30:00+01:00</updated><author><name>Michiel W. Beijen</name></author><id>tag:tildeweb.nl,2026-01-21:/~michiel/jxl.html</id><summary type="html">Test page that includes a JPEG XL image</summary><content type="html">&lt;p&gt;This page shows a JPEG XL image, if your browser can handle it! At this point
in time (January 2026) this more or less means only Safari will display the
image, as far as I know. See also &lt;a href="https://caniuse.com/jpegxl"&gt;Can I Use&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="images/jpegxlman.jxl"&gt;&lt;/p&gt;
&lt;p&gt;The person in the image is &lt;a href="https://sneyers.info/"&gt;Jon Sneyers&lt;/a&gt;, co-author of
the JPEG XL spec and also creator of the &amp;ldquo;Free Lossless Image Format&amp;rdquo; that came
before it.&lt;/p&gt;
&lt;p&gt;I find JPEG XL interesting because of its history. It once was implemented in
Chrome, but hidden behind a feature flag. Then Chrome said that it did not saw
enough usage, which is unsurprising, really, and it was removed. Now they
blessed it again and are re-adding it! Some of this story is found on the
&lt;a href="https://en.wikipedia.org/wiki/JPEG_XL"&gt;JPEG XL Wikipedia page&lt;/a&gt;&lt;/p&gt;</content></entry></feed>