<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/feed.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Markus Toran</name>
    <email>markus@toranm.me</email>
  </author>
  <id>https://toranm.me/</id>
  <link href="https://toranm.me/feed/atom.xml" rel="self"/>
  <link href="https://toranm.me/" rel="alternate"/>
  <title>Markus Toran total feed</title>
  <updated>2026-02-07T00:00:00.000Z</updated>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">Since my last post, the Rayhunter project has made significant progress.</p>
<h1 id="introduction" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#introduction" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Introduction</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">The patches for the TP-Link M7350 router have been merged into the upstream Rayhunter repository and the device is listed as recommended for European users.
m0veax gave a <a href="https://media.ccc.de/v/2025-537-exploring-tp-link-m7350-porting-rayhunter/playlist" class="text-blue-600 dark:text-blue-400 hover:underline">talk</a> on the project at the MRMCD, which presented great insights into how the development happened. I can highly recommend watching the talk if you are interested in the project.</p>
<h1 id="updating-rayhunter" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#updating-rayhunter" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Updating Rayhunter</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">As the TP-Link M7350 patches have been merged, running a custom build is no longer necessary to use Rayhunter on this device.
As such, I removed the old version of Rayhunter on my device and simply used the installer from the latest version from the repository (0.10.1 as of writing this post).
I had an issue that the installer did not create a default configuration file, so I had to create one myself, where I simply set device = "tplink".</p>
<h1 id="new-features" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#new-features" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">New features</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">The latest version has made quite a lot of improvements:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>New <a href="https://efforg.github.io/rayhunter/heuristics.html" class="text-blue-600 dark:text-blue-400 hover:underline">heuristics</a></li>
<li>Improved web interface</li>
<li>On-device animation / logos</li>
</ul>
<h2 id="new-heuristics" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#new-heuristics" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">New heuristics</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The most important new feature is the new heuristics. Read up on the heuristics in the <a href="https://efforg.github.io/rayhunter/heuristics.html" class="text-blue-600 dark:text-blue-400 hover:underline">Rayhunter documentation</a>. I have not yet encountered any warnings, but I will continue to run Rayhunter and report any findings.</p>
<h2 id="new-web-interface" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#new-web-interface" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">New web interface</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The web interface has been improved significantly with a new design and better usability.
<img src="https://toranm.me/assets/2026-02-07-Rayhunter-2/webinterface.png" alt="Screenshot of Rayhunter web interface" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h2 id="on-device-logos" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#on-device-logos" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">On-device logos</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">It is now possible to display various logos and animations on the device's screen.
<img src="https://toranm.me/assets/2026-02-07-Rayhunter-2/eff_logo.jpg" alt="EFF logo on the Rayhunter" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h1 id="conclusion" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Conclusion</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Thanks to the great work of everyone involved, stingray detectors are now more accessible than ever. This project is making very good progress. I recommend everyone to watch m0veax's <a href="https://media.ccc.de/v/2025-537-exploring-tp-link-m7350-porting-rayhunter/playlist" class="text-blue-600 dark:text-blue-400 hover:underline">talk</a> and read <a href="https://www.eff.org/deeplinks/2025/09/rayhunter-what-we-have-found-so-far" class="text-blue-600 dark:text-blue-400 hover:underline">EFFs post</a> on the Rayhunter.</p>]]>
    </content>
    <id>https://toranm.me/post/2026-02-07-rayhunter-2/</id>
    <link href="https://toranm.me/post/2026-02-07-rayhunter-2/"/>
    <published>2026-02-07T00:00:00.000Z</published>
    <summary>Since my last post, the Rayhunter project has made significant progress.</summary>
    <title>Updating Rayhunter</title>
    <updated>2026-02-07T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">2025 has been a mixed year for me. The Good times were pretty good, but the bad times were so bad.</p>
<p class="my-2 dark:text-gray-200">On the positive side, switching to working full time as an reseacher has been a great decision. I was able to focus on research topics and progress in these projects. Times were busy, but I enjoyed the work and the challenges it brought.</p>
<p class="my-2 dark:text-gray-200">I had my debut as a chaos event organizer at the GPN, where I continued my tradition of organizing the helpers at the unifest, to be now part of the GPN Trollhöhle. I am pretty happy with the team and the feedback we got. Still, there is a lot to improve for this year.</p>
<p class="my-2 dark:text-gray-200">Also related to chaos, was my talk on DOI at the MRMCD. This was my second, it was ok, but looking back I now see a lot of room for improvement. I need to work on my talk pipeline and get more practice in giving talks. I notice that its hard for me to formulate my thoughts in a way that makes the main points clear to the audience. The attention does not go to the words where I want it to go and so it is hard to get the message across. I need to work on this.</p>
<p class="my-2 dark:text-gray-200">I got to travel a bit more, including switzerland, london, berlin, hamburg and munich. I went to fewer BSides than 2024.</p>
<p class="my-2 dark:text-gray-200">In the CTF department, I had an good year. I participated in fewer CTFs than 2024, but I was able to focus on quality over quantity. I made an writup on Lakectf quals <a href="https://toranm.me/post/2025-11-29-lakectf-pls-respond/" class="text-blue-600 dark:text-blue-400 hover:underline">pls respond</a> challange.</p>
<p class="my-2 dark:text-gray-200">The bad times were pretty rough. I lost three close family members this year, including my dad. This is something that will stay with me for a long time, and I am still processing it. I am grateful for the time I had with them and the memories we shared, I will never forget them. My dad was a big influence in my life, and I miss him dearly. He was always supportive of my endeavors, and I know he would be proud of what I am doing.</p>]]>
    </content>
    <id>https://toranm.me/post/2026-01-03-2025-year-review/</id>
    <link href="https://toranm.me/post/2026-01-03-2025-year-review/"/>
    <published>2026-01-03T00:00:00.000Z</published>
    <summary>2025 has been a mixed year for me. The Good times were pretty good, but the bad times were so bad.</summary>
    <title>2025 Year Review</title>
    <updated>2026-01-03T00:00:00.000Z</updated>
  </entry>
  <entry>
    <category term="talk"/>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I gave a talk on CRA (Cyber Resilience Act) at GPN 22 in German. Is was a while ago, but if you want to know a thing or two about CRA, check it out!</p>
<p class="my-2 dark:text-gray-200"><strong>Talk:</strong> <a href="https://media.ccc.de/v/gpn22-271-cyber-resilience-act-compliance-risk-oder-consumer-respect-act-" class="text-blue-600 dark:text-blue-400 hover:underline">Media CCC Link</a></p>]]>
    </content>
    <id>https://toranm.me/post/2025-12-17-cra/</id>
    <link href="https://toranm.me/post/2025-12-17-cra/"/>
    <published>2025-12-17T00:00:00.000Z</published>
    <summary>I gave a talk on CRA (Cyber Resilience Act) at GPN 22 in German. Is was a while ago, but if you want to know a thing or two about CRA, check it out!</summary>
    <title>Cyber Resilience Act - Compliance Risk oder Consumer Respect Act?</title>
    <updated>2025-12-17T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">The challenge "pls respond" from LakeCTF involved analyzing a network capture file containing SMS messages. Inside the messages are animations, IMelody and wireless vector graphics.</p>
<h1 id="challenge-overview" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#challenge-overview" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Challenge Overview</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">The challenge provides a pcap file named <code>chall.pcap</code>. And the following description:
<em>"What are these SMS I received as soon as I connected to the gNB? Hint: To configure NAS5GS, please follow this guide <a href="https://github.com/SysSec-KAIST/LTESniffer/blob/main/pcap_file_example/README.md" class="text-blue-600 dark:text-blue-400 hover:underline">https://github.com/SysSec-KAIST/LTESniffer/blob/main/pcap_file_example/README.md</a> for the first part and enable the NR/5GS equivalent protocols of the LTEs one presented in 2nd part (i.e. MAC-NR,PDCP-NR,RLC-NR,NAS-5GS) PS:These packets are valid transmissions with an actual phone"</em>.</p>
<p class="my-2 dark:text-gray-200"><a href="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/chall.pcap" class="text-blue-600 dark:text-blue-400 hover:underline">chall.pcap</a></p>
<h1 id="opening-the-pcap" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#opening-the-pcap" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Opening the pcap</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">First, I opened the pcap file using Wireshark and configured it to accept the relevant protocols.
I first set the DLT_USER table to dissect the relevant protocols as shown in the guide.
I then enabled the protocols:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>nas_5gs_udp</li>
<li>li5g_tls</li>
<li>rlc_nr_udp</li>
<li>pdcp_nr_udp</li>
<li>mac_nr_udp</li>
<li>ipv6_dect_nr</li>
<li>+ the defaults</li>
</ul>
<p class="my-2 dark:text-gray-200">as suggested in the hint. This allowed Wireshark to properly dissect the packets.
This configuration is shown in the following screenshots:
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/ws-config-dlt.png" alt="Wireshark DLT_USER configuration" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/ws-config-protocols.png" alt="Wireshark protocol configuration" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h1 id="analyzing-the-packets" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#analyzing-the-packets" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Analyzing the packets</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">After configuring Wireshark, I looked through the packets. Wireshark could reassemble PDCP-NR packets. Looking through the reassembled PDCP-NR packets, I found several NAS-5GS messages containing SMS data.
In total, there were 4 SMS messages. The first message is a text message, while the other three contain binary data.
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/ws-analyze-overview-full.png" alt="Wireshark overview" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/ws-analyze-overview-gsm.png" alt="Wireshark gsm" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h1 id="extracting-the-sms-messages" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#extracting-the-sms-messages" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Extracting the SMS messages</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">The contents of the SMS messages are defined in the GSM 03.40 standard, which is now maintained by 3GPP as TS 23.040 and ETSI as TS 123 040. The current version is 19.0.0 (December 2025).
This standard defines formats for SMS messages, including text, images, animations, and sounds.
For more advanced formats than just text, a data structure called User Data Header (UDH) is used to indicate the type of SMS message and how to interpret the data.
Following the UDH are the actual data contained as Information Elements (IEs). These IEs are defined in the standard and are assigned specific identifiers (IEIs, Page 75).
Outside the UDH, a SMS text indicates a simple text message for the format, when the UDH is not understood by the receiving device.</p>
<h2 id="message-1-text-message" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#message-1-text-message" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Message 1: Text Message</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The first SMS message was a simple text message. No User Data header. I extracted the text and this gives the first part of the flag: <code>EPFL{Did_y0u_know_th4t_</code>.
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/ws-packet-1.png" alt="Wireshark packet 1" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h2 id="message-2-animation" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#message-2-animation" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Message 2: Animation</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">A IEI of <code>0x0e</code> indicates a "Large Animation (16*16 times 4)".
Within the standard, an animation (9.2.3.24.10.3.3) is simply defined as sequence of 4 pictures. A picture (9.2.3.24.10.3.2) is a pixel grid where each bit represents a pixel, that can be white (<code>0</code>) or black (<code>1</code>).
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/ws-packet-2.png" alt="Wireshark packet 2" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<p class="my-2 dark:text-gray-200">I quickly wrote a script to parse the animation data and render each frame as an image.
The animation frames are as follows:</p>
<div class="image-row">
<p class="my-2 dark:text-gray-200"><img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/2-animation/large_anim_16x16_f0.png" alt="SMS" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/2-animation/large_anim_16x16_f1.png" alt="h4s" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/2-animation/large_anim_16x16_f2.png" alt="s0_m" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/2-animation/large_anim_16x16_f3.png" alt="any_" loading="lazy" class="w-full h-auto rounded-xl" /></p>
</div>
<p class="my-2 dark:text-gray-200">This gives the second part of the flag: <code>SMS_h4s_s0_many_</code>.</p>
<h2 id="message-3-imelody" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#message-3-imelody" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Message 3: iMelody</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Next, the third SMS contains the IEI 0x0c, which indicates an "iMelody" message.
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/ws-packet-3.png" alt="Wireshark packet 3" loading="lazy" class="w-full h-auto rounded-xl" />
iMelody is a format for ringtones based on the work of Sony Ericsson back in the day, defined in the iMelody specification by the Infrared Data Association.
As a side note, I had a Sony Ericsson phone, and I remember opening up iMelody files on it, but not understanding the format.</p>
<p class="my-2 dark:text-gray-200">The iMelody data contained is ASCII text:</p>
<pre class="whitespace-pre-wrap overflow-auto dark:bg-gray-800"><code>BEGIN:IMELODY
VERSION:1.2
FORMAT:CLASS1.0
STYLE:S2
MELODY:c4c4c4r2c2r2c4c2c4r2c4c4c4c4c2r2c2c4r2c2c2c4r2c4
END:IMELODY
</code></pre>
<p class="my-2 dark:text-gray-200">The melody section contains notes and durations. I wrote a small script to parse the melody and create a WAV file. c4 denotes a short C note, and c2 a long C note, r2 denotes a rest.
This is what the IMelody sounds like:
<div data-audio-player="true" data-audio-src="../assets/2025-11-29-lakectf-pls-respond/3-imelody/out_imelody.wav" data-audio-title="imelody.wav" data-audio-index="0" class="audio-player-placeholder"><noscript><a href="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/3-imelody/out_imelody.wav" class="text-blue-600 dark:text-blue-400 hover:underline">imelody.wav</a></noscript></div>
Hence, the melody encodes a Morse code message:</p>
<pre class="whitespace-pre-wrap overflow-auto dark:bg-gray-800"><code>... - .-. ....- -. --. .
</code></pre>
<p class="my-2 dark:text-gray-200">Decoding the Morse code gives the third part of the flag: <code>STR4NGE_</code>.</p>
<p class="my-2 dark:text-gray-200">Thanks to n0rdan for getting the correct Morse code translation and providing the iMelody spec.</p>
<h2 id="message-4-wireless-vector-graphic-wvg" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#message-4-wireless-vector-graphic-wvg" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Message 4: Wireless Vector Graphic (WVG)</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The fourth SMS message was the hardest to interpret. It contained the IEI 0x18, which is a "Standard WVG object".
<img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/ws-packet-4.png" alt="Wireshark packet 4" loading="lazy" class="w-full h-auto rounded-xl" />
The Wireless Vector Graphic (WVG), is a vector image format for mobile devices, described in Annex G of the standard. I did not find existing parsers for this format.</p>
<p class="my-2 dark:text-gray-200">The Annex G provides a BNF for the format and general descriptions of the various elements. I go into more detail about WVG in Annex A at the end of this writeup.</p>
<p class="my-2 dark:text-gray-200">During the CTF, I did not manage to get the parser to work 100%. Alkalem came in and provided a working parser during the CTF. With his result, my parser could be fixed and gave this structure:</p>
<details class="collapsible-code-block my-4 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden"><summary class="collapsible-code-summary cursor-pointer select-none py-2 px-4 bg-gray-100 dark:bg-gray-800 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-t-lg font-mono text-sm text-gray-600 dark:text-gray-400 flex items-center gap-2 transition-colors" data-collapsed-text="Show code (162 lines)" data-expanded-text="Hide code (162 lines)"><span class="collapsible-code-chevron inline-block transition-transform duration-200" aria-hidden="true">▶</span><span class="collapsible-code-text">Show code (162 lines)</span></summary><div class="collapsible-code-content"><pre class="whitespace-pre-wrap overflow-auto dark:bg-gray-800" data-collapsible="true" data-line-count="162"><code>WvgDrawing
├── Header
│   ├── is_standard: ✓
│   ├── version: 0
│   ├── ColorConfig
│   │   ├── scheme: 0 (Black &#x26; White)
│   │   ├── default_line_color: RGB(0, 0, 0)
│   │   ├── default_fill_color: RGB(0, 0, 0)
│   │   └── background_color: RGB(255, 255, 255)
│   └── CodecParams
│       ├── ElementMask
│       │   ├── enabled_count: 3
│       │   ├── element_type_bits: 2
│       │   ├── local_envelope: ✗
│       │   ├── polyline: ✓
│       │   ├── circular_polyline: ✓
│       │   ├── bezier_polyline: ✗
│       │   ├── simple_shape: ✗
│       │   ├── reuse: ✓
│       │   ├── group: ✗
│       │   ├── animation: ✗
│       │   ├── has_extension: ✗
│       │   └── enabled_types: [Polyline, CircularPolyline, Reuse]
│       ├── AttributeMask
│       │   ├── is_empty: ✓
│       │   ├── line_type: ✗
│       │   ├── line_width: ✗
│       │   ├── fill: ✗
│       │   └── line_color: ✗
│       ├── GenericParams
│       │   ├── angle_resolution: 3 (22.5°)
│       │   ├── angle_in_bits: 3
│       │   ├── scale_resolution: 0 (1/4)
│       │   ├── scale_in_bits: 3
│       │   ├── index_in_bits: 4
│       │   └── curve_offset_in_bits: 4
│       └── FlatParams
│           ├── drawing_size: 128x32
│           ├── max_x_in_bits: 7
│           ├── max_y_in_bits: 5
│           ├── xy_all_positive: ✓
│           ├── trans_xy_in_bits: 7
│           ├── offset_x: level1=3, level2=5
│           ├── offset_y: level1=3, level2=5
│           └── num_points_in_bits: 3
└── Elements (18 total)
    ├── [0] Polyline
    │   ├── point_count: 1
    │   └── points:
    │       └──[0] (83, 9) ← start (absolute)
    ├── [1] Polyline
    │   ├── point_count: 2
    │   └── points:
    │       ├──[0] (83, 14) ← start (absolute)
    │       └──[1] (83, 25) Δ(+0, +11)
    ├── [2] CircularPolyline
    │   ├── point_count: 4
    │   ├── curve_offsets: [0, -6, -4]
    │   └── points:
    │       ├──[0] (3, 15) ← start (absolute)
    │       ├──[1] (16, 15) Δ(+13, +0) [straight]
    │       ├──[2] (3, 15) Δ(-13, +0) [curve=-6]
    │       └──[3] (16, 22) Δ(+13, +7) [curve=-4]
    ├── [3] Polyline
    │   ├── point_count: 2
    │   └── points:
    │       ├──[0] (18, 12) ← start (absolute)
    │       └──[1] (28, 23) Δ(+10, +11)
    ├── [4] Polyline
    │   ├── point_count: 2
    │   └── points:
    │       ├──[0] (18, 23) ← start (absolute)
    │       └──[1] (28, 12) Δ(+10, -11)
    ├── [5] Polyline
    │   ├── point_count: 2
    │   └── points:
    │       ├──[0] (34, 9) ← start (absolute)
    │       └──[1] (34, 24) Δ(+0, +15)
    ├── [6] Polyline
    │   ├── point_count: 2
    │   └── points:
    │       ├──[0] (34, 15) ← start (absolute)
    │       └──[1] (37, 15) Δ(+3, +0)
    ├── [7] CircularPolyline
    │   ├── point_count: 5
    │   ├── curve_offsets: [4, 4, 4, 4]
    │   └── points:
    │       ├──[0] (41, 10) ← start (absolute)
    │       ├──[1] (49, 10) Δ(+8, +0) [curve=4]
    │       ├──[2] (49, 17) Δ(+0, +7) [curve=4]
    │       ├──[3] (49, 24) Δ(+0, +7) [curve=4]
    │       └──[4] (41, 24) Δ(-8, +0) [curve=4]
    ├── [8] Polyline
    │   ├── point_count: 2
    │   └── points:
    │       ├──[0] (42, 17) ← start (absolute)
    │       └──[1] (49, 17) Δ(+7, +0)
    ├── [9] CircularPolyline
    │   ├── point_count: 3
    │   ├── curve_offsets: [3, 0]
    │   └── points:
    │       ├──[0] (58, 15) ← start (absolute)
    │       ├──[1] (66, 15) Δ(+8, +0) [curve=3]
    │       └──[2] (66, 25) Δ(+0, +10) [straight]
    ├── [10] Polyline
    │   ├── point_count: 2
    │   └── points:
    │       ├──[0] (58, 11) ← start (absolute)
    │       └──[1] (58, 25) Δ(+0, +14)
    ├── [11] CircularPolyline
    │   ├── point_count: 4
    │   ├── curve_offsets: [-5, 0, 5]
    │   └── points:
    │       ├──[0] (78, 12) ← start (absolute)
    │       ├──[1] (70, 12) Δ(-8, +0) [curve=-5]
    │       ├──[2] (77, 23) Δ(+7, +11) [straight]
    │       └──[3] (70, 23) Δ(-7, +0) [curve=5]
    ├── [12] CircularPolyline
    │   ├── point_count: 6
    │   ├── curve_offsets: [0, -3, 0, -3, 0]
    │   └── points:
    │       ├──[0] (89, 12) ← start (absolute)
    │       ├──[1] (89, 26) Δ(+0, +14) [straight]
    │       ├──[2] (95, 26) Δ(+6, +0) [curve=-3]
    │       ├──[3] (95, 12) Δ(+0, -14) [straight]
    │       ├──[4] (89, 12) Δ(-6, +0) [curve=-3]
    │       └──[5] (95, 26) Δ(+6, +14) [straight]
    ├── [13] Reuse
    │   ├── element_index: 9 (references element #9)
    │   ├── Transform
    │   │   ├── translate: (41, 0)
    │   │   └── (no rotation/scale)
    │   └── has_array: ✗ (single instance)
    ├── [14] Reuse
    │   ├── element_index: 10 (references element #10)
    │   ├── Transform
    │   │   ├── translate: (41, 0)
    │   │   └── (no rotation/scale)
    │   └── has_array: ✗ (single instance)
    ├── [15] Reuse
    │   ├── element_index: 11 (references element #11)
    │   ├── Transform
    │   │   ├── translate: (40, 0)
    │   │   └── (no rotation/scale)
    │   └── has_array: ✗ (single instance)
    ├── [16] CircularPolyline
    │   ├── point_count: 7
    │   ├── curve_offsets: [6, 0, 0, 0, 0, 6]
    │   └── points:
    │       ├──[0] (122, 7) ← start (absolute)
    │       ├──[1] (124, 10) Δ(+2, +3) [curve=6]
    │       ├──[2] (124, 15) Δ(+0, +5) [straight]
    │       ├──[3] (127, 18) Δ(+3, +3) [straight]
    │       ├──[4] (124, 21) Δ(-3, +3) [straight]
    │       ├──[5] (124, 26) Δ(+0, +5) [straight]
    │       └──[6] (122, 29) Δ(-2, +3) [curve=6]
    └── [17] Polyline
        ├── point_count: 2
        └── points:
            ├──[0] (0, 28) ← start (absolute)
            └──[1] (6, 28) Δ(+6, +0)
</code></pre></div></details>
<p class="my-2 dark:text-gray-200">Rendering it to SVG gives the following image:</p>
<p class="my-2 dark:text-gray-200"><img src="https://toranm.me/assets/2025-11-29-lakectf-pls-respond/4-wvg/rendered.svg" alt="WVG rendered spelling _ext3nsi0ns}" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<p class="my-2 dark:text-gray-200">So finally, the fourth part of the flag is: <code>_ext3nsi0ns}</code>.</p>
<h1 id="wrong-avenues" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#wrong-avenues" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Wrong Avenues</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">At first, I did not see the GSM packets and thought I had to look into more recent NR formats, which might be encrypted with NAS5GS security. So I tried to decrypt them using various methods, but this was a dead end.</p>
<h1 id="issues-with-the-specification" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#issues-with-the-specification" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Issues with the specification</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">There are some mistakes and missing details in the specification:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Circular polylines have at least two points, but the number of points is stored as point_count - 2.</li>
<li>Signed offset integer size depends on a flag, but the specification lists the same conditions for both sizes (=0). It should be (=1) for the larger size (Page 204 in Annex G).</li>
</ul>
<h1 id="conclusion" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Conclusion</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">The flag was</p>
<p class="my-2 dark:text-gray-200"><span class="chromatic-text"><span class="chromatic-text-layer chromatic-text-red" aria-hidden="true"><code>EPFL{Did_y0u_know_th4t_SMS_h4s_s0_many_STR4NGE_ext3nsi0ns}</code></span><span class="chromatic-text-layer chromatic-text-cyan" aria-hidden="true"><code>EPFL{Did_y0u_know_th4t_SMS_h4s_s0_many_STR4NGE_ext3nsi0ns}</code></span><span class="chromatic-text-base"><code>EPFL{Did_y0u_know_th4t_SMS_h4s_s0_many_STR4NGE_ext3nsi0ns}</code></span></span></p>
<p class="my-2 dark:text-gray-200">which I did not.</p>
<p class="my-2 dark:text-gray-200">All code used and artifacts produced are available on <a href="https://github.com/xXMarkuski/2025-lakectf-pls-resond-writeup" class="text-blue-600 dark:text-blue-400 hover:underline">GitHub</a>.</p>
<p class="my-2 dark:text-gray-200">Overall, I had fun working on this challenge. It was the first challenge I looked at, and I made some good progress early on, but the WVG part was hard. I found it interesting to see SMS message formats. There is a world of formats where people put in the effort to make things work on limited devices and networks. They decided to create big PDFs, but in the end these formats became irrelevant with modern smartphones. Still, its in the spec and applicable to 5G SMS messages.</p>
<p class="my-2 dark:text-gray-200">This CTF was played as a collaboration between <a href="https://royalroppers.team/" class="text-blue-600 dark:text-blue-400 hover:underline">Royal Roppers</a> and <a href="https://kitctf.de/" class="text-blue-600 dark:text-blue-400 hover:underline">KITCTF</a>, combinding each countries' leading <span class="outlined-text" style="--outlined-stroke-width: 1.5px; --outlined-offset-x: 2px; --outlined-offset-y: 1.5px; --outlined-skew: -15deg;"><span class="outlined-text-layer">Institutes of Technology</span><span class="outlined-text-base" aria-hidden="true">Institutes of Technology</span></span>.</p>
<h1 id="sources" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#sources" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Sources</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Digital cellular telecommunications system (Phase 2+) (GSM);
Universal Mobile Telecommunications System (UMTS);
LTE;
5G;
Technical realization of the Short Message Service (SMS):
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=747" class="text-blue-600 dark:text-blue-400 hover:underline">Originating GSM specification</a></li>
<li><a href="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=141" class="text-blue-600 dark:text-blue-400 hover:underline">.docx by 3GPP</a></li>
<li><a href="https://www.etsi.org/deliver/etsi_ts/123000_123099/123040/19.00.00_60/ts_123040v190000p.pdf" class="text-blue-600 dark:text-blue-400 hover:underline">PDF by ETSI</a></li>
</ul>
</li>
<li>Background on Formats:
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://en.wikipedia.org/wiki/User_Data_Header" class="text-blue-600 dark:text-blue-400 hover:underline">https://en.wikipedia.org/wiki/User_Data_Header</a></li>
<li><a href="https://en.wikipedia.org/wiki/GSM_03.40" class="text-blue-600 dark:text-blue-400 hover:underline">https://en.wikipedia.org/wiki/GSM_03.40</a></li>
</ul>
</li>
<li>IMelody:
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://en.wikipedia.org/wiki/IMelody" class="text-blue-600 dark:text-blue-400 hover:underline">iMelody Wikipedia</a></li>
<li><a href="https://www.irda.org/standards/pubs/iMelody.pdf" class="text-blue-600 dark:text-blue-400 hover:underline">iMelody by the Infrared Data Association</a></li>
</ul>
</li>
</ul>
<h1 id="annex-a-more-on-the-wireless-vector-graphic-wvg" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#annex-a-more-on-the-wireless-vector-graphic-wvg" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Annex A: More on the Wireless Vector Graphic (WVG)</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Wireless Vector Graphic (WVG) is a binary format for vector graphics. It consists of a header and elements.
The format comes in various flavors. First, there is standard and character size WVG. The latter is used inline in text to represent handwritten glyphs or glyphs not present in the font.
There are various compression modes and variable integer lengths. The format supports two coordinate systems, flat and compact.
Each of these settings changes the semantics of the binary format.
Coordinates can be represented by absolute positions or relative to another coordinate. The format supports color in multiple formats and has a default websafe color palette.</p>
<p class="my-2 dark:text-gray-200">Elements:
There are 9 basic elements and additional elements for advanced usage:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Lines
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Polyline</li>
<li>Circular polyline</li>
<li>Bezier polyline</li>
</ul>
</li>
<li>Polygons
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Basic:
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Ellipse</li>
<li>Rectangle (with rounded corners)</li>
</ul>
</li>
<li>Special:
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Regular polygon</li>
<li>Star</li>
<li>Grid</li>
</ul>
</li>
</ul>
</li>
<li>Text</li>
<li>Group</li>
<li>Reuse</li>
<li>Simple &#x26; Standard animation</li>
<li>Frame</li>
<li>Extended</li>
</ul>
<p class="my-2 dark:text-gray-200">Relevant for this challenge are standard WVG, flat coordinate system, black &#x26; white color scheme, and the elements polyline, circular polyline, and reuse.</p>
<p class="my-2 dark:text-gray-200">The header defines which elements are used, so that the type indicator in each element uses as few bits as possible (2 in this case, for the three elements). The header also defines how many bits are used for coordinates and integers.
In the format, relative coordinates can be encoded in two levels of precision. The number of bits for each level is given in the header; which level is used is given in the element.</p>
<p class="my-2 dark:text-gray-200">A polyline is a sequence of connected line segments defined by points. In our setup, the first point is absolute, and subsequent points are relative to the previous point.</p>
<p class="my-2 dark:text-gray-200">A circular polyline is similar to a polyline but supports curved segments. Each curved segment has a curve offset defining the curvature, by a formula given in the specification.</p>
<p class="my-2 dark:text-gray-200">A reuse element references another element by its index and applies a transformation (translation, rotation, scaling) to it. In our case, only translation is used.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-11-29-lakectf-pls-respond/</id>
    <link href="https://toranm.me/post/2025-11-29-lakectf-pls-respond/"/>
    <published>2025-11-29T00:00:00.000Z</published>
    <summary>The challenge &quot;pls respond&quot; from LakeCTF involved analyzing a network capture file containing SMS messages. Inside the messages are animations, IMelody and wireless vector graphics.</summary>
    <title>LakeCTF 2025 – pls respond – Writeup</title>
    <updated>2025-11-29T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">When designing my own website, I drew inspiration from various other people's websites. Here are a few that stood out to me:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://dbushell.com/2024/03/14/better-syntax-highlighting/" class="text-blue-600 dark:text-blue-400 hover:underline">David Bushell</a></li>
<li><a href="https://bertptrs.nl/2023/08/17/how-to-host-a-static-next-js-website-with-nginx.html" class="text-blue-600 dark:text-blue-400 hover:underline">Bert Peters</a></li>
<li><a href="https://jwz.org/" class="text-blue-600 dark:text-blue-400 hover:underline">jwz</a></li>
<li><a href="https://www.joachim-breitner.de/" class="text-blue-600 dark:text-blue-400 hover:underline">Joachim Breitner</a></li>
<li><a href="https://surma.dev/things/webgpu/" class="text-blue-600 dark:text-blue-400 hover:underline">Surma</a></li>
<li><a href="https://rknight.me/blog/styling-rss-and-atom-feeds/" class="text-blue-600 dark:text-blue-400 hover:underline">R. Knight</a></li>
<li><a href="https://www.dannyvankooten.com/blog/2022/minifying-top-websites/" class="text-blue-600 dark:text-blue-400 hover:underline">Danny van Kooten</a></li>
<li><a href="https://www.gwern.net/" class="text-blue-600 dark:text-blue-400 hover:underline">Gwern</a></li>
<li><a href="https://www.jeremykun.com/shortform/2024-08-07-1414/" class="text-blue-600 dark:text-blue-400 hover:underline">Jeremy Kun</a></li>
<li><a href="https://blog.glyph.im/2025/08/the-best-line-length.html" class="text-blue-600 dark:text-blue-400 hover:underline">Glyph</a></li>
<li><a href="https://jarv.is/notes/hugo-to-nextjs" class="text-blue-600 dark:text-blue-400 hover:underline">Jarv</a></li>
<li><a href="https://sebastianhahner.de/blog/2025/live-coding-roadmap/" class="text-blue-600 dark:text-blue-400 hover:underline">Sebastian Hahner</a></li>
<li><a href="https://nickwalker.us/blog/2024/acm-dl-fake-dois/" class="text-blue-600 dark:text-blue-400 hover:underline">Nick Walker</a></li>
<li><a href="https://pascoda.fairydust.space/2025/06/de-wie-geht-eigentlich-wissenschaft/" class="text-blue-600 dark:text-blue-400 hover:underline">Pascoda</a></li>
<li><a href="https://herman.bearblog.dev/digital-hygiene-passwords/" class="text-blue-600 dark:text-blue-400 hover:underline">Herman Martinus</a></li>
<li><a href="https://chrisliebaer.de/blog/docker-backups/" class="text-blue-600 dark:text-blue-400 hover:underline">Chrisliebaer</a></li>
<li><a href="https://ju256.rip/posts/kitctfctf22-date/" class="text-blue-600 dark:text-blue-400 hover:underline">Ju256</a></li>
<li><a href="https://intrigus.org/" class="text-blue-600 dark:text-blue-400 hover:underline">Intrigus</a></li>
<li><a href="https://wachter-space.de/" class="text-blue-600 dark:text-blue-400 hover:underline">Wachter Space</a></li>
<li><a href="https://www.philvenables.com/post/security-and-the-7-deadly-sins" class="text-blue-600 dark:text-blue-400 hover:underline">Phil Venables</a></li>
<li><a href="https://blog.fefe.de/" class="text-blue-600 dark:text-blue-400 hover:underline">Fefe</a></li>
<li><a href="https://www.tbray.org/ongoing/When/202x/2020/04/29/Leaving-Amazon" class="text-blue-600 dark:text-blue-400 hover:underline">Tim Bray</a></li>
<li><a href="https://bradfitz.com/2020/01/27/leaving-google" class="text-blue-600 dark:text-blue-400 hover:underline">Brad Fitzpatrick</a></li>
<li><a href="https://moxie.org/2022/01/07/web3-first-impressions.html" class="text-blue-600 dark:text-blue-400 hover:underline">Moxie Marlinspike</a></li>
<li><a href="https://martin.leyrer.priv.at/static/events2025.html" class="text-blue-600 dark:text-blue-400 hover:underline">Martin Leyrer</a></li>
<li><a href="https://sthom.kiwi/blog/removing-javascript-from-a-nextjs-site-and-then-adding-it-back-in" class="text-blue-600 dark:text-blue-400 hover:underline">Stuart Thomson</a></li>
<li><a href="https://davi.sh/til/astro/content-url-routing/" class="text-blue-600 dark:text-blue-400 hover:underline">Davis Haupt</a></li>
<li><a href="https://chrismcleod.dev/blog/adding-the-new-mastodon-link-attribution-meta-tag/" class="text-blue-600 dark:text-blue-400 hover:underline">Chris McLeod</a></li>
<li><a href="https://github.com/welpo/tabi" class="text-blue-600 dark:text-blue-400 hover:underline">tabi</a></li>
<li><a href="https://xeiaso.net/" class="text-blue-600 dark:text-blue-400 hover:underline">Xe Iaso</a></li>
<li><a href="https://bepyan.me/en/post/astro-sitemap/" class="text-blue-600 dark:text-blue-400 hover:underline">Edward Kim</a></li>
<li><a href="https://gsong.dev/articles/astro-feed-unified/" class="text-blue-600 dark:text-blue-400 hover:underline">George Song</a></li>
<li><a href="https://tilde.town/~ydreniv/blog/beginner-hcard-hentry/" class="text-blue-600 dark:text-blue-400 hover:underline">YDRENIV</a></li>
<li><a href="https://jamesg.blog/" class="text-blue-600 dark:text-blue-400 hover:underline">James</a></li>
<li><a href="https://taggart-tech.com/" class="text-blue-600 dark:text-blue-400 hover:underline">Taggart Tech</a></li>
<li><a href="https://www.dannyvankooten.com/sitemap.xml" class="text-blue-600 dark:text-blue-400 hover:underline">Danny van Kooten</a></li>
<li><a href="https://emile.space/" class="text-blue-600 dark:text-blue-400 hover:underline">Hanemile</a></li>
<li><a href="https://ik0ri4n.de/" class="text-blue-600 dark:text-blue-400 hover:underline">ik0ri4n</a></li>
<li><a href="https://snarfed.org/2023-11-27_re-introducing-bridgy-fed" class="text-blue-600 dark:text-blue-400 hover:underline">Snarfed</a></li>
<li><a href="https://endler.dev/" class="text-blue-600 dark:text-blue-400 hover:underline">Mathias Endler</a></li>
<li><a href="https://www.0xkato.xyz/linux-boot/" class="text-blue-600 dark:text-blue-400 hover:underline">0xkato</a></li>
<li><a href="https://mxb.dev/blog/using-webmentions-on-static-sites/" class="text-blue-600 dark:text-blue-400 hover:underline">Max Böck</a></li>
<li><a href="https://blog.daviddodda.com/how-i-almost-got-hacked-by-a-job-interview" class="text-blue-600 dark:text-blue-400 hover:underline">David Dodda</a></li>
<li><a href="https://snarky.ca/why-it-took-4-years-to-get-a-lock-files-specification/" class="text-blue-600 dark:text-blue-400 hover:underline">Brett Cannon</a></li>
<li><a href="https://mckerlie.com/" class="text-blue-600 dark:text-blue-400 hover:underline">Adam McKerlie</a></li>
<li><a href="https://www.joshwcomeau.com/css/full-bleed/" class="text-blue-600 dark:text-blue-400 hover:underline">Josh Comeau</a></li>
<li><a href="https://ondrejsevcik.com/blog/building-perfect-markdown-processor-for-my-blog" class="text-blue-600 dark:text-blue-400 hover:underline">Ondrej Sevcik</a></li>
<li><a href="https://andre.arko.net/note/" class="text-blue-600 dark:text-blue-400 hover:underline">Andre Arko</a></li>
<li><a href="https://blog.babelo.xyz/" class="text-blue-600 dark:text-blue-400 hover:underline">Salvatore Abello</a></li>
<li><a href="https://purplesyringa.moe/blog/jvm-exceptions-are-weird-a-decompiler-perspective/" class="text-blue-600 dark:text-blue-400 hover:underline">Alisa Sireneva</a></li>
<li><a href="https://krebsonsecurity.com" class="text-blue-600 dark:text-blue-400 hover:underline">Brian Krebs</a></li>
<li><a href="https://www.troyhunt.com/2-billion-email-addresses-were-exposed-and-we-indexed-them-all-in-have-i-been-pwned/" class="text-blue-600 dark:text-blue-400 hover:underline">Troy Hunt</a></li>
<li><a href="https://ericmigi.com/" class="text-blue-600 dark:text-blue-400 hover:underline">Eric Migicovsky</a></li>
</ul>]]>
    </content>
    <id>https://toranm.me/post/2025-11-17-other-peoples-websites/</id>
    <link href="https://toranm.me/post/2025-11-17-other-peoples-websites/"/>
    <published>2025-11-17T00:00:00.000Z</published>
    <summary>When designing my own website, I drew inspiration from various other people's websites. Here are a few that stood out to me:</summary>
    <title>Other People's Websites</title>
    <updated>2025-11-17T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I designed and printed my own personal asset labels to tag my belongings. These labels help identify my items and provide contact information in case they get lost.</p>
<h1 id="overall-concept" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#overall-concept" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Overall Concept</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I decided on a high-contrast black-and-white design for maximum visibility. As it is printed on white paper, I opted for a black border resembling a dog tag. The written text includes my name, email address, and DECT number. I further use the domain "rx.mt" for my asset IDs, storing them as subdomains (e.g., <code>i1000.rx.mt</code>) with TXT and LOC records for additional information. The design features test card colors on the bottom and a red box as design elements.</p>
<h1 id="first-design-iteration" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#first-design-iteration" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">First Design Iteration</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">This is printed on 70mm x 36mm labels, which are rather large but provide enough space for the information and can be printed on A4 sheets.
This is the first iteration of the design:
<img src="https://toranm.me/assets/2025-11-02-asset-label/asset-label-v1.png" alt="Asset Label Design" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h1 id="second-design-iteration" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#second-design-iteration" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Second Design Iteration</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">From this first design, I created a second iteration with a bunch of logos. Of course, I only used logos that my stuff complies with. Also, I designed a datamatrix code that encodes the asset ID. Here's the updated design:
<img src="https://toranm.me/assets/2025-11-02-asset-label/asset-label-v2.png" alt="Asset Label Design with Logos" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h1 id="small-label-variant" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#small-label-variant" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Small Label Variant</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I also created a smaller variant of the label for smaller items. This one is 50mm x 20mm.
<img src="https://toranm.me/assets/2025-11-02-asset-label/asset-label-v2-small.png" alt="Asset Label Design with Logos" loading="lazy" class="w-full h-auto rounded-xl" /></p>]]>
    </content>
    <id>https://toranm.me/post/2025-11-02-asset-label/</id>
    <link href="https://toranm.me/post/2025-11-02-asset-label/"/>
    <published>2025-11-02T00:00:00.000Z</published>
    <summary>I designed and printed my own personal asset labels to tag my belongings. These labels help identify my items and provide contact information in case they get lost.</summary>
    <title>Personal Asset Labels</title>
    <updated>2025-11-02T00:00:00.000Z</updated>
  </entry>
  <entry>
    <category term="featured"/>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I did a major revamp of this very website.</p>
<p class="my-2 dark:text-gray-200">It's completely rewritten from scratch based on Astro. Around 6 years ago, I migrated my website from Hugo to Jekyll. In a way, the reasons why I migrated to Astro are the same as why I migrated to Jekyll in the first place: more freedom to customize the design. With Jekyll, I had to place HTML directly in Markdown to get it to look the way I wanted. Now with Astro, I can just program it exactly how I envision it.</p>
<h1 id="motivation" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#motivation" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Motivation</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">With me blogging more regularly now, the features my old blog had were too limited. I thought I would implement features like proper code highlighting once I really needed it, but adding it onto the Jekyll stack proved hacky, and I couldn't achieve perfectly rendered results. Other aspects of the old blog also felt dated—the design, of course, but also technically. I was stuck on an old version of Jekyll from 2019, and when I tried to update, features broke and old unsupported plugins hindered new developments. The CSS framework was an old fork of Bulma called Bulvar. Dark mode support was hacked on. I couldn't leverage JavaScript libraries the way I wanted. Thus, I needed something new.</p>
<p class="my-2 dark:text-gray-200">I briefly tried going back to Hugo, using an AI agent to port my website, and experimented with different themes like PaperMod and its derivatives. But nothing could meet my standards. Between the old website and this one lie 5 different stacks I tried out before I finally decided on Astro.</p>
<h1 id="my-jekyll-website" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#my-jekyll-website" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">My Jekyll Website</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">My Jekyll website basically offered a blog and a site about me. The design was a customized variant of a minimal theme and very basic—I thought it looked too basic. At some point, I changed the colors by using a Prolog program to optimize a color palette based on defined requirements. The sites were written in Markdown and rendered to HTML with kramdown.</p>
<h2 id="other-peoples-websites" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#other-peoples-websites" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Other People's Websites</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">I drew inspiration from other people's websites when coming up with mine. In an upcoming post, I will highlight other cool websites, but the possibilities to innovate never end.</p>
<h1 id="why-astro--tailwind" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#why-astro--tailwind" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Why Astro + Tailwind</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I initially tried using Next.js, but React and the way Markdown is parsed hindered achieving my vision. I migrated to Astro, as I can currently live with its limitations, and it gets the job done well.</p>
<p class="my-2 dark:text-gray-200">I wrote a custom loader for my blog posts, which processes Markdown with unified and provides typed parsing of the metadata. The metadata is used in various parts of the website.</p>
<p class="my-2 dark:text-gray-200">Tailwind has matured significantly since I last looked at it. My previous blog used Bulma, which became too difficult for me to use. Tailwind works very well for what I want to do—I can customize enough to match my vision, but it provides a framework that's easy to develop with.</p>
<p class="my-2 dark:text-gray-200">Even when I started my Jekyll website, I looked at ways to leverage Node.js's rich ecosystem, but I couldn't make it work back then. Now I can. It's powerful and exactly what I needed.</p>
<h1 id="the-new-website" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#the-new-website" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">The New Website</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<h2 id="design" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#design" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Design</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">A central feature of my design are these asset labels. You can see one in the footer. I originally created them as physical labels to place on my items, in several different sizes. The test card border was added because most printing services only do 4/0 color and not black &#x26; white directly, so I decided when I pay for all colors, I'm going to use all colors. In the future, I will write about the labels more in-depth. I was inspired to make my own asset labels from the ones created by Hexchen.</p>
<h2 id="blog-features" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#blog-features" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Blog Features</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Besides the new design, I also implemented new features:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Better Markdown support based on a custom unified processing pipeline</li>
<li>Tags for organization</li>
<li>Nice syntax highlighting based on Shiki</li>
<li>Improved URL structure</li>
<li>Header with word count</li>
<li>Link post-processing for search console optimization</li>
<li>Link-to-heading functionality</li>
</ul>
<p class="my-2 dark:text-gray-200">I dropped support for multiple languages. English-only is the way forward.</p>
<h2 id="metadata" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#metadata" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Metadata</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Schema.org and OpenGraph metadata is currently generated for posts, with room for improvement. It's okay, but it can be better. I learned a couple of things about SEO, and Google publishes an interesting guide: <a href="https://developers.google.com/search/docs/fundamentals/seo-starter-guide" class="text-blue-600 dark:text-blue-400 hover:underline">https://developers.google.com/search/docs/fundamentals/seo-starter-guide</a>. I think it's all you need to know about SEO. Further, Google has an RSS feed and blog about updates they do to the search algorithm: <a href="https://status.search.google.com/products/rGHU1u87FJnkP6W2GwMi/history" class="text-blue-600 dark:text-blue-400 hover:underline">https://status.search.google.com/products/rGHU1u87FJnkP6W2GwMi/history</a></p>
<h2 id="landing-page" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#landing-page" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Landing Page</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The landing page is completely custom-built and showcases the design elements I wanted to highlight.</p>
<h2 id="url-design" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#url-design" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">URL Design</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">I've carefully designed the URL structure to be clean and maintainable. Blog posts follow a date-based pattern that makes them easy to organize while remaining human-readable.</p>
<h2 id="migration" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#migration" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Migration</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">I made sure old links still work and forward to the new URLs. Cool URLs don't change. RSS generation is completely custom-built to ensure compatibility with existing feed readers.</p>
<h1 id="future-work" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#future-work" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Future Work</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Still, I feel my website can be improved even further, which is why, until further notice, this is a beta release. There should be no major bugs, but some features are still missing:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Header images and assets for blog posts</li>
<li>Table of Contents (TOC), abbreviations, footnotes, and sources for blog posts</li>
<li>Generalization of features for easier reuse</li>
<li>Further design improvements. I want wow-moments for the design</li>
<li>Enhanced feed generation</li>
<li>Link monitoring and archival</li>
</ul>
<h1 id="conclusion" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Conclusion</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I plan to use this current technology stack for at least the next 10 years. If my website inspires you for your own website, I'd be happy to know. If you have critical and constructive feedback, please let me know. If you don't like parts of my site, I'd appreciate hearing about it so I can continue improving.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-10-22-why-astro/</id>
    <link href="https://toranm.me/post/2025-10-22-why-astro/"/>
    <published>2025-10-22T00:00:00.000Z</published>
    <summary>I did a major revamp of this very website.</summary>
    <title>Why I Migrated from Jekyll to Astro — Introducing Website V6</title>
    <updated>2025-10-22T00:00:00.000Z</updated>
  </entry>
  <entry>
    <category term="talk"/>
    <category term="featured"/>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I gave a talk on DOI (Digital Object Identifier) at MRMCD 25. If you want to know a thing or two about DOI, check it out!</p>
<p class="my-2 dark:text-gray-200"><strong>Talk:</strong> <a href="https://talks.mrmcd.net/2025/talk/7AZNSW/" class="text-blue-600 dark:text-blue-400 hover:underline">https://talks.mrmcd.net/2025/talk/7AZNSW/</a></p>
<p class="my-2 dark:text-gray-200"><strong>Slides:</strong> <a href="https://toranm.me/assets/talks/2025-mrmcd-doi/DOI.pdf" class="text-blue-600 dark:text-blue-400 hover:underline">DOI.pdf</a></p>
<hr>
<h2 id="specifications" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#specifications" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Specifications</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><strong>ISO 26324:2025:</strong> <a href="https://www.iso.org/obp/ui/en/#!iso:std:88862:en" class="text-blue-600 dark:text-blue-400 hover:underline">https://www.iso.org/obp/ui/en/#!iso:std:88862:en</a></li>
<li><strong>DOI Handbook:</strong> <a href="https://doi.org/10.1000/182" class="text-blue-600 dark:text-blue-400 hover:underline">https://doi.org/10.1000/182</a></li>
<li><strong>DO-IRP(v3):</strong> <a href="https://www.dona.net/sites/default/files/2022-07/DO-IRPV3.0--2022-06-30_0.pdf" class="text-blue-600 dark:text-blue-400 hover:underline">DO-IRPV3.0 Specification</a></li>
<li><strong>DOIP(v2):</strong> <a href="https://www.dona.net/sites/default/files/2018-11/DOIPv2Spec_1.pdf" class="text-blue-600 dark:text-blue-400 hover:underline">DOIPv2 Specification</a></li>
</ul>
<hr>
<h2 id="references" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#references" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">References</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<ol class="list-decimal list-inside ml-4 dark:text-gray-200">
<li>Users are not the enemy: <a href="https://doi.org/10.1145/322796.322806" class="text-blue-600 dark:text-blue-400 hover:underline">10.1145/322796.322806</a></li>
<li><a href="https://doi.org/api/handles/10.1000/1000" class="text-blue-600 dark:text-blue-400 hover:underline">https://doi.org/api/handles/10.1000/1000</a></li>
<li><a href="https://www.doi.org/the-identifier/resources/factsheets/doi-system-and-the-handle-system" class="text-blue-600 dark:text-blue-400 hover:underline">DOI System and the Handle System</a></li>
<li><a href="https://www.dona.net/mpas" class="text-blue-600 dark:text-blue-400 hover:underline">DONA MPAs</a></li>
<li><a href="https://www.dona.net/sites/default/files/2022-07/DO-IRPV3.0--2022-06-30_0.pdf" class="text-blue-600 dark:text-blue-400 hover:underline">DO-IRP(v3) Specification</a></li>
<li><a href="https://www.doi.org/resources/2006_05_02_Kahn_Framework.pdf" class="text-blue-600 dark:text-blue-400 hover:underline">Kahn Framework (2006)</a></li>
<li><a href="https://www.doi.org/the-foundation/about-us/" class="text-blue-600 dark:text-blue-400 hover:underline">About the DOI Foundation</a></li>
<li><a href="https://www.dona.net/mpas" class="text-blue-600 dark:text-blue-400 hover:underline">DONA MPAs</a></li>
<li><a href="https://handle.net" class="text-blue-600 dark:text-blue-400 hover:underline">Handle.Net</a></li>
<li><a href="https://doi.org/10.1000/182" class="text-blue-600 dark:text-blue-400 hover:underline">DOI Handbook</a></li>
<li><a href="https://doi.org/10.64000/wd6rx-vpq73" class="text-blue-600 dark:text-blue-400 hover:underline">https://doi.org/10.64000/wd6rx-vpq73</a></li>
<li><a href="https://www.crossref.org/blog/what-do-we-know-about-dois/" class="text-blue-600 dark:text-blue-400 hover:underline">What do we know about DOIs?</a></li>
<li>Crossref Documentation:
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://www.crossref.org/documentation/reports/participation-reports/" class="text-blue-600 dark:text-blue-400 hover:underline">Participation Reports</a></li>
<li><a href="https://www.crossref.org/members/prep/" class="text-blue-600 dark:text-blue-400 hover:underline">Publisher Research &#x26; Education Program</a></li>
</ul>
</li>
<li><a href="https://www.crossref.org/blog/2025-public-data-file-now-available/" class="text-blue-600 dark:text-blue-400 hover:underline">2025 Public Data File Now Available</a></li>
<li><a href="https://crossref.gitlab.io/engineering/" class="text-blue-600 dark:text-blue-400 hover:underline">Crossref Engineering</a></li>
<li>Fee Models:
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://datacite.org/fee-model/" class="text-blue-600 dark:text-blue-400 hover:underline">DataCite Fee Model</a></li>
<li><a href="https://www.crossref.org/fees/" class="text-blue-600 dark:text-blue-400 hover:underline">Crossref Fees</a></li>
<li><a href="https://www.crossref.org/blog/changing-fees-to-increase-equity-and-reduce-complexity/" class="text-blue-600 dark:text-blue-400 hover:underline">Changing Fees to Increase Equity</a></li>
</ul>
</li>
<li><a href="https://www.doi.org/the-identifier/resources/factsheets/doi-resolution-documentation" class="text-blue-600 dark:text-blue-400 hover:underline">DOI Resolution Documentation</a></li>
<li><a href="https://shortdoi.org/" class="text-blue-600 dark:text-blue-400 hover:underline">ShortDOI.org</a></li>
<li><a href="https://doi.org/10.17487/rfc7669" class="text-blue-600 dark:text-blue-400 hover:underline">RFC 7669</a></li>
<li><a href="https://www.doi.org/the-identifier/resources/factsheets/doi-system-and-the-isbn-system" class="text-blue-600 dark:text-blue-400 hover:underline">DOI System and the ISBN System</a></li>
<li>DOI-like Strings and Fake DOIs:
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://nickwalker.us/blog/2024/acm-dl-fake-dois/" class="text-blue-600 dark:text-blue-400 hover:underline">Nick Walker: ACM DL Fake DOIs</a></li>
<li><a href="https://www.crossref.org/blog/doi-like-strings-and-fake-dois/" class="text-blue-600 dark:text-blue-400 hover:underline">DOI-like Strings and Fake DOIs</a></li>
<li><a href="https://www.doi.org/more-info" class="text-blue-600 dark:text-blue-400 hover:underline">DOI</a></li>
</ul>
</li>
</ol>]]>
    </content>
    <id>https://toranm.me/post/2025-09-12-doi-beyond-the-basics/</id>
    <link href="https://toranm.me/post/2025-09-12-doi-beyond-the-basics/"/>
    <published>2025-09-12T00:00:00.000Z</published>
    <summary>I gave a talk on DOI (Digital Object Identifier) at MRMCD 25. If you want to know a thing or two about DOI, check it out!</summary>
    <title>DOI: Beyond the Basics</title>
    <updated>2025-09-12T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">Android App development was a intermediate step for me into the world of programming. I have been developing Android apps since at least 2015.
I initially got into programming as I wanted to create Minecraft mods, thus I learned Java. Latter, I transitioned to developing my own Games, first with Slick2D and then with LibGDX. LibGDX is cross-platform and allows for developing desktop and mobile games from a single codebase. I did not own an Android device when I started developing for it.</p>
<h1 id="simple-pay" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#simple-pay" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Simple Pay</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Simple Pay was developed as a Smartphone based payment solution for a "School-as-a-State" project at the Helmholtz Gymnasium. I was into cryptocurrency at the time and wanted to create a digital wallet for students to use within the school ecosystem. Additionally, it had the goal to be used without internet access.
Simple Pay had a Blockchain-based approach and no server-side components, but with my friends and me acting as a central authority to validate transactions. Transactions were performed by scanning QR codes and connecting to each other's devices via Bluetooth or Wi-Fi Direct. It used a lot of cryptography, that I did not understand fully at the time. My understanding of cryptography at the time was very superficial. It was fun to develop, I learned a lot about Android development, I wanted to make the App comparable to existing simple yet highly engineered Android apps.</p>
<h1 id="drink-manager" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#drink-manager" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Drink Manager</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Drink Manager is an app I developed to have an overview of Cocktail recipes and Cocktails overall. It's based on <a href="https://www.thecocktaildb.com/" class="text-blue-600 dark:text-blue-400 hover:underline">CocktailDB</a>, a free API for cocktail recipes, but I ended up just downloading the data and storing it locally. The app was developed using Flutter. The App allows users to browse Cocktails by Categories, such as IBA classification, and by ingredients. Additionally, users can create shopping lists for the ingredients they need to make their favorite cocktails.</p>
<h1 id="rent-and-lend" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#rent-and-lend" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Rent and Lend</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Rent and Lend was developed during my time at university in the Software Engineering Practice module. Its basically "Kleinanzeigen" for borrowing and lending items within a local community. It consisted of a frontend and backend, with the frontend built using Kotlin and the backend using Spring Boot. We used OpenAPI to document our RESTful API. The app was developed using the waterfall model, which is a requirement for the module.</p>
<h1 id="hotinert_two" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#hotinert_two" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Hotinert_two</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Hotinert_two was developed for the Mobile computing and IoT module at university. It is also developed using flutter and is an app for the TECO affiliated Earable platform, which are earphones with integrated sensors. The app is a labyrinth game that uses the sensors to detect head movements and control the player's movement through the maze. Its inspired by the Among Us minigame "Weather Node". This game was developed in conjunction with a Tetris clone webapp that was controlled by the phones yaw and pitch sensors.</p>
<h1 id="glass-authenticator" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#glass-authenticator" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Glass Authenticator</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Glass Authenticator is a replication of authentication schemes [0] for the Google Glass, which runs on Android. It provided three authentication methods: voice commands, head movement and touch. It additionally provided an admin panel to setup a user study and was configurable with QR codes. The Google Glass has very poor processing power, even these simple schemes had performance issues and it required extensive optimization to run smoothly.</p>
<p class="my-2 dark:text-gray-200">[0] Y. Li, Y. Cheng, W. Meng, Y. Li and R. H. Deng, "Designing Leakage-Resilient Password Entry on Head-Mounted Smart Wearable Glass Devices," in IEEE Transactions on Information Forensics and Security, vol. 16, pp. 307-321, 2021, doi: 10.1109/TIFS.2020.3013212.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-08-17-apps-i-programmed/</id>
    <link href="https://toranm.me/post/2025-08-17-apps-i-programmed/"/>
    <published>2025-08-17T00:00:00.000Z</published>
    <summary>Android App development was a intermediate step for me into the world of programming. I have been developing Android apps since at least 2015.
I initially got into programming as I wanted to create Minecraft mods, thus I learned Java. Latter, I transitioned to developing my own Games, first with Slick2D and then with LibGDX. LibGDX is cross-platform and allows for developing desktop and mobile games from a single codebase. I did not own an Android device when I started developing for it.</summary>
    <title>Apps I Programmed</title>
    <updated>2025-08-17T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I bought a Pixel 9 Pro right after it was released. It now shows a vertical pink line on the display. A short rant.</p>
<p class="my-2 dark:text-gray-200">I am pretty happy with this phone, it's the first true flagship I have ever owned. I think it's security features are the best on the market, I like having emergency satellite conenectivity, and the camera is great. I also like the design and Android is a must for smartphones for me.
The display is also great, but it now has a defect. A vertical pink line has appeared on the display.
I called a repair shop working with Google and they said that the display needs to be replaced, but they don't have the parts yet. Oh well.</p>
<p class="my-2 dark:text-gray-200">Update: I went to another repair shop and they also did not have the parts. This is getting frustrating. I contacted Google support again and they sent me a replacement phone, but I had to make a deposit.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-07-01-p9p-display-issue/</id>
    <link href="https://toranm.me/post/2025-07-01-p9p-display-issue/"/>
    <published>2025-07-01T00:00:00.000Z</published>
    <summary>I bought a Pixel 9 Pro right after it was released. It now shows a vertical pink line on the display. A short rant.</summary>
    <title>Pixel 9 Pro Display Issue</title>
    <updated>2025-07-01T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">Centrifugal effects describes when a subunit of an organization pulls away from the main organization. It's a concept I came across in the context of universities, but it can apply to any organization. I think it is a useful concept to understand and want to proliferate it.</p>
<p class="my-2 dark:text-gray-200">These effects can occur when the subunit has strong leadership and culture, is able to generate / acquire and manage resources independently or has stronger relationships with the outside world than the main organization.
The subunit can then become more independent and may even start to compete with the main organization. This can lead to a loss of control for the main organization and weaken other subunits, which may lead to the main organization losing its relevance.
These strong subunits may be truly able to operate some parts better than the main organization. They may start to do more and more things independently and pull away resources from the main organization. Even though this use of resources may result in better outcomes compared to the main organization allocating the resources and letting the subunits operate under its umbrella, it can lead to a fragmentation of the organization and it may hinder applying the successful strategies to the whole organization. Also it may be that other subunits operate in a more difficult environment, so pulling away resources from them may lead to a disproportionate reduction in their performance.</p>
<p class="my-2 dark:text-gray-200">An organization in which one subunit performs exceptional, while straining the other subunits is not healthy on the long run. On a short time scale it can be beneficial, the strong subunit can be a source of innovation and success, but these strategies need to be applied to the whole organization.
The strong subunit may also be able to provide resources and training to the main organization. The subunit must still find value in the main organization, otherwise it will see it as a burden, red tape and parasitism. The other subunits may also feel neglected and may not be able to compete with the strong subunit, leading to a loss of morale and motivation.</p>
<p class="my-2 dark:text-gray-200">To conclude, centrifugal effects can be dangerous and control measures need to taken to mitigate them. The main organization needs to ensure that the subunits are aligned with its goals and that they are not pulling away resources from the main organization. On a short time scale centrifugal effects can be beneficial, but on the long run, the main organization needs to reevaluate itself and focus on its core competencies and the essential.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-06-23-centrifugal-effects/</id>
    <link href="https://toranm.me/post/2025-06-23-centrifugal-effects/"/>
    <published>2025-06-23T00:00:00.000Z</published>
    <summary>Centrifugal effects describes when a subunit of an organization pulls away from the main organization. It's a concept I came across in the context of universities, but it can apply to any organization. I think it is a useful concept to understand and want to proliferate it.</summary>
    <title>Centrifugal Effects</title>
    <updated>2025-06-23T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I recently bought a <a href="https://en.wikipedia.org/wiki/Lava_lamp" class="text-blue-600 dark:text-blue-400 hover:underline">lava lamp</a> and I was inspired to create a website that showcases a colorful light. Check it out on <a href="https://decolight.toranm.me" class="text-blue-600 dark:text-blue-400 hover:underline">decolight.toranm.me</a>.</p>
<p class="my-2 dark:text-gray-200">On this website, you can find a colorful animation of blobs. It's based on React Bits <a href="https://www.reactbits.dev/animations/meta-balls" class="text-blue-600 dark:text-blue-400 hover:underline">Meta Balls</a> with further modifications. Feel free to check it out and let me know what you think! I am especially interested in adding new effects, let me know if you have any ideas. Put it on a projector!</p>]]>
    </content>
    <id>https://toranm.me/post/2025-06-08-decolight/</id>
    <link href="https://toranm.me/post/2025-06-08-decolight/"/>
    <published>2025-06-08T00:00:00.000Z</published>
    <summary>I recently bought a lava lamp and I was inspired to create a website that showcases a colorful light. Check it out on decolight.toranm.me.</summary>
    <title>Introducing: Decolight - A Colorful Light</title>
    <updated>2025-06-08T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I noticed a recurring theme that I thought about: It's the concept of "highly refined things". A "thing" can be anything, I am mainly thinking about products, food items, software but also ideas. By "highly refined" I mean that the item was augmented upon from its basic form.</p>
<p class="my-2 dark:text-gray-200">Think about inventing the croissant. That's the basic form, and now you add chocolate, nuts or whatever or you add lye and make a pretzel croissant. That's the highly refined thing. Another example is in software: You have a basic text editor and it is really useful, but then take Word, which adds layers and layers of features, enterprise features and so on. The core is still a text editor, but it was extended so much that other text editors are not even comparable.</p>
<p class="my-2 dark:text-gray-200">In a way inventing the basic form is harder and more creative than the highly refined thing. It is good, because it inspired a lot of more innovation on top of it. But the basic form might not become the most popular thing or the most influential thing. The highly refined thing might also not be so intellectually interesting, for example you have a basic form that is really takes a lot of brainpower to create, and then you scale it up, but repeating the same thing over and over and glue it together.</p>
<p class="my-2 dark:text-gray-200">In a way, highly refining something and improving the basic form so much is creating a new thing. The croissant is a refined bread roll. The difference between bread roll and croissant and croissant and chocolate croissant is the depth on which it was refined. So in a way sticking existing ideas on top of each other is a way to create a new thing.</p>
<p class="my-2 dark:text-gray-200">To conclude, I think sometimes highly refined things can be boring, but then again there are also highly refined things that apply smarter ideas and thus are more interesting. It's really the quality of the refinement that matters. Finding refinements that inspire more refinements on top are the most interesting. Sometimes you just gotta glue things together and make it work. But if each of the layers is not so smart, then the whole thing is not so interesting.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-05-17-highly-refined-things/</id>
    <link href="https://toranm.me/post/2025-05-17-highly-refined-things/"/>
    <published>2025-05-17T00:00:00.000Z</published>
    <summary>I noticed a recurring theme that I thought about: It's the concept of &quot;highly refined things&quot;. A &quot;thing&quot; can be anything, I am mainly thinking about products, food items, software but also ideas. By &quot;highly refined&quot; I mean that the item was augmented upon from its basic form.</summary>
    <title>Highly Refined Things</title>
    <updated>2025-05-17T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">A fun and inspiring way to experience the web: browse the websites of architects, brick and mortar ones, not software.</p>
<p class="my-2 dark:text-gray-200">What makes it fascinating is that their web design often mirrors their architectural style. And of course, the architecture itself is amazing to look at. You start noticing recurring themes within a single architect’s style, and the differences between firms. It's like visual storytelling, layered in both buildings and websites.</p>
<p class="my-2 dark:text-gray-200">Here are a few architecture firms whose work has influenced me personally:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://www.herzogdemeuron.com/" class="text-blue-600 dark:text-blue-400 hover:underline">Herzog &#x26; de Meuron</a> (Basel): <em>Elbphilharmonie</em>, <em>Allianz Arena</em>, <em>Roche Towers</em></li>
<li><a href="https://sehw-architektur.de/" class="text-blue-600 dark:text-blue-400 hover:underline">SEHW</a> (Berlin): New Fraunhofer SIT building “Eisberg”</li>
<li><a href="https://www.bp-da.de/" class="text-blue-600 dark:text-blue-400 hover:underline">Bernhardt + Partner</a> (Darmstadt): Informatikom 1 &#x26; 2</li>
<li><a href="https://www.wernersobek.de/" class="text-blue-600 dark:text-blue-400 hover:underline">Werner Sobek</a> (Stuttgart): Facade of Informatikom 1</li>
<li><a href="https://www.meyer-architekten.de/" class="text-blue-600 dark:text-blue-400 hover:underline">Meyer Architekten</a> (Düsseldorf): Modernisation of the <em>Math Building</em> in Karlsruhe</li>
<li><a href="https://www.foga.com/" class="text-blue-600 dark:text-blue-400 hover:underline">Gehry Partners</a> (Los Angeles): DZ Bank at Pariser Platz in Berlin, Vitra Design Museum unfortunately, not much on their website</li>
<li><a href="https://hundertwasser.com/" class="text-blue-600 dark:text-blue-400 hover:underline">Hundertwasser</a>: Bahnhof Uelzen, Die Wald-Spirale in Darmstadt</li>
<li><a href="https://www.fosterandpartners.com/" class="text-blue-600 dark:text-blue-400 hover:underline">Foster + Partners</a> (London): Reichstag Berlin renovation, Commerzbank Tower, Apple Park</li>
</ul>]]>
    </content>
    <id>https://toranm.me/post/2025-05-05-architecture-on-the-web/</id>
    <link href="https://toranm.me/post/2025-05-05-architecture-on-the-web/"/>
    <published>2025-05-05T00:00:00.000Z</published>
    <summary>A fun and inspiring way to experience the web: browse the websites of architects, brick and mortar ones, not software.</summary>
    <title>Browsing Websites of Architects</title>
    <updated>2025-05-05T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I use Google Fit to track my health data extensively since the end of 2023. In the meantime, Google released Health Connect, which is a platform to store health data from different providers instead of them using the Google Fit API. In 2024, I got a new Phone (P9P), but my historical Google Fit data is not showing up on my new phone's Google Fit app. Now I found a workaround.</p>
<p class="my-2 dark:text-gray-200">The workaround is to install Google Fit in a work profile. I use Shelter to manage my work profile. I installed Google Fit in the work profile and then set up my Google account and can see my historical data. I think this has to do with Health Connect. Somehow, Google Fit is not able to write historical data to Health Connect, but the data is in the cloud storage dedicated for Google Fit. The work profile does not have access to Health Connect, so Google Fit fetches the data from the original source, but the new data is also there. When I look at the data in Health Connect, I can see that the historical data is not there. It's not optimal, because now I have two instances of Google Fit and had to sign in to my Google account on the work profile. But at least I can see my historical data again.</p>
<p class="my-2 dark:text-gray-200">The root cause of the problem is that Google Fit is not able to write historical data to Health Connect. If anyone has a solution to this, please let me know.</p>
<p class="my-2 dark:text-gray-200">Also, I think Google Fit does a bad job at displaying time series data because you can only select to view weekly, monthly, three-monthly, or yearly data, which is paginated according to the selected time period. I would like to view the data in a continuous time series together with a regression line and markings for significant events.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-05-04-health-connect/</id>
    <link href="https://toranm.me/post/2025-05-04-health-connect/"/>
    <published>2025-05-04T00:00:00.000Z</published>
    <summary>I use Google Fit to track my health data extensively since the end of 2023. In the meantime, Google released Health Connect, which is a platform to store health data from different providers instead of them using the Google Fit API. In 2024, I got a new Phone (P9P), but my historical Google Fit data is not showing up on my new phone's Google Fit app. Now I found a workaround.</summary>
    <title>What's going on with Health Connect?</title>
    <updated>2025-05-04T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">Cro is a German rapper and producer. He is known for blending rap with pop and has paved the way for rap music in the mainstream. I think he has cool songs.</p>
<p class="my-2 dark:text-gray-200">Disclaimer: Don't get me wrong, Cro is musically very talented, but has songs that cover trivial topics.</p>
<p class="my-2 dark:text-gray-200">One of his first popular songs, from 2012, is "Easy" and it is genius. Its certified 3x platinum in Germany. The song is about Cro being laid-back, but interacting with a woman called Isi, who is not laid-back and Cro is happy that they split up. The song samples "Sunny" by Bobby Hebb. the lyrics "Easy" are replaced with a sample from this song. What I find interesting is that the song is this sample, it sounds good and also the structure. It just consists of Intro, Verse, Hook and Outro, which is unusual for a pop song.
For the ten-year anniversary of the song Cro rerecorded the song and released remixes. I like the remix from Roosevelt.</p>
<p class="my-2 dark:text-gray-200">His albums "Roap", "MTV Unplugged: Cro" and "Melodie" capture a similar vibe. The songs are catchy.</p>
<p class="my-2 dark:text-gray-200">Before his success, Cro was rapping in the underground. He did battle rap with Reimliga Battle Arena (RBA) under the name "Lyr1c". Many artists have been there including Kollegah and Juju. Cro later returned to the RBA in 2015 and battled against BlaDesa. In particular, I like the Rückrunde 2 from Cro, where Cro has a funny line about "Notaufnahme", his opponent only covering superficial topics "that could be from Cro" and him referencing his song "Whatever".</p>
<p class="my-2 dark:text-gray-200">Cro also evolved his sound. His album "tru." is a departure from his previous work. To me it sounds more mature, introspective and experimental. The song "Unendlichkeit" is a good example of this. It's about having reached the top and continuing to strive for more. Another song, "Baum", also has a more serious tone.</p>
<p class="my-2 dark:text-gray-200">His melodies are catchy and still sound fresh. German newcomer Zah1de used "Einmal um die Welt" and replaced the Verses with her own lyrics.</p>
<p class="my-2 dark:text-gray-200">Cro in a way stayed approachable for his fans. There was a story about a fan of Culcha Candela who wanted them to play at her birthday party. The band makes snarky remarks about it and said would you ask Cro or Drake to play? Later Cro reached out to her and offered to play at her birthday party.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-04-29-cro-das-genie/</id>
    <link href="https://toranm.me/post/2025-04-29-cro-das-genie/"/>
    <published>2025-04-29T00:00:00.000Z</published>
    <summary>Cro is a German rapper and producer. He is known for blending rap with pop and has paved the way for rap music in the mainstream. I think he has cool songs.</summary>
    <title>Cro das Genie</title>
    <updated>2025-04-29T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200"><a href="https://eff.org/deeplinks/2025/03/meet-rayhunter-new-open-source-tool-eff-detect-cellular-spying" class="text-blue-600 dark:text-blue-400 hover:underline">Rayhunter</a> by EFF is an open-source tool to detect cellular spying, aka IMSI catchers, aka Stingrays. This tool monitors the cellular network and detects anomalies. Specifically, it looks for IMSI requests, 2G downgrade, SIB types 6 and 7, and null cipher. It is originally written for the Orbic RC400L, which is hard to purchase in Europe. GitHub user m0veax has created a <a href="https://github.com/m0veax/tplink_m7350" class="text-blue-600 dark:text-blue-400 hover:underline">fork</a> and documentation to bring Rayhunter to the TP-Link M7350, which is available in Europe.</p>
<p class="my-2 dark:text-gray-200"><em>UPDATE</em>: This post has been written in April 2025. In February 2026, I updated to the latest version of Rayhunter, which has made quite a lot of improvements. Read about it in my follow-up post <a href="https://toranm.me/post/2026-02-07-Rayhunter-2" class="text-blue-600 dark:text-blue-400 hover:underline">here</a>.</p>
<h1 id="rooting-the-tp-link-m7350-v8" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#rooting-the-tp-link-m7350-v8" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Rooting the TP-Link M7350 v8</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Last time I heard about TP-Link, it was because TP-Links security is a joke. TP-Link routers are only good to install OpenWrt on, because they are so easy to root; don't use them for anything serious. The same is true for their modems.</p>
<p class="my-2 dark:text-gray-200">There exist multiple hardware revisions for the device, with v3 and v4 having good <a href="https://github.com/m0veax/tplink_m7350/blob/main/open-v3.sh" class="text-blue-600 dark:text-blue-400 hover:underline">rooting</a> <a href="https://github.com/m0veax/tplink_m7350/blob/main/open-v4.sh" class="text-blue-600 dark:text-blue-400 hover:underline">scripts</a>. I have a v8, which can be rooted using the "Chrome hack". GitHub user Ping2A discovered that the following JavaScript snippet opens telnet:</p>
<pre class="whitespace-pre-wrap overflow-auto dark:bg-gray-800" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212" tabindex="0"><code><span class="line"><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">Globals</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">models</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#B07D48;--shiki-dark:#BD976A">PTModel</span><span style="--shiki-light:#999999;--shiki-dark:#666666">.</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665">add</span><span style="--shiki-light:#999999;--shiki-dark:#666666">({</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965">applicationName</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">telnet</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965"> enableState</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91"> 1</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965"> entryId</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91"> 1</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965"> openPort</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">2300-2400</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965"> openProtocol</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">TCP</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965"> triggerPort</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">$(busybox telnetd -l /bin/sh)</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">,</span><span style="--shiki-light:#998418;--shiki-dark:#B8A965"> triggerProtocol</span><span style="--shiki-light:#999999;--shiki-dark:#666666">:</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77"> "</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D">TCP</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77">"</span><span style="--shiki-light:#999999;--shiki-dark:#666666">})</span></span></code></pre>
<p class="my-2 dark:text-gray-200">Essentially, it is a system command injection vulnerability in the admin panel.</p>
<p class="my-2 dark:text-gray-200">Telneting into the device shows we are root. Looking around, the system does not inspire confidence in terms of TP-Link's security; the device runs Linux 3.18.20 and a "tp-link-ca" certificate is installed, which uses 2048-bit RSA and has a validity until 2068.</p>
<p class="my-2 dark:text-gray-200">To get better shell access, <code>adbd</code> can be enabled:</p>
<details class="collapsible-code-block my-4 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden"><summary class="collapsible-code-summary cursor-pointer select-none py-2 px-4 bg-gray-100 dark:bg-gray-800 hover:bg-gray-200 dark:hover:bg-gray-700 rounded-t-lg font-mono text-sm text-gray-600 dark:text-gray-400 flex items-center gap-2 transition-colors" data-collapsed-text="Show code (22 lines)" data-expanded-text="Hide code (22 lines)"><span class="collapsible-code-chevron inline-block transition-transform duration-200" aria-hidden="true">▶</span><span class="collapsible-code-text">Show code (22 lines)</span></summary><div class="collapsible-code-content"><pre class="whitespace-pre-wrap overflow-auto dark:bg-gray-800" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212" tabindex="0" data-collapsible="true" data-line-count="22"><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">/ # usb_composition</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">usb_composition</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">boot hsusb composition: 902B</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">boot hsic composition: empty</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">Choose Composition by Pid:</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">   &#x3C;snip></span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">   902B -       RNDIS + ADB + Mass Storage</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">   &#x3C;snip></span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">   tplink -     RNDIS + Mass Storage:ECM + Mass Storage(User Mode)</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">   tplink_rndis -       RNDIS + Mass Storage:ECM + Mass Storage(User Mode)</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">Pid number : 902B</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">902B</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">Choose core: y - hsic, n - hsusb  ? (y/n)n</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">n</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">Would you like it to be the default composition ? (y/n)y</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">y</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">Would you like the composition to change immediately? (y/n)y</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">y</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">Are you performing the composition switch from adbd? (y/n)n</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">n</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">Switching to composition number 0x902B</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">/ # Starting adbd: done</span></span></code></pre></div></details>
<h1 id="uploading-rayhunter" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#uploading-rayhunter" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Uploading Rayhunter</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">A custom build of Rayhunter is provided by m0veax; I use this version. Some of the changes have been added upstream; I have not tested them.</p>
<pre class="whitespace-pre-wrap overflow-auto dark:bg-gray-800" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212" tabindex="0"><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">adb push rayhunter.config</span></span>
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF">adb push rayhunter-deamon</span></span></code></pre>
<h1 id="starting-rayhunter" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#starting-rayhunter" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Starting Rayhunter</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Rayhunter states that it is recommended to install a SIM card, but it does not need to be online. Luckily, I had my old Vodafone SIM card lying around, which I migrated to eSIM in December to be able to use a Chaos Card. Thus, I did not need to go to the Handyshop. The TP-Link did not take my PIN, so I plugged it into my phone, removed the PIN, and put it back in the TP-Link.</p>
<p class="my-2 dark:text-gray-200">On ADB, Rayhunter can be started:</p>
<pre class="whitespace-pre-wrap overflow-auto dark:bg-gray-800" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212" tabindex="0"><code><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666">#</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE"> /media/card/rayhunter-daemon /data/rayhunter/config.toml</span></span></code></pre>
<h1 id="rayhunter-web-interface" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#rayhunter-web-interface" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Rayhunter Web Interface</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">On port 8080, Rayhunter serves a web interface, showing information about the software itself and the analysis.</p>
<p class="my-2 dark:text-gray-200"><img src="https://toranm.me/assets/2025-04-09-Rayhunter/rayhunter_webinterface.png" alt="Screenshot of Rayhunter Webinterface" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<p class="my-2 dark:text-gray-200">The PCAPs can be downloaded and analyzed in Wireshark.</p>
<p class="my-2 dark:text-gray-200"><img src="https://toranm.me/assets/2025-04-09-Rayhunter/wireshark.png" alt="Screenshot of Wireshark of PCAPs" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h1 id="conclusion" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Conclusion</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Lucky for me but also boringly, I have not yet encountered a warning. I will continue to run the software, especially when I am in Hamburg in December again. I have encountered decoding errors due to "CHOICE Addition not supported yet" and "ignoring unhandled log type: WcdmaSignallingMessage". Furthermore, I thank everyone involved with getting Rayhunter on the TP-Link and my colleagues for gifting me the device. In the future, I hope to see the patches upstream and new features added. Finally, I recommend installing an SD card to store the logs and PCAPs.</p>
<h1 id="sources" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#sources" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Sources</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://github.com/EFForg/rayhunter" class="text-blue-600 dark:text-blue-400 hover:underline">EFF Rayhunter</a></li>
<li><a href="https://github.com/m0veax/rayhunter-tplink-m7350" class="text-blue-600 dark:text-blue-400 hover:underline">m0veax Rayhunter port</a></li>
<li><a href="https://github.com/EFForg/rayhunter/issues/186" class="text-blue-600 dark:text-blue-400 hover:underline">Issue 186</a> and <a href="https://github.com/EFForg/rayhunter/issues/106" class="text-blue-600 dark:text-blue-400 hover:underline">Issue 106</a></li>
<li><a href="https://github.com/m0veax/tplink_m7350" class="text-blue-600 dark:text-blue-400 hover:underline">m0veax research on TP-Link M7350</a></li>
</ul>]]>
    </content>
    <id>https://toranm.me/post/2025-04-09-rayhunter-on-tp-link-m7350-v8/</id>
    <link href="https://toranm.me/post/2025-04-09-rayhunter-on-tp-link-m7350-v8/"/>
    <published>2025-04-09T00:00:00.000Z</published>
    <summary>Rayhunter by EFF is an open-source tool to detect cellular spying, aka IMSI catchers, aka Stingrays. This tool monitors the cellular network and detects anomalies. Specifically, it looks for IMSI requests, 2G downgrade, SIB types 6 and 7, and null cipher. It is originally written for the Orbic RC400L, which is hard to purchase in Europe. GitHub user m0veax has created a fork and documentation to bring Rayhunter to the TP-Link M7350, which is available in Europe.</summary>
    <title>Rayhunter on TP-Link M7350 v8</title>
    <updated>2025-04-09T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I noticed today that I have been attending the Gulaschprogrammiernacht (GPN) for 10 years now.</p>
<p class="my-2 dark:text-gray-200">I specifically remember the talk <a href="https://entropia.de/GPN14:What%27s_cooking_in_GNOME%3F" class="text-blue-600 dark:text-blue-400 hover:underline">"What's cooking in GNOME?"</a> by <a href="https://blogs.gnome.org/muelli/" class="text-blue-600 dark:text-blue-400 hover:underline">Tobias Mueller</a> about the GNOME project at GPN14. He talked about Gnome doing releases every 6 months, while the distributions do releases every half a year (27:30) and how Gnome software compiles compared to enlightenment. Also in this talk, he mentioned the GUADEC in 2014 in Strasbourg, which I visited briefly as I was in the city with my school class at the time.
It is amazing to think that I have given a talk at GPN in 2024 at the same stage as Tobias did 10 years ago.
In some way I am impressed by this realization.</p>
<p class="my-2 dark:text-gray-200">I probably attended previous GPNs, but I don't have any specific memories of them. I am happy to be part of organizing the event now. I look forward to the next 10 years of GPN and the many more events to come.</p>
<p class="my-2 dark:text-gray-200">Update 27.06.2025:
I remembered another GPN I attended, it must have been GPN8 in 2009. I remember because it was during Ursula von der Leyens tenure as Minister of Family Affairs. She proposed to force ISPs to present literal "Stop Signs" to users when they visit illegal websites. The people at GPN were not happy about this and people were printing out stop signs and putting them on other people's signs as a joke <a href="https://www.flickr.com/photos/mumpfpuffel/3672560820/in/album-72157620487240503/" class="text-blue-600 dark:text-blue-400 hover:underline">like this</a>.</p>
<p class="my-2 dark:text-gray-200">This post should really be titled "16 Years of GPN".</p>]]>
    </content>
    <id>https://toranm.me/post/2025-04-02-10-years-of-gpn/</id>
    <link href="https://toranm.me/post/2025-04-02-10-years-of-gpn/"/>
    <published>2025-04-02T00:00:00.000Z</published>
    <summary>I noticed today that I have been attending the Gulaschprogrammiernacht (GPN) for 10 years now.</summary>
    <title>10 Years of GPN</title>
    <updated>2025-04-02T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">When you start a new domain, you need to do routine tasks.</p>
<p class="my-2 dark:text-gray-200">Before you acquire a domain, check the history of the domain.</p>
<ol class="list-decimal list-inside ml-4 dark:text-gray-200">
<li><a href="https://archive.org/web/" class="text-blue-600 dark:text-blue-400 hover:underline">Wayback Machine</a></li>
<li>Check the domain on <a href="https://www.virustotal.com/" class="text-blue-600 dark:text-blue-400 hover:underline">VirusTotal</a></li>
<li>Also check certificate transparency logs.</li>
</ol>
<p class="my-2 dark:text-gray-200">After you acquire the domain:</p>
<ol class="list-decimal list-inside ml-4 dark:text-gray-200">
<li>Add DNS
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Add MX records</li>
<li>Add SPF, DKIM, DMARC</li>
<li>Add A records</li>
<li>Add AAAA records</li>
<li>CAA records</li>
</ul>
</li>
<li>Add to Have I Been Pwned</li>
<li>Setup RedSift Monitoring</li>
<li>Add to Google Search Console</li>
<li>Add to Google Postmaster</li>
<li>Add to HSTS Preload List</li>
<li>Enable DNSSEC</li>
</ol>]]>
    </content>
    <id>https://toranm.me/post/2025-04-01-new-domain-checklist/</id>
    <link href="https://toranm.me/post/2025-04-01-new-domain-checklist/"/>
    <published>2025-04-01T00:00:00.000Z</published>
    <summary>When you start a new domain, you need to do routine tasks.</summary>
    <title>New Domain Checklist</title>
    <updated>2025-04-01T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">Passkeys are a new authentication method that is gaining popularity. They are designed to be more secure and easier to use than traditional passwords. This scheme is developed by the FIDO Alliance, who also offer a database of certified passkey vendors. This database is called the FIDO Metadata Service (MDS).</p>
<h1 id="introduction-to-passkeys" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#introduction-to-passkeys" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Introduction to Passkeys</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Passkey is the user-friendly name for FIDO2 Credentials. This scheme is based on public key cryptography. The basic idea is that the user generates a key pair, the server stores the public key and when the user wants to authenticate, the server sends a challenge to the user. The user signs the challenge with the private key and sends it back to the server.
To make it work two specifications are used: WebAuthn and CTAP2. WebAuthn is a W3C standard that defines the API for web applications to use FIDO2 credentials. CTAP2 is a protocol that defines how the client (e.g. a browser) communicates with the authenticator (e.g. a hardware token or a mobile phone) over NFC, BLE or USB.</p>
<h1 id="advantages-of-passkeys" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#advantages-of-passkeys" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Advantages of Passkeys</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">The sales pitch of passkeys is that they are phishing resistant, resistant to stuffing, can optionally have a second factor built in, always have high entropy, but don't require the user to remember anything. Of course, these things are implementation dependent. A CVE was published which allows phishing. See this writeup on <a href="https://mastersplinter.work/research/passkey/" class="text-blue-600 dark:text-blue-400 hover:underline">CVE-2024-9956</a> by Tobia Righi.</p>
<h1 id="attestation-and-the-metadata-service" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#attestation-and-the-metadata-service" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Attestation and the Metadata Service</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Attestation is how the authenticator proves to the server that it is a genuine, secure, device. The authenticator uses a special keypair to sign the attestation statement, ensuring that the credential keypair was generated on this device. The server checks the attestation signature against public keys of the vendor. For this FIDO offers the MDS. Olivier Potonniée has developed a good explorer website, which is available at <a href="https://opotonniee.github.io/fido-mds-explorer/" class="text-blue-600 dark:text-blue-400 hover:underline">FIDO MDS Explorer</a>.
Devices can be FIDO certified, ensuring functionality and some security properties. Read more about the certification in <a href="https://fidoalliance.org/certification/" class="text-blue-600 dark:text-blue-400 hover:underline">FIDO Certification Program</a>. Certification is done by accredited labs. These labs must be accredited according to ISO/IEC 17025 and hold additional accreditation such as Common Criteria (CC) or FIPS 140-3. The labs are listed <a href="https://fidoalliance.org/certification/authenticator-certification-levels/accredited-security-laboratories/" class="text-blue-600 dark:text-blue-400 hover:underline">here</a>. The MDS explorer shows the certification status of the devices.</p>
<h1 id="analyzing-the-mds" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#analyzing-the-mds" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Analyzing the MDS</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I will only focus on certified devices. <a href="https://opotonniee.github.io/fido-mds-explorer/" class="text-blue-600 dark:text-blue-400 hover:underline">FIDO MDS Explorer</a> is used as a source for the data.</p>
<h2 id="the-good" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#the-good" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">The Good</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">No vendor currently offers a device that is certified at the highest level L3. There are currently 9 vendors with L2 devices. L2 requires the use of a secure element, thus software implementations are not allowed.
From these, some are not purchasable, either because they are not available or because they are not sold to consumers.
The following vendors are looked at in more details: Feitian, Token2, TrustKey and Yubico.</p>
<h3 id="yubico" class="group relative scroll-mt-20 text-2xl font-bold mt-5 mb-2 dark:text-gray-100"><a href="#yubico" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Yubico</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h3>
<p class="my-2 dark:text-gray-200">Yubico is the most well known vendor. They offer a wide range of devices, with different form factors, connectors and fingerprint readers. Notably, their firmware is not updatable. Yubico is a good choice for most users, as they are well supported and established, but they are not the cheapest and only support 100 credentials.</p>
<h3 id="trustkey" class="group relative scroll-mt-20 text-2xl font-bold mt-5 mb-2 dark:text-gray-100"><a href="#trustkey" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">TrustKey</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h3>
<p class="my-2 dark:text-gray-200">TrustKey is a korean vendor, their devices are purchasable on Amazon, but the reviews are not great and their documentation is lacking.</p>
<h3 id="feitian" class="group relative scroll-mt-20 text-2xl font-bold mt-5 mb-2 dark:text-gray-100"><a href="#feitian" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Feitian</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h3>
<p class="my-2 dark:text-gray-200">Feitian is a chinese vendor, uniquely they support unlimited credentials. They offer various devices, with connectors and biometrics. They state at least 10 years of storage.</p>
<h3 id="token2" class="group relative scroll-mt-20 text-2xl font-bold mt-5 mb-2 dark:text-gray-100"><a href="#token2" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Token2</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h3>
<p class="my-2 dark:text-gray-200">Token2 is a swiss vendor, they are cheap and support 300 credentials, as well as PIV. Their firmware is updatable and open source, having passed an independent audit. Their Firmware is available on <a href="https://github.com/token2/pin_plus_firmware" class="text-blue-600 dark:text-blue-400 hover:underline">GitHub</a> and based on <a href="https://github.com/BryanJacobs/FIDO2Applet" class="text-blue-600 dark:text-blue-400 hover:underline">this project</a> implementing FIDO2 for Java Card. Their security model states "This application is likely not secure" [<a href="https://github.com/BryanJacobs/FIDO2Applet/blob/main/docs/security_model.md" class="text-blue-600 dark:text-blue-400 hover:underline">security_model.md</a>]. The <a href="https://www.token2.com/img/pdf/FIDO2L2.pdf" class="text-blue-600 dark:text-blue-400 hover:underline">certification</a> of Token2 is done by Bank Card Test Center Shenzhen Branch.
The device is programmable, which I like and the case has a nice design.</p>
<h2 id="the-bad" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#the-bad" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">The Bad</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<h3 id="ledger" class="group relative scroll-mt-20 text-2xl font-bold mt-5 mb-2 dark:text-gray-100"><a href="#ledger" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Ledger</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h3>
<p class="my-2 dark:text-gray-200">The Ledger (Zoomer) Crypto Wallet is a hardware wallet, but it also supports FIDO2, but it is not FIDO certified, which might cause incompatibility.</p>
<h3 id="windows-hello" class="group relative scroll-mt-20 text-2xl font-bold mt-5 mb-2 dark:text-gray-100"><a href="#windows-hello" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Windows Hello</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h3>
<p class="my-2 dark:text-gray-200">Windows Hello is a software based authenticator and FIDO certified, but it only uses COSE Algorithm -257, which is RSASSA-PKCS1-v1_5 with SHA-256. This algorithm is not recommended according to RFC <a href="https://www.rfc-editor.org/info/rfc7518" class="text-blue-600 dark:text-blue-400 hover:underline">7518</a>, but TPMs support it.</p>
<h2 id="the-ugly" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#the-ugly" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">The Ugly</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<h3 id="google-titan" class="group relative scroll-mt-20 text-2xl font-bold mt-5 mb-2 dark:text-gray-100"><a href="#google-titan" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Google Titan</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h3>
<p class="my-2 dark:text-gray-200">I use the Google Titan YT1, which is a hardware token, but only supports FIDO 2.0 and not the newer FIDO 2.1. This is a problem as you cannot manage the credentials on the device, you can't delete them and you can't set a PIN. It lacks NFC. I got it for free from DEFCON, but I would not recommend it.</p>
<h3 id="nitrokey" class="group relative scroll-mt-20 text-2xl font-bold mt-5 mb-2 dark:text-gray-100"><a href="#nitrokey" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Nitrokey</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h3>
<p class="my-2 dark:text-gray-200">Nitrokey is a german company and they offer Nitrokey, which supports FIDO2 and PIV, but it only supports 27 ECC keys and its pricing is comparable to Yubico. Its firmware is open source, but 27 keys is just not enough.</p>
<h2 id="the-funny" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#the-funny" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">The Funny</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The Company Token offers a Ring, a <a href="https://www.tokenring.com/" class="text-blue-600 dark:text-blue-400 hover:underline">Token Ring</a>. This is unrelated to the Token2 company.
Valmido offers a device praising it as a <a href="https://www.valmido.com/product-solutions" class="text-blue-600 dark:text-blue-400 hover:underline">"next-generation smartcard"</a>, which has a wooden finish, a display and a fingerprint reader.
Cryptnox build a smartcard based (Zoomer) crypto hardware wallet, which is FIDO certified.</p>
<h1 id="conclusion" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Conclusion</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">For a hardware token I would buy one Token2 and one Feitian, as they are cheap and have good features. I would not buy a Yubico, as they are expensive and have limited features. If you have a Ledger, you can use it as an authenticator.
For a software based authenticator I use Bitwarden.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-03-30-fido-mds/</id>
    <link href="https://toranm.me/post/2025-03-30-fido-mds/"/>
    <published>2025-03-30T00:00:00.000Z</published>
    <summary>Passkeys are a new authentication method that is gaining popularity. They are designed to be more secure and easier to use than traditional passwords. This scheme is developed by the FIDO Alliance, who also offer a database of certified passkey vendors. This database is called the FIDO Metadata Service (MDS).</summary>
    <title>Analyzing FIDO MDS: The Good, The Bad and The Ugly or Which Passkey Vendor to Buy</title>
    <updated>2025-03-30T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I added a new feature to my blog: you can now vote on the next blog post I will write! This is a fun way to get feedback from you and to see what you are interested in. I will add new topics every now and then, so you can vote on them. This feature is inspired by <a href="https://dreckstool.de/" class="text-blue-600 dark:text-blue-400 hover:underline">Dreckstool</a>.
You can find the voting page here: <a href="https://toranm.me/vote-blogpost" class="text-blue-600 dark:text-blue-400 hover:underline">Vote on my next blog post</a>.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-03-29-vote-on-my-next-blogpost/</id>
    <link href="https://toranm.me/post/2025-03-29-vote-on-my-next-blogpost/"/>
    <published>2025-03-29T00:00:00.000Z</published>
    <summary>I added a new feature to my blog: you can now vote on the next blog post I will write! This is a fun way to get feedback from you and to see what you are interested in. I will add new topics every now and then, so you can vote on them. This feature is inspired by Dreckstool.
You can find the voting page here: Vote on my next blog post.</summary>
    <title>Vote on my next blog post</title>
    <updated>2025-03-29T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">In the next years, I want to achieve a few things. The general theme is doing more computer science and security. I think I can realistically achieve these things, if not I need to analyze it. Some of these things are more important than others and some are a byproduct of the general direction.</p>
<p class="my-2 dark:text-gray-200">So here is the list:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Publish a paper</li>
<li>Give more talks</li>
<li>Build awesome technology</li>
<li>Get better at CTF</li>
<li>Do more organizing of events</li>
<li>Enrich the community</li>
</ul>
<p class="my-2 dark:text-gray-200">These are all related to my passion for security and technology. But while focusing on these things, I must not forget what really matters: my friends and family, my health, my sanity and all the other mundane things.</p>
<h1 id="publish-a-paper" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#publish-a-paper" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Publish a paper</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I have a few ideas, but I also know writing a paper is hard and getting it published is harder. The ingredients are clear: solid fundamentals, a good idea, and good execution. I think I can do it, but I need to put in the work.
Also, I want to publish in a community run zine like Phrack or Paged Out!</p>
<h1 id="give-more-talks" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#give-more-talks" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Give more talks</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I have given a few talks and it is a lot of fun. I want to give more talks, but I also want to give better talks. I am especially interested in giving a talk at a hacking conference, like Congress, but smaller or something more underground like BSides or just at a local meetup.
I need to create a talk pipeline, where I can just come up with ideas, do some research and then look for suitable venues. I want to work on topics which are interesting, where I can add value (no "intro to X" or "infosec 101") and where I can learn something.
Feedback and talking with the audience is important, so I can learn more and improve my skills.</p>
<h1 id="build-awesome-technology" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#build-awesome-technology" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Build awesome technology</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I want to build awesome technology. Just like a wacky side project, something which is useful, uses novel approaches and is build with a tech stack I like.
This would ideally come out of other projects, like my work or ctf.</p>
<h1 id="get-better-at-ctf" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#get-better-at-ctf" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Get better at CTF</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">CTF is a lot of fun, as it combines technology, problem solving and competition within a community. To hone my skills, I need to play more CTFs, build challenges, do writeups and talks.</p>
<h1 id="do-more-organizing-of-events" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#do-more-organizing-of-events" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Do more organizing of events</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">During my time at university, I was involved with Unifest and with smaller festivities. This was a very valuable experience, because the people I met, the things I learned and the service it provided to the community. I want more of that, with myself doing more advanced organizing. So to start, I am involved with organizing the helpers for GPN, previously I did the same for Unifest.
In the future, I want to organize a conference myself.</p>
<h1 id="enrich-the-community" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#enrich-the-community" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Enrich the community</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I also want to share my knowledge and experience with the community, this can be done in ways described above, but I also want to give back to a broader audience. I'm not sure how to do this yet.
I have thought about starting a youtube channel multiple times, but when I look at the current landscape, I don't think I can reach the scale I want to reach. I look at creators that do similar things, and I see so many that were not sustainable, of course there a people who succeed like LiveOverflow or Low Level, but they are the exception. There are others, which were able to build a community, but their concept is not what I believe in, like flashy, "how to darknet" type of stuff. I want something more fundamental and innovative.
One way to reach a broader audience is to give surface level talks. I once was at a event where a guy was introduced with "programmed since he was 10 and build websites since he was 12". I don't want to be that guy. When you are in the computer pool past 10pm, everybody did this. This is not a flex, this is the bare minimum. So I can give comparable talks, but surface level talks are not what I am after.
I don't have an idea on how to do this. I still need to cook up a real concept, and then find the time to do it.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-03-26-the-next-years/</id>
    <link href="https://toranm.me/post/2025-03-26-the-next-years/"/>
    <published>2025-03-26T00:00:00.000Z</published>
    <summary>In the next years, I want to achieve a few things. The general theme is doing more computer science and security. I think I can realistically achieve these things, if not I need to analyze it. Some of these things are more important than others and some are a byproduct of the general direction.</summary>
    <title>The Next Years</title>
    <updated>2025-03-26T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">When you plan out something, a project, a process or something else, you can generally take more simple approaches or more complex approaches. There are plenty of examples where you need a complex approach, because there are very high requirements, I think of RF, semiconductor manufacturing, data intensive applications. But there are also plenty of examples where you can take a more simple approaches.
Complexity or simplicity are unrelated to the quality of the result.</p>
<p class="my-2 dark:text-gray-200">Sometimes we are so stuck in our ways of thinking that we don't even consider the simple approach. For example in Germany certain public services are overengineered, but it works.</p>
<p class="my-2 dark:text-gray-200">What makes something more complex or simple?
Simplicity is more about directly using the first principles and building up from a lower level. Complexity is of course also build on first principles, but it is using more layers of abstraction, building on a more shaky foundation which is secured by more pillars.</p>
<p class="my-2 dark:text-gray-200">Why we use complex approaches, when we could use simple approaches?
Occam's razor recommends to use the simplest approach, which incorporates all the requirements. This is generally good advice, why cook up something insane, when you can also just do it?
A simple approach is not more shallow or of lesser quality, it is just more direct.</p>
<p class="my-2 dark:text-gray-200">In which cases is a complex approach better?
First of all, we need a complex approach, when we don't know the simple approach. But there are also cases where a complex approach is better, because it is more flexible, innovative, tries to solve a problem in a more general way or is the standard, tried and true, approach.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-03-25-complexity/</id>
    <link href="https://toranm.me/post/2025-03-25-complexity/"/>
    <published>2025-03-25T00:00:00.000Z</published>
    <summary>When you plan out something, a project, a process or something else, you can generally take more simple approaches or more complex approaches. There are plenty of examples where you need a complex approach, because there are very high requirements, I think of RF, semiconductor manufacturing, data intensive applications. But there are also plenty of examples where you can take a more simple approaches.
Complexity or simplicity are unrelated to the quality of the result.</summary>
    <title>Complexity and Simplicity</title>
    <updated>2025-03-25T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I am often critical of my work. I think of things I did in the past and I think it was bad. I could have done it better.
There are always people who are better than me, people who studies faster than me, people who did two bachelor degrees, people who had better grades, who published more papers, who published at better venues, who won best paper awards at a* conference and so on.</p>
<p class="my-2 dark:text-gray-200">The truth is, there will always be someone better than me. I ask what are they doing that I am not doing? What is their secret?</p>
<p class="my-2 dark:text-gray-200">Also, the unhappiness can be separated into two categories. The first one is, that I am not happy with my work compared to the work of other, the second one is that I am not happy with my work on its own.
The former might me more easy to come to terms with. Comparing myself to others can be constructive, because I can improve my work. I know in each individual case, why my work is not as good as theirs. Maybe there are people who really don't cook with water and really can do magic, but in the most cases I can find improvements that I can apply to my work.
The latter might be more difficult to accept. In the first case, you look at something great and have something to strive for, but in the second case, you look at something bad and not really know what to do with it. I might have ideas on how to improve it, but it might not result in an improvement. Hindsight is 20/20, but when I work on something new, I don't have the hindsight.</p>
<p class="my-2 dark:text-gray-200">What I have noticed about myself is that I take a long time to plan things, in my personal life and in my work. My plans are often not particularly complex, there are details in my plan that I only carry out when I need them. But planning might be too slow.</p>
<p class="my-2 dark:text-gray-200">How can I be happy with my work, when I see all the things I could have done better?
I think one way to be happy with my work is if I am happy with the process. With that I mean, if I (1.) was happy while doing the work and if I (2.) am happy with the approach.
I am unhappy while doing the work, I think I should change it up until I am happy or cancel it if I can't find a way to be happy with it.
The second one is something I think is important in general.
But what if I am unhappy with the approach?</p>]]>
    </content>
    <id>https://toranm.me/post/2025-03-24-being-happy-of-your-work/</id>
    <link href="https://toranm.me/post/2025-03-24-being-happy-of-your-work/"/>
    <published>2025-03-24T00:00:00.000Z</published>
    <summary>I am often critical of my work. I think of things I did in the past and I think it was bad. I could have done it better.
There are always people who are better than me, people who studies faster than me, people who did two bachelor degrees, people who had better grades, who published more papers, who published at better venues, who won best paper awards at a* conference and so on.</summary>
    <title>Being Unhappy with My Work</title>
    <updated>2025-03-24T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">Charli xcxs 2024 album brat is incredible. The sound is inspired by EDM and developed into pop, but without the cliche poppy sound.
Charli has done many hit songs, like Boom Clap, Fancy with Iggy Azalea and I Love It with Icona Pop, but this album makes her sound more mature and sophisticated
From the start, 360, to the end, 365, the album is a journey. The album has so many layers and always something new to discover, so it has great rehearability.
Take 365 for example, it's catchy, but its ending is ending makes you wonder how she passed passed it as pop song.
Apple and von dutch have been topping the charts, but the lesser known songs are also great. Take mean girls for example, it's sound mixing piano and synths is so good.</p>
<p class="my-2 dark:text-gray-200">There are also the lyrics on the album, so many witty lines, "No, I never go home, don't sleep, don't eat. Just do it on repeat".</p>
<p class="my-2 dark:text-gray-200">She also made three more songs, where Guess stands out to me. It is a interpolation of Daft Punk's Technologic. It takes the original classic and makes it new again. The lyrics are funny. It is really unbelievable how she made it work under pop. For me, this song is kind of the summary of the album and the innovation she brings to pop.</p>
<p class="my-2 dark:text-gray-200">Then there is the remix albums, brat and it'completely different. It's like Charli decided which other artists sound she likes to incorporate into her songs. Yung Lean and Robyn on the same song, what a combination. Julian Casablancas part on mean girls is a great addition.</p>
<p class="my-2 dark:text-gray-200">The sound she pushed captured the zeitgeist. Take Germanys entry for the Eurovision Song Contest Baller is sounds like brat. Lady Gagas 2025 album also uses similar sounds. I have always been a fan of Charli and EDM music, her pushing the sound into pop really makes me like her even more.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-03-22-in-praise-of-brat/</id>
    <link href="https://toranm.me/post/2025-03-22-in-praise-of-brat/"/>
    <published>2025-03-22T00:00:00.000Z</published>
    <summary>Charli xcxs 2024 album brat is incredible. The sound is inspired by EDM and developed into pop, but without the cliche poppy sound.
Charli has done many hit songs, like Boom Clap, Fancy with Iggy Azalea and I Love It with Icona Pop, but this album makes her sound more mature and sophisticated
From the start, 360, to the end, 365, the album is a journey. The album has so many layers and always something new to discover, so it has great rehearability.
Take 365 for example, it's catchy, but its ending is ending makes you wonder how she passed passed it as pop song.
Apple and von dutch have been topping the charts, but the lesser known songs are also great. Take mean girls for example, it's sound mixing piano and synths is so good.</summary>
    <title>In Praise of brat</title>
    <updated>2025-03-22T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">To /keep innovating/ is to innovate, and than to do it again. But you can't just do the same thing again. You need to do do something new again.</p>
<h1 id="what-is-innovation" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#what-is-innovation" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">What is Innovation?</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Innovation is the process of applying new ideas to solve problems.
To think what no one has thought before, to do what no one has done before, that is just the beginning. To innovate is to create something new, that is useful.</p>
<h1 id="the-coolest-innovations" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#the-coolest-innovations" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">The Coolest Innovations</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">The coolest innovations are those that are simple, broadly applicable, really new and are vividly communicated. Examples are the Diffie-Hellman Key Exchange, Shannon's entropy and Bloom Filters.</p>
<h1 id="keep-innovating" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#keep-innovating" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Keep Innovating</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">To keep innovating is more than just to innovate once. Innovating once is great, but to keep innovating means to do something new again, and you can't just do the previous thing again. You need to come up with new ideas. This is hard.</p>
<h1 id="how-to-keep-innovating" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#how-to-keep-innovating" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">How to Keep Innovating</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">To keep innovating, you need depth, breadth and creativity. You need depth because you need to understand the problem you are solving, what has been done before and how to execute. You need breadth because you need to look at the problem from different angles. You need creativity because you need to come up with new ideas.
Execution is also important. You need to be able to turn your ideas into reality.</p>
<h1 id="why-we-need-to-keep-innovating" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#why-we-need-to-keep-innovating" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Why We Need to Keep Innovating</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Without innovation, we will stagnate. Stagnation is the nucleus of regression. There are so many problems with the status quo that, if we don't innovate, we will be stuck with them. Status quo is not an option, until all the stuff is made of gold, that is a long way to go.</p>]]>
    </content>
    <id>https://toranm.me/post/2025-03-21-keep-innovating/</id>
    <link href="https://toranm.me/post/2025-03-21-keep-innovating/"/>
    <published>2025-03-21T00:00:00.000Z</published>
    <summary>To /keep innovating/ is to innovate, and than to do it again. But you can't just do the same thing again. You need to do do something new again.</summary>
    <title>Keep Innovating</title>
    <updated>2025-03-21T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">Hi, inspired by <a href="https://news.ycombinator.com/item?id=42799103" class="text-blue-600 dark:text-blue-400 hover:underline">this HN thread</a> I decided to write about some of the most influential computer science papers I have read.
For me, these papers shaped what I think computer science is, and what it can be.
When someone asks me "What is computer science?" I think the answer is that is is the scientific investigation of IT. On the low end are foundational papers whose results are used, remixed and relevant to this day. On the high end are papers that are visionary, and have shaped the way we think about computer science, that have inspired novel ways of thinking.</p>
<p class="my-2 dark:text-gray-200">Often, computer science is seen as beeing about programming, but I think that is a narrow view. Programming is a tool, but if there were a better tool, we would use that. Programming can be a tool for buissines applications, but it can also be a tool for computer science. Programmim is rooted in cs, but there is more to cs than investiagting programming or appliying programming. Think of innovations like online banking, generative ai, or avatar (the movies), programming was a part of it, but the real hard work to enable these things is not coding, but rather networking, security, neural networks, etc.</p>
<h1 id="what-makes-a-paper-goated" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#what-makes-a-paper-goated" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">What makes a paper goated?</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Andreas Zeller reccomends to:</p>
<ol class="list-decimal list-inside ml-4 dark:text-gray-200">
<li>do work that is relevant</li>
<li>strive for simplicity</li>
<li>keep innovating
and I think these are great guidelines. To do relevant work means to look at the world and identify how the world can be improved most effectivly. A simple approach is easy to understand, and easy to build upon, thus making it more likely to be used. Innovation is creation of new ideas. Not only should we innovate, but we should <em>keep</em> innovating. Consistenty coming up with novel ideas is hard, but it is what drives the field forward.</li>
</ol>
<p class="my-2 dark:text-gray-200">For me, I think a paper is goated if it is foundational and practical while being simple and visionary. Bonus points if it is vivid.</p>
<!-- # Goated Computer Science Papers: A list of classics -->
<!-- - General
    - Shannon's A Mathematical Theory of Communication
    - Venevar Bush's As We May Think
    - Noam Chomsky's Three Models for the Description of Language
    - Richard Hamming's You and your research
- Security and Cryptography
    - Diffie and Hellman's New Directions in Cryptography
    - Rivest, Shamir, and Adleman's A Method for Obtaining Digital Signatures and Public-Key Cryptosystems
    - Saltzer and Schroeder's The Protection of Information in Computer Systems
    - Joux's A One Round Protocol for Tripartite Diffie-Hellman
    - Satoshi Nakamoto's Bitcoin: A Peer-to-Peer Electronic Cash System
    - Ken Thompson's Reflections on Trusting Trust
    - Anne Adams and Martina Angela Sasse's Users are not the enemy
- Algorithms:
    - Dijkstra's A note on two problems in connexion with graphs
    - Bloom's Space/Time Trade-offs in Hash Coding with Allowable Errors
- Computer Engineering:
    - Moore's Cramming more components onto integrated circuits
    - Patterson and Hennessy's Computer Architecture: A Quantitative Approach
    - Minix
- AI:
    - Turing's Computing Machinery and Intelligence
    - Joseph Weizenbaum's ELIZA - A Computer Program For the Study of Natural Language Communication Between
    - AlexNet
    - Attention is all you need by Vaswani et al.
- Programming and Software Engineering:
    - Google's MapReduce: Simplified Data Processing on Large Clusters
    - Eric S. Raymond's The Cathedral and the Bazaar
    - Dennis Ritchie and Ken Thompson's The Unix Time-Sharing System
    - Fred Brooks's The Mythical Man Month
    - James Kajiya's Rendering Equation
    - Dijkstra's Go To Statement Considered Harmful

- General -->
<h2 id="shannons-a-mathematical-theory-of-communication" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#shannons-a-mathematical-theory-of-communication" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Shannon's A Mathematical Theory of Communication</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Shannon paved the way for modern cryotography, and is the father of information theory.
In this paper, Shannon introduces the concept of entropy, which is a measure of the uncertainty of a random variable.</p>
<h2 id="venevar-bushs-as-we-may-think" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#venevar-bushs-as-we-may-think" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Venevar Bush's As We May Think</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Bush was a military scientist, and in this paper he describes a machine, the Memex, that is a precursor to the modern computer. He describes a machine that can store and retrieve information, and that can be used to solve complex problems.</p>
<h2 id="noam-chomskys-three-models-for-the-description-of-language" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#noam-chomskys-three-models-for-the-description-of-language" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Noam Chomsky's Three Models for the Description of Language</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Chomsky is a linguist, and in this paper he describes three models for the description of language. He describes the generative model, the transformational model, and the interpretive model. He argues that the generative model is the most powerful, and that it is the model that is used by humans to generate and understand language.
Chomsky is an interesting intellectual.</p>
<h2 id="richard-hammings-you-and-your-research" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#richard-hammings-you-and-your-research" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Richard Hamming's You and your research</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">You gotta read or listen to this one.</p>
<!-- - Security and Cryptography -->
<h2 id="diffie-and-hellmans-new-directions-in-cryptography" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#diffie-and-hellmans-new-directions-in-cryptography" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Diffie and Hellman's New Directions in Cryptography</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Diffie and Hellman brought up real innovation here. They had a vision about how powerful public key cryptography can be and they developed the first public key cryptosystem. They invented the Diffie-Hellman key exchange protocol, which enables the secure exchange of cryptographic keys over a public channel. Their work combines practical applications with theoretical insights, as well as beeing relativly vivid and easy to understand.</p>
<h2 id="rivest-shamir-and-adlemans-a-method-for-obtaining-digital-signatures-and-public-key-cryptosystems" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#rivest-shamir-and-adlemans-a-method-for-obtaining-digital-signatures-and-public-key-cryptosystems" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Rivest, Shamir, and Adleman's A Method for Obtaining Digital Signatures and Public-Key Cryptosystems</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Rivest and Shamir set out to give counterexamples to the vision of Diffie and Hellman, but ended up finding a way to make it work. Together with Adleman, they developed the RSA cryptosystem. RSA also combines practical applications with theoretical insights. RSA is relativly simple and can be vividly explained, its security guarantees are interesing to analyze, and it is still used today.</p>
<h2 id="saltzer-and-schroeders-the-protection-of-information-in-computer-systems" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#saltzer-and-schroeders-the-protection-of-information-in-computer-systems" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Saltzer and Schroeder's The Protection of Information in Computer Systems</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">This one is goated. Salzer and Schroeder propose principles for secure system design.</p>
<h2 id="jouxs-a-one-round-protocol-for-tripartite-diffie-hellman" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#jouxs-a-one-round-protocol-for-tripartite-diffie-hellman" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Joux's A One Round Protocol for Tripartite Diffie-Hellman</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Joux extends the Diffie-Hellman key exchange protocol to three parties. It uses pairing based cryptography, which is a powerful tool for secure multi-party computation. His work is vivid, innovative and has practical applications.</p>
<h2 id="satoshi-nakamotos-bitcoin-a-peer-to-peer-electronic-cash-system" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#satoshi-nakamotos-bitcoin-a-peer-to-peer-electronic-cash-system" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Satoshi Nakamoto's Bitcoin: A Peer-to-Peer Electronic Cash System</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The anaonymous Satoshi Nakamoto developed the first decentralized cryptocurrency. He started with this paper, based on the ideas from RSA and Chaum.</p>
<h2 id="ken-thompsons-reflections-on-trusting-trust" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#ken-thompsons-reflections-on-trusting-trust" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Ken Thompson's Reflections on Trusting Trust</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">This paper came out of Thompson winning the Turing award. He describes a backdoor put into the compiler to produce binaries that contain the backdoor.</p>
<h2 id="anne-adams-and-martina-angela-sasses-users-are-not-the-enemy" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#anne-adams-and-martina-angela-sasses-users-are-not-the-enemy" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Anne Adams and Martina Angela Sasse's Users are not the enemy</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">This paper is about usable security. Sasse founded the field of usable security, and this paper is a foundational work in that field.
Another noteworth paper is "Why Johnny can't encrypt" by Alma Whitten and J.D. Tygar. Johnny has been a recurring character in security papers.</p>
<!-- - Algorithms: -->
<h2 id="dijkstras-a-note-on-two-problems-in-connexion-with-graphs" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#dijkstras-a-note-on-two-problems-in-connexion-with-graphs" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Dijkstra's A Note on Two Problems in Connexion with Graphs</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Dijkstra is a pioneer in algorithms. He invented the shortest path algorithm, which is used in many applications, such as routing in computer networks. In this paper, he describes two problems related to graphs: the shortest path problem and the minimum spanning tree problem. He presents algorithms to solve these problems, which are based on the idea of dynamic programming.
Dynamic programming is a powerful tool, it is op.</p>
<h2 id="blooms-spacetime-trade-offs-in-hash-coding-with-allowable-errors" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#blooms-spacetime-trade-offs-in-hash-coding-with-allowable-errors" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Bloom's Space/Time Trade-offs in Hash Coding with Allowable Errors</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Bloom invented the bloom filter, which is a probabilistic data structure that can be used to test whether an element is a member of a set. It is a simple and efficient data structure that has many practical applications. For example, it is used in network routers to filter out unwanted traffic or in databases to speed up queries.</p>
<!-- - Computer Engineering: -->
<h2 id="moores-cramming-more-components-onto-integrated-circuits" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#moores-cramming-more-components-onto-integrated-circuits" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Moore's Cramming more components onto integrated circuits</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Mopre's the co-founder of Intel, this is the original "Moore's Law" paper.</p>
<h2 id="patterson-and-hennessys-computer-architecture-a-quantitative-approach" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#patterson-and-hennessys-computer-architecture-a-quantitative-approach" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Patterson and Hennessy's Computer Architecture: A Quantitative Approach</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Patterson and Hennessy are the authors of this textbook covering computer architecture.
Hennessy is a former president of Stanford University. Patterson and Hennessy won the Turing award for their work on RISC.</p>
<!-- - Programming and Software Engineering: -->
<h2 id="googles-mapreduce-simplified-data-processing-on-large-clusters" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#googles-mapreduce-simplified-data-processing-on-large-clusters" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Google's MapReduce: Simplified Data Processing on Large Clusters</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">In this paper, Google describes the MapReduce programming model, which is a simple and efficient way to process large amounts of data on a cluster of computers. MapReduce is based on functional programming and consits of two functions: map and reduce. This model is executed on lists, first the map function transforms each element of the lists, which can be done in parallel, and then the reduce function is applied to the transformed elements to produce the final result, which is done in series.</p>
<h2 id="james-kajiyas-rendering-equation" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#james-kajiyas-rendering-equation" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">James Kajiya's Rendering Equation</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">This is a foundational paper in computer graphics. Kajiya describes a physically based rendering equation that models the interaction of light with surfaces. Finding ways to solve this equation cheaply is a major challenge in computer graphics.</p>
<h2 id="dijkstras-go-to-statement-considered" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#dijkstras-go-to-statement-considered" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Dijkstra's Go To Statement Considered</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Dijkstra argues that the goto statement is harmful, because it makes programs harder to understand and maintain. He proposes structured programming as an alternative, which uses loops and conditionals instead of gotos.</p>
<h2 id="the-art-of-computer-programming-by-donald-knuth" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#the-art-of-computer-programming-by-donald-knuth" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">The Art of Computer Programming by Donald Knuth</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Knuth is very influential. His book sieries "The Art of Computer Programming" is a classic. He invented tex and metafont to typeset his books.</p>
<p class="my-2 dark:text-gray-200">Here is a funny video of him mishearing a question about a teacher as t-shirt: <a href="https://www.youtube.com/watch?v=74BfHoE66rc&#x26;t=2537s" class="text-blue-600 dark:text-blue-400 hover:underline">https://www.youtube.com/watch?v=74BfHoE66rc&#x26;t=2537s</a>
Knuth is famous for sending checks over $2.56 to people who find errors in his books.</p>
<p class="my-2 dark:text-gray-200">Further reading:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>
<p class="my-2 dark:text-gray-200">Minix</p>
</li>
<li>
<p class="my-2 dark:text-gray-200">Dennis Ritchie and Ken Thompson's The Unix Time-Sharing System</p>
</li>
<li>
<p class="my-2 dark:text-gray-200">Fred Brooks's The Mythical Man Month</p>
</li>
<li>
<p class="my-2 dark:text-gray-200">AI:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Turing's Computing Machinery and Intelligence</li>
<li>Joseph Weizenbaum's ELIZA - A Computer Program For the Study of Natural Language Communication Between</li>
<li>AlexNet</li>
<li>Attention is all you need by Vaswani et al.</li>
</ul>
</li>
</ul>]]>
    </content>
    <id>https://toranm.me/post/2025-02-04-goated-cs-papers/</id>
    <link href="https://toranm.me/post/2025-02-04-goated-cs-papers/"/>
    <published>2025-02-04T00:00:00.000Z</published>
    <summary>Hi, inspired by this HN thread I decided to write about some of the most influential computer science papers I have read.
For me, these papers shaped what I think computer science is, and what it can be.
When someone asks me &quot;What is computer science?&quot; I think the answer is that is is the scientific investigation of IT. On the low end are foundational papers whose results are used, remixed and relevant to this day. On the high end are papers that are visionary, and have shaped the way we think about computer science, that have inspired novel ways of thinking.</summary>
    <title>Goated Computer Science Papers: A list of classics</title>
    <updated>2025-02-04T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">So, I set up bank accounts at various banking institutions offering their services in Germany. I will write about my experiences with them in a series of posts and test them out.
Let me know if you have any questions, comments, or anything else I should test or write about.</p>
<p class="my-2 dark:text-gray-200">I will start with the following banks and services, in no particular order:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Ing-Diba</li>
<li>C24</li>
<li>Klarna</li>
<li>DKB</li>
<li>Revolut</li>
<li>Bank Norweigen</li>
<li>Local VR Banks</li>
<li>Trade Republic</li>
<li>Curve</li>
<li>Wise</li>
<li>VimPay</li>
<li>XPCard</li>
</ul>
<p class="my-2 dark:text-gray-200">Further, I am also interested in testing out the following banks, but have not yet setup accounts with them:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>N26</li>
<li>Comdirect</li>
<li>Consorsbank</li>
<li>Santander</li>
<li>Targo Bank</li>
<li>Deutsche Bank</li>
<li>Sparkasse</li>
<li>Amex</li>
</ul>
<p class="my-2 dark:text-gray-200">Previously, I had an account with Vivid Money, but I closed it because I was not happy with their service.</p>
<p class="my-2 dark:text-gray-200">Regarding features, I am interested in investigating and reviewing the following:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Online and Mobile Banking</li>
<li>SEPA (instant) transfers</li>
<li>Mastercard/Visa payments</li>
<li>Apple Pay/Google Pay</li>
<li>Fee structure</li>
<li>Money Withdrawals at ATMs</li>
<li>Girocard</li>
<li>Cashback</li>
</ul>
<p class="my-2 dark:text-gray-200">The banks all employ a <a href="https://en.wikipedia.org/wiki/Core_banking" class="text-blue-600 dark:text-blue-400 hover:underline">core banking system</a>. This is a software stack used for common banking tasks, such as opening accounts, processing deposits, withdrawals, and payments, and generating statements. There are not so many vendors in this space, and the software is usually not developed in-house.</p>
<h1 id="ing-diba" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#ing-diba" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Ing-Diba</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<h2 id="banking-card" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#banking-card" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Banking Card</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They offer a free physical Visa debit card, which has a weird cutout. Apple and Google Pay are supported.</p>
<h2 id="mobile-app" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#mobile-app" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Mobile App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">App has good features and is established.</p>
<h2 id="web-app" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#web-app" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Web App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Web app is very good and has all the needed features.</p>
<h2 id="core-banking" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#core-banking" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Core Banking</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They use <a href="https://www.cio.de/a/ing-diba-kordoba-bleibt-noch-laenger,2293844" class="text-blue-600 dark:text-blue-400 hover:underline">Kordoba</a> as their core banking system.</p>
<h1 id="c24" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#c24" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">C24</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<h2 id="account-opening" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#account-opening" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Account Opening</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Account opening was easy, did not require a video call. I could log in and use the account.</p>
<h2 id="general" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#general" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">General</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They also offer free SEPA instant transfers. C24 is the best way to find out if a SEPA transfer is instant, as there is a toggle in the interface.</p>
<h2 id="banking-card-1" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#banking-card-1" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Banking Card</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They offer a free physical Mastercard as well as a free Girocard, without cobranding. Their cards look and feel cheap, but they allow you to select which name gets printed on them (first and last name, last name only or initial of the first name and last name). Apple and Google Pay are supported for the Mastercard, up to 8 free virtual cards can be created.</p>
<h2 id="mobile-app-1" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#mobile-app-1" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Mobile App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">App is OK, and developing fast.</p>
<h2 id="web-app-1" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#web-app-1" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Web App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Their web app is also OK, not as good as the mobile app and missing some features that are only available in the mobile app.</p>
<h2 id="core-banking-1" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#core-banking-1" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Core Banking</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They use <a href="https://mambu.com/insights-hub/press/german-challenger-c24-extends-partnership-with-mambu-after-a-successful-launch-of-the-bank" class="text-blue-600 dark:text-blue-400 hover:underline">Mambu</a> as their core banking system.</p>
<h1 id="klarna" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#klarna" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Klarna</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<h2 id="account-opening-1" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#account-opening-1" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Account Opening</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Account opening was easy, did not require a video call. I could log in and use the account.</p>
<h2 id="general-1" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#general-1" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">General</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Their killer feature is the integration of shopping, their payment system and buy-now-pay-later. They don't offer sending SEPA instant transfers, but they accept them. The account can be topped up for free two times a month, and then they charge a fee; the minimum top up is 10 €.</p>
<h2 id="banking-card-2" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#banking-card-2" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Banking Card</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They offer a free Visa credit card, which is the best-looking card I have seen so far. They also offer a free virtual debit card. Apple and Google Pay are supported.</p>
<h2 id="mobile-app-2" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#mobile-app-2" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Mobile App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">App is international-fintech-grade.</p>
<h2 id="web-app-2" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#web-app-2" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Web App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The web app is lacking features, you can only see your transactions, account details, balance, and do some account management.</p>
<h2 id="core-banking-2" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#core-banking-2" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Core Banking</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Klarnas core banking system <a href="https://techcrunch.com/2021/02/09/klarna-launches-bank-accounts-in-germany/" class="text-blue-600 dark:text-blue-400 hover:underline">is built in-house</a>.</p>
<h1 id="dkb" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#dkb" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">DKB</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<h2 id="account-opening-2" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#account-opening-2" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Account Opening</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Account opening was easy, but not as fast as others.</p>
<h2 id="general-2" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#general-2" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">General</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They offer a free Visa debit card. Their bank account is a bit more traditional.</p>
<h2 id="banking-card-3" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#banking-card-3" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Banking Card</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They offer a free Visa debit card, which is above average quality-wise. Apple and Google Pay are supported.</p>
<h2 id="mobile-app-3" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#mobile-app-3" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Mobile App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Their new app is missing features. They don't offer sending SEPA instant transfers. Their app shows transfer details not shown by others (see Revolut).</p>
<h2 id="web-app-3" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#web-app-3" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Web App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Their web app has all the features of the mobile app. You can send transfers, change the PIN of your card, and do other account management. Sometimes you are sent to their old web app, which is not as good, sometimes even iframed into their new web app.</p>
<h2 id="core-banking-3" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#core-banking-3" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Core Banking</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">DKB uses core banking from <a href="https://www.f-i-ts.de/referenzen/deutsche-kreditbank" class="text-blue-600 dark:text-blue-400 hover:underline">Finanz Informatik/F-I-TS</a>, which is part of Sparkassen-Finanzgruppe.</p>
<h1 id="revolut" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#revolut" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Revolut</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<h2 id="account-opening-3" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#account-opening-3" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Account Opening</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Revolut's account-opening process is a bit cumbersome. They require a video call to verify your identity, which is a bit annoying. But after that, I could log in and use the account.</p>
<h2 id="general-3" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#general-3" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">General</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They really have cool features; for example, they allow free top-ups using credit cards, and they offer sending and receiving free SEPA instant transfers, which makes them useful to quickly pool up money from the different accounts. Revolut accepts SWIFT transfers as well. They have good exchange rates for foreign currencies.</p>
<h2 id="banking-card-4" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#banking-card-4" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Banking Card</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They offer a virtual Mastercard only. Apple and Google Pay are supported. Further, virtual or single-use virtual cards can be created for free.</p>
<h2 id="mobile-app-4" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#mobile-app-4" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Mobile App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Revoluts mobile app is nice, better than Klarna. They also have a feature where you can send money to credit cards, even going as far as letting you scan cards with NFC and send money to them. Revolut sends your street name and number in a SEPA transfer, which is shown by DKB. Supports Passkey.</p>
<h2 id="web-app-4" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#web-app-4" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Web App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The web app is really lacking features, you can only see your transactions, account details and balance. Their web app is worse than Klarnas.</p>
<h2 id="integrations-and-api" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#integrations-and-api" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Integrations and API</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">API seems to offer ok features and data quality. Connecting to other services happens through their web portal.</p>
<h2 id="core-banking-4" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#core-banking-4" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Core Banking</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Revolut built its <a href="https://www.fintechfutures.com/2024/03/from-start-up-to-unicorn-the-rise-of-revolut/" class="text-blue-600 dark:text-blue-400 hover:underline">core banking system in-house</a>.</p>
<h1 id="bank-norweigen" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#bank-norweigen" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Bank Norweigen</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<h2 id="account-opening-4" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#account-opening-4" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Account Opening</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Account opening was slow and required many details.</p>
<h2 id="general-4" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#general-4" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">General</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They offer a free Visa credit card and a Norwegian IBAN. Bank Norwegian is the only provider telling me I have to set an "online shopping password" for my credit card. What the hell is that? When I try to set it with a secure password, it tells me it has to not contain Ä, Ö or Ü, which it does not contain. Only 15 characters are allowed, which I think is too short. They don't support SEPA instant transfers.</p>
<h2 id="banking-card-5" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#banking-card-5" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Banking Card</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Their Visa is golden and has a pretty design. Apple and Google Pay are supported.</p>
<h2 id="mobile-app-5" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#mobile-app-5" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Mobile App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">The app sucks, it's a webview of their web app.</p>
<h2 id="web-app-5" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#web-app-5" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Web App</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">Web app login requires date of birth in addition to the phone number. The first time I logged in, it asked me to accept a new TOS, based on a decision of the BGH from 2021. I opened the account in 2024, why do I have to accept a TOS change linking to 2021?</p>
<h2 id="core-banking-5" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#core-banking-5" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Core Banking</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h2>
<p class="my-2 dark:text-gray-200">They use <a href="https://fi.se/en/our-registers/prospektregistret/GetFile/?id=24-8851&#x26;format=application/pdf&#x26;name=24-8851.pdf" class="text-blue-600 dark:text-blue-400 hover:underline">Banqsoft</a> as their core banking system.</p>
<h1 id="local-vr-banks" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#local-vr-banks" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Local VR Banks</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">App sucks, free Girocard with maestro or vpay cobranding. They have virtual giro cards, but the app really sucks compared to Google Pay. I can't imagine that the developers from Atruvia (also the provider of the core banking) use the app themselves, and it shows.
These are the only banks requiring the use of a TAN generator, which I think is a bad user experience.</p>
<h1 id="trade-republic" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#trade-republic" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Trade Republic</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">They don't offer a regular giro account, but a depot account. They offer a free Visa debit card, and a call money account, matching the ECBs key interest rate. Not sure about their core banking. They don't support SEPA instant transfers.
While they have a pretty-looking user interface, technology-wise they are lacking. They are only realy good at executing a saving plan, and storing money, besides they are not really useful. They don't accept incoming SEPA instant transfers, which is a big downside.</p>
<h1 id="curve" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#curve" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Curve</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Curve is pretty fun, it's basically a proxy on the credit card network. You can use it like Google Wallet with extra steps. They offer a free Mastercard, and you can link your other cards to it. You can get cashback on purchases, and you can change retroactivly which card gets charged. You can also use "if this then that" rules to set the card that gets charged.</p>
<h1 id="wise" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#wise" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Wise</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">Wise is honestly not that interesting.</p>
<h1 id="vimpay" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#vimpay" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">VimPay</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">VimPay is a little fun, as it shows much information about the transaction. When adding the card to Google Pay, it showed two transactions from Google, St. Louis, USA over 0.00 €. They offer a free Mastercard.</p>
<h1 id="xpcard" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#xpcard" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">XPCard</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">XPCard is a "gaming card". They offer a free Mastercard from Advanzia Bank. They offer cashback for gaming related retailers, like Douglas, Sephora and Jeans Welt.</p>
<h1 id="conclusion" class="group relative scroll-mt-20 text-4xl font-bold mt-8 mb-4 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 hover:underline">Conclusion</a><span class="heading-anchor-hash absolute -left-8 opacity-0 group-hover:opacity-100 transition-opacity duration-200 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-400 select-none" aria-hidden="true">#</span></h1>
<p class="my-2 dark:text-gray-200">I think at the moment the best stack is Revolut for the wild features, C24 as a salary account and maybe Klarna.
Join my <a href="https://matrix.to/#/#banking-adventures:t3n.tech" class="text-blue-600 dark:text-blue-400 hover:underline">Matrix room</a> if you want to discuss this further.</p>]]>
    </content>
    <id>https://toranm.me/post/2024-09-27-banking-part-1/</id>
    <link href="https://toranm.me/post/2024-09-27-banking-part-1/"/>
    <published>2024-09-27T00:00:00.000Z</published>
    <summary>So, I set up bank accounts at various banking institutions offering their services in Germany. I will write about my experiences with them in a series of posts and test them out.
Let me know if you have any questions, comments, or anything else I should test or write about.</summary>
    <title>Banking - Part 1</title>
    <updated>2024-09-27T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">This shows how the Validity Sensor 138a:0090 fingerprint sensor can be made to work on Linux.
This Sensor is used in various ThinkPads such as the X1 Carbon (4. Gen) or in my case the X1 Yoga (1. Gen).</p>
<p class="my-2 dark:text-gray-200">First is to note that this is how I got the sensor on <strong>MY</strong> setup and this post exists for <strong>MY</strong> documentation. None the less this maybe helpful to someone.</p>
<p class="my-2 dark:text-gray-200">I run <a href="https://bedrocklinux.org/" class="text-blue-600 dark:text-blue-400 hover:underline">bedrock linux</a> with Fedora being my main distro, but having some packages from Arch.</p>
<ol class="list-decimal list-inside ml-4 dark:text-gray-200">
<li>
<p class="my-2 dark:text-gray-200">Make sure to have fprintd installed in both Fedora and Arch and fprintd-pam in Fedora.</p>
</li>
<li>
<p class="my-2 dark:text-gray-200">The libfprint patch for the vfs0090 sensor needs to be installed from the AUR: <a href="https://aur.archlinux.org/packages/libfprint-vfs0090-git/" class="text-blue-600 dark:text-blue-400 hover:underline">libfprint-vfs0090-git</a>.</p>
</li>
<li>
<p class="my-2 dark:text-gray-200">Edit the fprintd.service file on Fedora to execute fprintd from arch:</p>
<p class="my-2 dark:text-gray-200">(This is the hacky part)</p>
<blockquote>
<p class="my-2 dark:text-gray-200">/bedrock/strata/fedora/usr/lib/systemd/system/fprintd.service</p>
</blockquote>
<blockquote>
<p class="my-2 dark:text-gray-200">ExecStart=/bedrock/bin/strat arch /usr/lib/fprintd</p>
</blockquote>
<p class="my-2 dark:text-gray-200">Make sure fprintd is systemctl enable'd.</p>
</li>
<li>
<p class="my-2 dark:text-gray-200">Enable fingerprint authentication in Fedora:</p>
<blockquote>
<p class="my-2 dark:text-gray-200"># authselect enable-feature with-fingerprint</p>
</blockquote>
</li>
</ol>
<p class="my-2 dark:text-gray-200">(This was figured out over weeks and may need reboots in between steps or other changes I forgot to mention)</p>]]>
    </content>
    <id>https://toranm.me/post/2020-03-13-fingerprint-x1-yoga/</id>
    <link href="https://toranm.me/post/2020-03-13-fingerprint-x1-yoga/"/>
    <published>2020-03-13T00:00:00.000Z</published>
    <summary>This shows how the Validity Sensor 138a:0090 fingerprint sensor can be made to work on Linux.
This Sensor is used in various ThinkPads such as the X1 Carbon (4. Gen) or in my case the X1 Yoga (1. Gen).</summary>
    <title>Getting the fingerprint sensor on the Lenovo ThinkPad X1 Yoga (1. Gen) to work</title>
    <updated>2020-03-13T00:00:00.000Z</updated>
  </entry>
  <entry>
    <content>
      <![CDATA[<p class="my-2 dark:text-gray-200">I moved to Jekyll because it allows for explicitly naming one layout to be extended. Using Hugo I felt like having to fight with the lookup order. This is the primary reason.</p>
<p class="my-2 dark:text-gray-200">Other differences from Jekyll compared to Hugo are:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li>Plugin support</li>
<li>Less strict separation between layout and content</li>
<li>No org-mode support</li>
<li>Longer build times</li>
</ul>]]>
    </content>
    <id>https://toranm.me/post/2019-07-25-why-jekyll/</id>
    <link href="https://toranm.me/post/2019-07-25-why-jekyll/"/>
    <published>2019-07-25T00:00:00.000Z</published>
    <summary>I moved to Jekyll because it allows for explicitly naming one layout to be extended. Using Hugo I felt like having to fight with the lookup order. This is the primary reason.</summary>
    <title>Why I migrated from Hugo to Jekyll</title>
    <updated>2019-07-25T00:00:00.000Z</updated>
  </entry>
</feed>
