<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/feed.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Markus Toran total feed</title>
    <link>https://toranm.me/</link>
    <description>Feed of all my public posts</description>
    <language>en</language>
    <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
    <atom:link href="https://toranm.me/feed/rss.xml" rel="self"/>
    <atom:link href="https://pubsubhubbub.superfeedr.com/" rel="hub"/>
    <item>
      <title>Banking — Part 2</title>
      <link>https://toranm.me/post/2026-06-28-banking-part-2/</link>
      <description>Since my last post on banking I got to try out new services and old ones changed a little.</description>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">Since my last post on banking I got to try out new services and old ones changed a little.</p>
<h2 id="short-reviews" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#short-reviews" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Short Reviews</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>
<h2 id="trading-212" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#trading-212" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Trading 212</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">Trading 212 is basically three things in one: Neobroker, CFD Trading and a debit card. The debit card is pretty good, they offered a very high cashback (2%) and it is easy to use, and offers advanced features. I have not used the broker, but it seems very good as well. I have not used the CFD trading. I would not recommend it, because it is very speculative and if you do not have the capabilities of a hedge fund you will lose money. If you make money anyway, you got lucky, think of it as hitting a jackpot in gambling.</p>
<h2 id="bluecode" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#bluecode" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Bluecode</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">Bluecode is very cool. It syndicates with AliPay+ and allows you to pay with it, I tried it in Aldi and it worked without problems. I also tried it at a coffee vending machine and it worked as follows: You scan the QR code with the app, you get presented a webview that allows you to select 1€ / 3€ / 5€. You select, confirm and return back into the native Bluecode UI, allowing you to confirm again. It debited the account, the machine gets topped up after a couple of seconds. You then select the product you want, it produces it, and you get refunded the difference.</p>
<p class="my-2 dark:text-gray-200">It also has payment roaming with Discover, they are assigned a credit card number block. The app has builtin NFC for this, the card terminal of the vendor contacts Discover's backend, it reaches Bluecode and does the withdrawal.</p>
<h2 id="flykk" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#flykk" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Flykk</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">Flykk offers a Diners Club / Discover card (virtual and physical). The app is pretty barebones and buggy. I only got it to obtain a Diners Club. Curve has a Diners Club front end. Paying with it works. In <a href="https://www.vielfliegertreff.de/forum/threads/flykk-diners-club-debit-card.162980/page-6" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">the Vielfliegertreff forum</a> I read the following which I agree with:</p>
<blockquote>
<p class="my-2 dark:text-gray-200">[...] flykk is a showcase for the banking platform from ISX. This product is a white-label solution for multi-currency providers. [Offering lounge access] is not something ISX has good reasons for. It's just a pure B2B operation, and as long as no business partner wants to see how the Diners Benefits use case works, I don't think anything will come of it.</p>
</blockquote>
<h2 id="american-express" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#american-express" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">American Express</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">American Express is different than Visa/MC. First, the card number is only 15 numbers, but the security code is four. Second, it has an additional security code only used when directly interfacing with AMEX. Paying with the physical card in store sends you a notification via GPay. Amex owns Payback and Payback partners usually (read: must) accept Amex. You get 1 Payback point per three euro spent. Amex first holds them in escrow and credits the complete amount to your Payback account once a month. Revolut does not allow charging your account with Amex, neither does PayPal. But PayPal allows you to send money to someone else backed by an Amex. You can therefore just transfer it to someone, have them transfer it back to you via SEPA Instant. You also get Payback points for it. I think the card has a very convoluted design, it has written American Express three times on the front. I like that the card has my Payback number on it.</p>
<h2 id="sumup-pay" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#sumup-pay" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Sumup 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></h2>
<p class="my-2 dark:text-gray-200">Sumup Pay offers a free physical card, 5% cashback on supermarkets and 2% on payments made on Sumup terminals. The app is good, other than seeing purchases and sending money, it only offers a few features. I have not encountered many bugs.</p>
<h2 id="deblock" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#deblock" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">deblock</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 looks modern, but feels generic. It offers customizing the IBAN, which I have not seen before. It also offers free card top-up, also via GPay. deblock also offers a built-in cryptocurrency wallet and buying and staking cryptocurrency.</p>
<h2 id="bitpanda-coinbase-metamask" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#bitpanda-coinbase-metamask" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Bitpanda, Coinbase, Metamask</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">These three are grouped because they all offer a debit card supported by cryptocurrency.</p>
<h2 id="bank-norwegian" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#bank-norwegian" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Bank Norwegian</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">Bank Norwegian is still a WebView, it got a new design, other than that not much has changed, the app is still really slow and bad. Paying with it works.</p>
<h2 id="chase" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#chase" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Chase</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">Chase entered the German market with a… wait for it… money market account. The app is easy to use and its interest rate is high at the moment. Overall pretty good, but lacks features, hopefully they will do a debit card.</p>
<h2 id="paypal" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#paypal" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">PayPal</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">PayPal had some issues with GPay but I was not impacted. I am in the beta program for PayPal and the novel app is way better. Bugs with entering commas in amounts have been fixed. PayPal is also leaning more into a points program, providing NFC payment in the app, and providing a Splitwise alternative.</p>
<h2 id="wero" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#wero" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Wero</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 use Wero provided by Revolut. Sending and receiving money between friends works well, other than that I have not used it.</p>
<h2 id="revolut" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#revolut" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<p class="my-2 dark:text-gray-200">Revolut sponsors Rome Fiumicino (FCO) airport. There, they offer vending machines for debit cards. I thought this was really cool. Revolut is also still very good. I have changed my subscription to Metal. It offers a nice metal physical card, as well as a bunch of subscriptions for free including Perplexity, Uber and a VPN, 3GB of global SIM card data and airport lounge access for 29 euro.</p>
<h2 id="c24" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#c24" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<p class="my-2 dark:text-gray-200">C24 is still very good. They have not changed much to be honest.</p>
<h2 id="scalable-capital" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#scalable-capital" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Scalable Capital</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">Scalable is the major Trade Republic alternative. I tried it out and it is a good broker. I prefer TR because of the debit card.</p>
<h2 id="recommended-setup-as-of-june-2026" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#recommended-setup-as-of-june-2026" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Recommended Setup as of June 2026</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">C24 for paying invoices, because their scan-to-transfer is really good. Revolut for innovative features, including wero. Bluecode for AliPay+ and Diners Club frontend. Curve is still a must for advanced use. Bank Norwegian is a good credit card offer. Trade Republic is still an ok broker.</p>
<p class="my-2 dark:text-gray-200">AMEX, Chase and Sumup Pay only if you are interested in cashback or trying out new banks. Skip deblock, and the other cryptocurrency cards. Maybe also skip PayPal if you can avoid the strong network effects.</p>
<h2 id="schufa-score" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#schufa-score" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Schufa Score</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">If you are concerned about my Schufa score, do not worry, it is excellent. I use Bonify to track it. I also do regular GDPR takeouts. Schufa overhauled their score and it is supposed to be simpler and more understandable.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Die #GPN24 war anstrengender als erwartet. Am Ende hat…</title>
      <link>https://toranm.me/post/2026-06-13-gpn24/</link>
      <description>Die #GPN24 war anstrengender als erwartet. Am Ende hat vieles geklappt, aber es hätte auch einfacher und besser sein können. Überanstrengung optimiert nur einen Zielparameter; man sollte das eigentlich Wichtige nicht vergessen und es nachhaltig erreichen.</description>
      <category>GPN24</category>
      <pubDate>Sat, 13 Jun 2026 15:35:05 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">Die <a href="https://toranm.me/tags/gpn24/" class="u-tag-link pointer-events-none" rel="tag" tabindex="-1">#GPN24</a> war anstrengender als erwartet. Am Ende hat vieles geklappt, aber es hätte auch einfacher und besser sein können. Überanstrengung optimiert nur einen Zielparameter; man sollte das eigentlich Wichtige nicht vergessen und es nachhaltig erreichen.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Some Songs</title>
      <link>https://toranm.me/post/2026-06-12-some-songs/</link>
      <description>Here's a list of songs I like to listen to currently:</description>
      <pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">Here's a list of songs I like to listen to currently:</p>
<ul class="list-disc list-inside ml-4 dark:text-gray-200">
<li><a href="https://www.youtube.com/watch?v=2PpBU7EfiEY" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Headlock</a> and <a href="https://www.youtube.com/watch?v=z_EFWz-zlZs" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Hide and Seek by Imogen Heap</a></li>
<li><a href="https://www.youtube.com/watch?v=N7jFV2grxEo" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Politics by Laas</a></li>
<li><a href="https://www.youtube.com/watch?v=RUQl6YcMalg" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Therefore I am by Billie Eilish</a></li>
<li><a href="https://www.youtube.com/watch?v=UU8_RmdTu30" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Synergie by Ceren</a></li>
</ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>Label Designer</title>
      <link>https://toranm.me/post/2026-06-01-label-designer/</link>
      <description>After my own personal asset labels were made in Inkscape, I created a web-based label designer to make it easier to create and print labels. You can try it out here.</description>
      <pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">After my own personal asset labels were made in Inkscape, I created a web-based label designer to make it easier to create and print labels. You can try it out <a href="https://toranm.me/asset-labels/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">here</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Film Review: Backrooms (2026)</title>
      <link>https://toranm.me/post/2026-05-30-backrooms/</link>
      <description>Short Backrooms review: I liked it overall, still a horror film.</description>
      <pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">Short Backrooms review: I liked it overall, still a horror film.</p>
<p class="my-2 dark:text-gray-200">It's a horror film. I know why I don't like horror so much. What I liked about this movie was that it did not rely so much on typical repeating horror themes, especially in comparison to the trailers shown before the film. You know it, scenes that show a mom picking up her kids at school, or scenes of a house in the woods. The movie had only a small amount of these. Still, this film did not change my mind about this genre.</p>
<p class="my-2 dark:text-gray-200">Backrooms is the debut film of Kane Parsons and was produced by A24. It's the feature-film adaptation of a YouTube series by him, originating from a creepypasta.</p>
<p class="my-2 dark:text-gray-200">I liked the effects adapted from elements found in video games. In particular it can be compared to Stanley Parable, Antichamber, or Garry's Mod, which I have not seen in another film before. The acting and camera work were solid.</p>
<p class="my-2 dark:text-gray-200">The psychological themes were okay, but could have been explored in more detail.</p>
<p class="my-2 dark:text-gray-200">Pacing in the first half was a little too slow for me.</p>
<p class="my-2 dark:text-gray-200">The horror element is mostly the "uncanny valley." The overall layout of an office building looks alright on a superficial level, but the details are wrong. This is explained very explicitly in the dialogue.</p>
<p class="my-2 dark:text-gray-200">It was ironic that a guy selling furniture moved through a non-furnished world.</p>
<p class="my-2 dark:text-gray-200">I liked the aspects related to architecture. Visually, this topic and the horror elements are joined and presented fittingly for a horror movie. There were only a few shots I would call beautiful overall, but its style still does not look bland or unimaginative. It is mostly set indoors.</p>
<p class="my-2 dark:text-gray-200"><span class="spoiler-text" role="button" tabindex="0" aria-expanded="false" aria-label="Spoiler, click to reveal">The culminating cut was executed so well. A collective moan of relief was heard through the cinema. The suspense ended, but many questions were left unanswered.</span></p>
<p class="my-2 dark:text-gray-200">Finally, having more of the "backrooms" be outdoors could have provided amazing visuals; imagine a famous facade of a beautiful building but with the backrooms effect. But this would not fit the movie so well, because the claustrophobic setting would be weakened.</p>
<p class="my-2 dark:text-gray-200">I got to watch the film in ODEON near Tottenham Court Rd in London. The venue was underground in a busy shopping district. I would say the cinema was nothing special, but I liked the sound system. A new experience for me was hearing the subway in the cinema; it did not significantly affect the viewing experience.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Updating Rayhunter</title>
      <link>https://toranm.me/post/2026-02-07-rayhunter-2/</link>
      <description>Since my last post, the Rayhunter project has made significant progress.</description>
      <pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">Since my last post, the Rayhunter project has made significant progress.</p>
<h2 id="introduction" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#introduction" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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>
<h2 id="updating-rayhunter" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#updating-rayhunter" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="new-features" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#new-features" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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/_astro/webinterface.oCYQBiP3.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 underline hover:no-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/_astro/eff_logo.CSsLJAgm.jpg" alt="EFF logo on the Rayhunter" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h2 id="conclusion" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-underline">EFF's post</a> on the Rayhunter.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>2025 Year Review</title>
      <link>https://toranm.me/post/2026-01-03-2025-year-review/</link>
      <description>2025 has been a mixed year for me. The Good times were pretty good, but the bad times were so bad.</description>
      <pubDate>Sat, 03 Jan 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 a researcher 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 it's 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 a good year. I participated in fewer CTFs than 2024, but I was able to focus on quality over quantity. I made a writeup on the LakeCTF quals <a href="https://toranm.me/post/2025-11-29-lakectf-pls-respond/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">pls respond</a> challenge.</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:encoded>
    </item>
    <item>
      <title>Cyber Resilience Act - Compliance Risk oder Consumer Respect Act?</title>
      <link>https://toranm.me/post/2025-12-17-cra/</link>
      <description>I gave a talk on CRA (Cyber Resilience Act) at GPN 22 in German. It was a while ago, but if you want to know a thing or two about CRA, check it out!</description>
      <category>talk</category>
      <pubDate>Wed, 17 Dec 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">I gave a talk on CRA (Cyber Resilience Act) at GPN 22 in German. It 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 underline hover:no-underline">Media CCC Link</a></p>]]>
      </content:encoded>
    </item>
    <item>
      <title>LakeCTF 2025 – pls respond – Writeup</title>
      <link>https://toranm.me/post/2025-11-29-lakectf-pls-respond/</link>
      <description>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.</description>
      <pubDate>Sat, 29 Nov 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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>
<h2 id="challenge-overview" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#challenge-overview" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-underline">chall.pcap</a></p>
<h2 id="opening-the-pcap" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#opening-the-pcap" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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/_astro/ws-config-dlt.DId5SLZZ.png" alt="Wireshark DLT_USER configuration" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/_astro/ws-config-protocols.DL0XIXNo.png" alt="Wireshark protocol configuration" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h2 id="analyzing-the-packets" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#analyzing-the-packets" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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/_astro/ws-analyze-overview-full.DBBxw89-.png" alt="Wireshark overview" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/_astro/ws-analyze-overview-gsm.DQzwXQRM.png" alt="Wireshark gsm" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h2 id="extracting-the-sms-messages" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<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, an 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 underline hover:no-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/_astro/ws-packet-1.qH8cqhIk.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 underline hover:no-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">An 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 a 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/_astro/ws-packet-2.z9PbFakE.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/_astro/large_anim_16x16_f0.C_HVIbsi.png" alt="SMS" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/_astro/large_anim_16x16_f1.CYrs0MXe.png" alt="h4s" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/_astro/large_anim_16x16_f2.oa43Gkb_.png" alt="s0_m" loading="lazy" class="w-full h-auto rounded-xl" />
<img src="https://toranm.me/_astro/large_anim_16x16_f3.B-8cLlEm.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 underline hover:no-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/_astro/ws-packet-3.K5_2187z.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 underline hover:no-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 underline hover:no-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/_astro/ws-packet-4.C9e1McT5.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}"></p>
<p class="my-2 dark:text-gray-200">So finally, the fourth part of the flag is: <code>_ext3nsi0ns}</code>.</p>
<h2 id="wrong-avenues" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#wrong-avenues" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="issues-with-the-specification" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<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>
<h2 id="conclusion" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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, it's 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 underline hover:no-underline">Royal Roppers</a> and <a href="https://kitctf.de/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">KITCTF</a>, combining each country's 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>
<h2 id="sources" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#sources" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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): - <a href="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=747" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Originating GSM specification</a> - <a href="https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=141" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">.docx by 3GPP</a> - <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 underline hover:no-underline">PDF by ETSI</a></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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">iMelody Wikipedia</a></li>
<li><a href="https://www.irda.org/standards/pubs/iMelody.pdf" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">iMelody by the Infrared Data Association</a></li>
</ul>
</li>
</ul>
<h2 id="annex-a-more-on-the-wireless-vector-graphic-wvg" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<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:encoded>
    </item>
    <item>
      <title>Other People's Websites</title>
      <link>https://toranm.me/post/2025-11-17-other-peoples-websites/</link>
      <description>When designing my own website, I drew inspiration from various other people's websites. Here are a few that stood out to me:</description>
      <pubDate>Mon, 17 Nov 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 underline hover:no-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 underline hover:no-underline">Bert Peters</a></li>
<li><a href="https://jwz.org/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">jwz</a></li>
<li><a href="https://www.joachim-breitner.de/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Joachim Breitner</a></li>
<li><a href="https://surma.dev/things/webgpu/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Surma</a></li>
<li><a href="https://rknight.me/blog/styling-rss-and-atom-feeds/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Danny van Kooten</a></li>
<li><a href="https://www.gwern.net/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Gwern</a></li>
<li><a href="https://www.jeremykun.com/shortform/2024-08-07-1414/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Glyph</a></li>
<li><a href="https://jarv.is/notes/hugo-to-nextjs" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Jarv</a></li>
<li><a href="https://sebastianhahner.de/blog/2025/live-coding-roadmap/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-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 underline hover:no-underline">Pascoda</a></li>
<li><a href="https://herman.bearblog.dev/digital-hygiene-passwords/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Herman Martinus</a></li>
<li><a href="https://chrisliebaer.de/blog/docker-backups/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Chrisliebaer</a></li>
<li><a href="https://ju256.rip/posts/kitctfctf22-date/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Ju256</a></li>
<li><a href="https://intrigus.org/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Intrigus</a></li>
<li><a href="https://wachter-space.de/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Phil Venables</a></li>
<li><a href="https://blog.fefe.de/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Tim Bray</a></li>
<li><a href="https://bradfitz.com/2020/01/27/leaving-google" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Moxie Marlinspike</a></li>
<li><a href="https://martin.leyrer.priv.at/static/events2025.html" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Stuart Thomson</a></li>
<li><a href="https://davi.sh/til/astro/content-url-routing/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Chris McLeod</a></li>
<li><a href="https://github.com/welpo/tabi" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">tabi</a></li>
<li><a href="https://xeiaso.net/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Xe Iaso</a></li>
<li><a href="https://bepyan.me/en/post/astro-sitemap/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Edward Kim</a></li>
<li><a href="https://gsong.dev/articles/astro-feed-unified/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">George Song</a></li>
<li><a href="https://tilde.town/~ydreniv/blog/beginner-hcard-hentry/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">YDRENIV</a></li>
<li><a href="https://jamesg.blog/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">James</a></li>
<li><a href="https://taggart-tech.com/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Taggart Tech</a></li>
<li><a href="https://www.dannyvankooten.com/sitemap.xml" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Danny van Kooten</a></li>
<li><a href="https://emile.space/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Hanemile</a></li>
<li><a href="https://ik0ri4n.de/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Snarfed</a></li>
<li><a href="https://endler.dev/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Mathias Endler</a></li>
<li><a href="https://www.0xkato.xyz/linux-boot/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">0xkato</a></li>
<li><a href="https://mxb.dev/blog/using-webmentions-on-static-sites/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-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 underline hover:no-underline">Brett Cannon</a></li>
<li><a href="https://mckerlie.com/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Adam McKerlie</a></li>
<li><a href="https://www.joshwcomeau.com/css/full-bleed/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Ondrej Sevcik</a></li>
<li><a href="https://andre.arko.net/note/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Andre Arko</a></li>
<li><a href="https://blog.babelo.xyz/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Alisa Sireneva</a></li>
<li><a href="https://krebsonsecurity.com" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">Troy Hunt</a></li>
<li><a href="https://ericmigi.com/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Eric Migicovsky</a></li>
</ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>Personal Asset Labels</title>
      <link>https://toranm.me/post/2025-11-02-asset-label/</link>
      <description>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.</description>
      <pubDate>Sun, 02 Nov 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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>
<h2 id="overall-concept" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#overall-concept" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="first-design-iteration" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#first-design-iteration" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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/_astro/asset-label-v1.Bj5rn2Ki.png" alt="Asset Label Design" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h2 id="second-design-iteration" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#second-design-iteration" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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/_astro/asset-label-v2.9UdxnyVk.png" alt="Asset Label Design with Logos" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h2 id="small-label-variant" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#small-label-variant" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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/_astro/asset-label-v2-small.BbaOSpdm.png" alt="Asset Label Design with Logos" loading="lazy" class="w-full h-auto rounded-xl" /></p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Why I Migrated from Jekyll to Astro — Introducing Website V6</title>
      <link>https://toranm.me/post/2025-10-22-why-astro/</link>
      <description>I did a major revamp of this website, rewriting it from scratch with Astro and Tailwind after outgrowing my old, dated Jekyll setup.</description>
      <category>featured</category>
      <pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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>
<h2 id="motivation" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#motivation" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="my-jekyll-website" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#my-jekyll-website" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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>
<h2 id="why-astro--tailwind" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#why-astro--tailwind" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="the-new-website" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#the-new-website" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 is 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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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>
<h2 id="future-work" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#future-work" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="conclusion" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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:encoded>
    </item>
    <item>
      <title>DOI: Beyond the Basics</title>
      <link>https://toranm.me/post/2025-09-12-doi-beyond-the-basics/</link>
      <description>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!</description>
      <category>talk</category>
      <category>featured</category>
      <pubDate>Fri, 12 Sep 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">About the DOI Foundation</a></li>
<li><a href="https://www.dona.net/mpas" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">DONA MPAs</a></li>
<li><a href="https://handle.net" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Handle.Net</a></li>
<li><a href="https://doi.org/10.1000/182" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">DOI Handbook</a></li>
<li><a href="https://doi.org/10.64000/wd6rx-vpq73" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-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 underline hover:no-underline">Participation Reports</a></li>
<li><a href="https://www.crossref.org/members/prep/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">DataCite Fee Model</a></li>
<li><a href="https://www.crossref.org/fees/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-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 underline hover:no-underline">DOI Resolution Documentation</a></li>
<li><a href="https://shortdoi.org/" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">ShortDOI.org</a></li>
<li><a href="https://doi.org/10.17487/rfc7669" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">DOI</a></li>
</ul>
</li>
</ol>]]>
      </content:encoded>
    </item>
    <item>
      <title>Apps I Programmed</title>
      <link>https://toranm.me/post/2025-08-17-apps-i-programmed/</link>
      <description>Android App development was an 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. Later, 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.</description>
      <pubDate>Sun, 17 Aug 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">Android App development was an 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. Later, 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>
<h2 id="simple-pay" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#simple-pay" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="drink-manager" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#drink-manager" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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>
<h2 id="rent-and-lend" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#rent-and-lend" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<p class="my-2 dark:text-gray-200">Rent and Lend was developed during my time at university in the Software Engineering Practice module. It's 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>
<h2 id="hotinert_two" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#hotinert_two" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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. It's inspired by the Among Us minigame "Weather Node". This game was developed in conjunction with a Tetris clone webapp that was controlled by the phone's yaw and pitch sensors.</p>
<h2 id="glass-authenticator" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#glass-authenticator" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 set up 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:encoded>
    </item>
    <item>
      <title>Pixel 9 Pro Display Issue</title>
      <link>https://toranm.me/post/2025-07-01-p9p-display-issue/</link>
      <description>I bought a Pixel 9 Pro right after it was released. It now shows a vertical pink line on the display. A short rant.</description>
      <pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 its security features are the best on the market, I like having emergency satellite connectivity, 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:encoded>
    </item>
    <item>
      <title>Centrifugal Effects</title>
      <link>https://toranm.me/post/2025-06-23-centrifugal-effects/</link>
      <description>Centrifugal effects describe 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.</description>
      <pubDate>Mon, 23 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">Centrifugal effects describe 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 exceptionally, while straining the other subunits is not healthy in 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 be 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 in the long run, the main organization needs to reevaluate itself and focus on its core competencies and the essential.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Introducing: Decolight - A Colorful Light</title>
      <link>https://toranm.me/post/2025-06-08-decolight/</link>
      <description>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.</description>
      <pubDate>Sun, 08 Jun 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 underline hover:no-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 underline hover:no-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 underline hover:no-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:encoded>
    </item>
    <item>
      <title>Highly Refined Things</title>
      <link>https://toranm.me/post/2025-05-17-highly-refined-things/</link>
      <description>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.</description>
      <pubDate>Sat, 17 May 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 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 really takes a lot of brainpower to create, and then you scale it up, but repeating the same thing over and over and gluing 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:encoded>
    </item>
    <item>
      <title>Browsing Websites of Architects</title>
      <link>https://toranm.me/post/2025-05-05-architecture-on-the-web/</link>
      <description>A fun and inspiring way to experience the web: browse the websites of architects, brick and mortar ones, not software.</description>
      <pubDate>Mon, 05 May 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">Foster + Partners</a> (London): Reichstag Berlin renovation, Commerzbank Tower, Apple Park</li>
</ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>What's going on with Health Connect?</title>
      <link>https://toranm.me/post/2025-05-04-health-connect/</link>
      <description>I have been using 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.</description>
      <pubDate>Sun, 04 May 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">I have been using 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:encoded>
    </item>
    <item>
      <title>Cro das Genie</title>
      <link>https://toranm.me/post/2025-04-29-cro-das-genie/</link>
      <description>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.</description>
      <pubDate>Tue, 29 Apr 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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. It's 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:encoded>
    </item>
    <item>
      <title>Rayhunter on TP-Link M7350 v8</title>
      <link>https://toranm.me/post/2025-04-09-rayhunter-on-tp-link-m7350-v8/</link>
      <description>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.</description>
      <pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 underline hover:no-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 underline hover:no-underline">fork</a> and documentation to bring Rayhunter to the TP-Link M7350, which is available in Europe.</p>
<h2 id="rooting-the-tp-link-m7350-v8" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<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 underline hover:no-underline">rooting</a> <a href="https://github.com/m0veax/tplink_m7350/blob/main/open-v4.sh" class="text-blue-600 dark:text-blue-400 underline hover:no-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>
<span class="line"><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>
<span class="line"><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>
<span class="line"><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>
<span class="line"><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>
<span class="line"><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>
<span class="line"><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>
<span class="line"><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>
<span class="line"><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>
<h2 id="uploading-rayhunter" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#uploading-rayhunter" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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-daemon</span></span></code></pre>
<h2 id="starting-rayhunter" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#starting-rayhunter" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="rayhunter-web-interface" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#rayhunter-web-interface" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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/_astro/rayhunter_webinterface.D78qb2Sb.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/_astro/wireshark.DoleWiD4.png" alt="Screenshot of Wireshark of PCAPs" loading="lazy" class="w-full h-auto rounded-xl" /></p>
<h2 id="conclusion" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="sources" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#sources" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-underline">EFF Rayhunter</a></li>
<li><a href="https://github.com/m0veax/rayhunter-tplink-m7350" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">m0veax Rayhunter port</a></li>
<li><a href="https://github.com/EFForg/rayhunter/issues/186" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Issue 186</a> and <a href="https://github.com/EFForg/rayhunter/issues/106" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Issue 106</a></li>
<li><a href="https://github.com/m0veax/tplink_m7350" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">m0veax research on TP-Link M7350</a></li>
</ul>]]>
      </content:encoded>
    </item>
    <item>
      <title>10 Years of GPN</title>
      <link>https://toranm.me/post/2025-04-02-10-years-of-gpn/</link>
      <description>I noticed today that I have been attending the Gulaschprogrammiernacht (GPN) for 10 years now.</description>
      <pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 underline hover:no-underline">"What's cooking in GNOME?"</a> by <a href="https://blogs.gnome.org/muelli/" class="text-blue-600 dark:text-blue-400 underline hover:no-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 earlier GPN I attended, it must have been GPN8 in 2009. I remember because it was during Ursula von der Leyen's 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 underline hover:no-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:encoded>
    </item>
    <item>
      <title>New Domain Checklist</title>
      <link>https://toranm.me/post/2025-04-01-new-domain-checklist/</link>
      <description>When you start a new domain, you need to do routine tasks.</description>
      <pubDate>Tue, 01 Apr 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 underline hover:no-underline">Wayback Machine</a></li>
<li>Check the domain on <a href="https://www.virustotal.com/" class="text-blue-600 dark:text-blue-400 underline hover:no-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>Set up 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:encoded>
    </item>
    <item>
      <title>Analyzing FIDO MDS: The Good, The Bad and The Ugly or Which Passkey Vendor to Buy</title>
      <link>https://toranm.me/post/2025-03-30-fido-mds/</link>
      <description>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).</description>
      <pubDate>Sun, 30 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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>
<h2 id="introduction-to-passkeys" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#introduction-to-passkeys" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="advantages-of-passkeys" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#advantages-of-passkeys" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-underline">CVE-2024-9956</a> by Tobia Righi.</p>
<h2 id="attestation-and-the-metadata-service" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">here</a>. The MDS explorer shows the certification status of the devices.</p>
<h2 id="analyzing-the-mds" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#analyzing-the-mds" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-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 detail: 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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">GitHub</a> and based on <a href="https://github.com/BryanJacobs/FIDO2Applet" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-underline">security_model.md</a>]. The <a href="https://www.token2.com/img/pdf/FIDO2L2.pdf" class="text-blue-600 dark:text-blue-400 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">"next-generation smartcard"</a>, which has a wooden finish, a display and a fingerprint reader. Cryptnox builds a smartcard-based (Zoomer) crypto hardware wallet, which is FIDO certified.</p>
<h2 id="conclusion" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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:encoded>
    </item>
    <item>
      <title>Vote on my next blog post</title>
      <link>https://toranm.me/post/2025-03-29-vote-on-my-next-blogpost/</link>
      <description>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.</description>
      <pubDate>Sat, 29 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 underline hover:no-underline">Dreckstool</a>. You can find the voting page here: <a href="https://toranm.me/vote-blog-post" class="text-blue-600 dark:text-blue-400 underline hover:no-underline">Vote on my next blog post</a>.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>The Next Years</title>
      <link>https://toranm.me/post/2025-03-26-the-next-years/</link>
      <description>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.</description>
      <pubDate>Wed, 26 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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>
<h2 id="publish-a-paper" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#publish-a-paper" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="give-more-talks" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#give-more-talks" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="build-awesome-technology" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#build-awesome-technology" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 built with a tech stack I like. This would ideally come out of other projects, like my work or ctf.</p>
<h2 id="get-better-at-ctf" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<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>
<h2 id="do-more-organizing-of-events" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<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 of 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>
<h2 id="enrich-the-community" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#enrich-the-community" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 are 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 an event where a guy was introduced with "programmed since he was 10 and built 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:encoded>
    </item>
    <item>
      <title>Complexity and Simplicity</title>
      <link>https://toranm.me/post/2025-03-25-complexity/</link>
      <description>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 approach. Complexity or simplicity are unrelated to the quality of the result.</description>
      <pubDate>Tue, 25 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 approach. 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 built 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 do 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:encoded>
    </item>
    <item>
      <title>Being Unhappy with My Work</title>
      <link>https://toranm.me/post/2025-03-24-being-happy-of-your-work/</link>
      <description>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 studied 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.</description>
      <pubDate>Mon, 24 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 studied 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 others, the second one is that I am not happy with my work on its own. The former might be easier 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 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 don't 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. If 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:encoded>
    </item>
    <item>
      <title>In Praise of brat</title>
      <link>https://toranm.me/post/2025-03-22-in-praise-of-brat/</link>
      <description>Charli xcx's 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 makes you wonder how she passed it as a pop song. Apple and von dutch have been topping the charts, but the lesser known songs are also great. Take mean girls for example, its sound mixing piano and synths is so good.</description>
      <pubDate>Sat, 22 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">Charli xcx's 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 makes you wonder how she passed it as a pop song. Apple and von dutch have been topping the charts, but the lesser known songs are also great. Take mean girls for example, its 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 an 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 album, brat and it's 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 Germany's entry for the Eurovision Song Contest, Baller: it sounds like brat. Lady Gaga's 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:encoded>
    </item>
    <item>
      <title>Keep Innovating</title>
      <link>https://toranm.me/post/2025-03-21-keep-innovating/</link>
      <description>To /keep innovating/ is to innovate, and then to do it again. But you can't just do the same thing again. You need to do something new again.</description>
      <pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![CDATA[<p class="my-2 dark:text-gray-200">To /keep innovating/ is to innovate, and then to do it again. But you can't just do the same thing again. You need to do something new again.</p>
<h2 id="what-is-innovation" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#what-is-innovation" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="the-coolest-innovations" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#the-coolest-innovations" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="keep-innovating" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#keep-innovating" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="how-to-keep-innovating" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<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>
<h2 id="why-we-need-to-keep-innovating" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<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:encoded>
    </item>
    <item>
      <title>Goated Computer Science Papers: A list of classics</title>
      <link>https://toranm.me/post/2025-02-04-goated-cs-papers/</link>
      <description>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 it 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.</description>
      <pubDate>Tue, 04 Feb 2025 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 underline hover:no-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 it 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 being 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 business applications, but it can also be a tool for computer science. Programming is rooted in cs, but there is more to cs than investigating programming or applying 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>
<h2 id="what-makes-a-paper-goated" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 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 underline hover:no-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></h2>
<p class="my-2 dark:text-gray-200">Andreas Zeller recommends 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 effectively. 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. Consistently 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 - Vannevar 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 underline hover:no-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 cryptography, 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="vannevar-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="#vannevar-bushs-as-we-may-think" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Vannevar 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 underline hover:no-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 underline hover:no-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 underline hover:no-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 being relatively 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 underline hover:no-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 relatively simple and can be vividly explained, its security guarantees are interesting 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 underline hover:no-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. Saltzer 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 underline hover:no-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 underline hover:no-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 anonymous 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 underline hover:no-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 underline hover:no-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 noteworthy 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 underline hover:no-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 underline hover:no-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 underline hover:no-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">Moore is 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 underline hover:no-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 underline hover:no-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 consists 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 underline hover:no-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-harmful" 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-harmful" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Dijkstra's Go To Statement Considered Harmful</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 underline hover:no-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 series "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 underline hover:no-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:encoded>
    </item>
    <item>
      <title>Banking — Part 1</title>
      <link>https://toranm.me/post/2024-09-27-banking-part-1/</link>
      <description>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.</description>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 Norwegian</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 set up 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 underline hover:no-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>
<h2 id="ing-diba" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#ing-diba" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">Kordoba</a> as their core banking system.</p>
<h2 id="c24" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#c24" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">Mambu</a> as their core banking system.</p>
<h2 id="klarna" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#klarna" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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">Klarna's 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 underline hover:no-underline">is built in-house</a>.</p>
<h2 id="dkb" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#dkb" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">Finanz Informatik/F-I-TS</a>, which is part of Sparkassen-Finanzgruppe.</p>
<h2 id="revolut" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#revolut" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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">Revolut's 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 underline hover:no-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 Klarna's.</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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">core banking system in-house</a>.</p>
<h2 id="bank-norwegian" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#bank-norwegian" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-underline">Bank Norwegian</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>
<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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-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 underline hover:no-underline">Banqsoft</a> as their core banking system.</p>
<h2 id="local-vr-banks" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#local-vr-banks" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="trade-republic" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#trade-republic" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 ECB's 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 really 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>
<h2 id="curve" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#curve" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 retroactively which card gets charged. You can also use "if this then that" rules to set the card that gets charged.</p>
<h2 id="wise" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#wise" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<p class="my-2 dark:text-gray-200">Wise is honestly not that interesting.</p>
<h2 id="vimpay" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#vimpay" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="xpcard" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#xpcard" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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>
<h2 id="conclusion" class="group relative scroll-mt-20 text-3xl font-bold mt-6 mb-3 dark:text-gray-100"><a href="#conclusion" class="heading-anchor no-underline text-inherit block text-blue-600 dark:text-blue-400 underline hover:no-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></h2>
<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 underline hover:no-underline">Matrix room</a> if you want to discuss this further.</p>]]>
      </content:encoded>
    </item>
    <item>
      <title>Getting the fingerprint sensor on the Lenovo ThinkPad X1 Yoga (1. Gen) to work</title>
      <link>https://toranm.me/post/2020-03-13-fingerprint-x1-yoga/</link>
      <description>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).</description>
      <pubDate>Fri, 13 Mar 2020 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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. Nonetheless, this may be 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 underline hover:no-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 underline hover:no-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:encoded>
    </item>
    <item>
      <title>Why I migrated from Hugo to Jekyll</title>
      <link>https://toranm.me/post/2019-07-25-why-jekyll/</link>
      <description>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.</description>
      <pubDate>Thu, 25 Jul 2019 00:00:00 GMT</pubDate>
      <content:encoded>
        <![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 between Jekyll and 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:encoded>
    </item>
  </channel>
</rss>
