<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2026-10-26T22:22:53Z</updated>
  <generator>https://nostr.now</generator>

  <title>Nostr notes by Niels Leenheer</title>
  <author>
    <name>Niels Leenheer</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.now/npub1vufdhucw4k9w87c4rmgtpulc5hunsek3dgtq2cfeqv7y5e5pr2rqt70ef5.rss" />
  <link href="https://nostr.now/npub1vufdhucw4k9w87c4rmgtpulc5hunsek3dgtq2cfeqv7y5e5pr2rqt70ef5" />
  <id>https://nostr.now/npub1vufdhucw4k9w87c4rmgtpulc5hunsek3dgtq2cfeqv7y5e5pr2rqt70ef5</id>
  <icon>https://cdn.masto.host/frontendsocial/accounts/avatars/113/465/950/592/845/058/original/3f22ee446e306bab.jpg</icon>
  <logo>https://cdn.masto.host/frontendsocial/accounts/avatars/113/465/950/592/845/058/original/3f22ee446e306bab.jpg</logo>




  <entry>
    <id>https://nostr.now/nevent1qqspj4rw7x4snuq9mf2kqmlv5qtnh9kjhc69cvelxd4qmvx67h54qyczypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvg377gh</id>
    
      <title type="html">And it is now the best ESC/POS and StarPRNT renderer there is. ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqspj4rw7x4snuq9mf2kqmlv5qtnh9kjhc69cvelxd4qmvx67h54qyczypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvg377gh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs00seqzddquecmwj8xgg9llvsk0srvhu7gpspucq62zmx588ktw0qtqq2qe&#39;&gt;nevent1q…q2qe&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;And it is now the best ESC/POS and StarPRNT renderer there is. Probably even better than some printers.&lt;br/&gt;&lt;br/&gt;But it will probably be used by just me. Or at most a handful of people. &lt;br/&gt;&lt;br/&gt;And that is fine. I love this project.
    </content>
    <updated>2026-09-25T14:03:04Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs00seqzddquecmwj8xgg9llvsk0srvhu7gpspucq62zmx588ktw0qzypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv2rwvm6</id>
    
      <title type="html">I generated receipts using a dozen different open-source encoders ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs00seqzddquecmwj8xgg9llvsk0srvhu7gpspucq62zmx588ktw0qzypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv2rwvm6" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxm78x57mzgsp5flustjmpd4t5tfh7fftcuqhhpcmyv8e4s6cz35c3rta5c&#39;&gt;nevent1q…ta5c&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;I generated receipts using a dozen different open-source encoders and test suites of other rendered and compared them manually with the output of dozens of printers. Painstakingly making sure to capture every single quirk and detail...
    </content>
    <updated>2026-09-25T14:01:28Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsxm78x57mzgsp5flustjmpd4t5tfh7fftcuqhhpcmyv8e4s6cz35czypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv6lujch</id>
    
      <title type="html">The result is a renderer that exactly matches a real printer. And ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsxm78x57mzgsp5flustjmpd4t5tfh7fftcuqhhpcmyv8e4s6cz35czypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv6lujch" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs8kg60frtd9plw2rtpegevxxk8dgz9ks43dx8238z8er54fuxegvgxvwdfh&#39;&gt;nevent1q…wdfh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;The result is a renderer that exactly matches a real printer. And it does not just support the code my own projects generate…&lt;br/&gt; &lt;img src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/117/332/027/630/942/896/original/d9cc5c1214b2cf57.png&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-09-25T13:59:37Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs8kg60frtd9plw2rtpegevxxk8dgz9ks43dx8238z8er54fuxegvgzypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv0zatzr</id>
    
      <title type="html">And to render receipts, you need a bitmap font at specific sizes. ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs8kg60frtd9plw2rtpegevxxk8dgz9ks43dx8238z8er54fuxegvgzypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv0zatzr" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvgk9qk99vjpaylhujnrauh264585l9fs82u6rwxg2vkh4k7wg23c7vfj4y&#39;&gt;nevent1q…fj4y&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;And to render receipts, you need a bitmap font at specific sizes. And there wasn&amp;#39;t yet one...&lt;br/&gt;&lt;br/&gt;So I created a bitmap font editor... I know 🤪&lt;br/&gt; &lt;img src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/117/332/018/563/934/383/original/952aa515f0fc45f3.png&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-09-25T13:56:40Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsvgk9qk99vjpaylhujnrauh264585l9fs82u6rwxg2vkh4k7wg23czypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvadwg88</id>
    
      <title type="html">But... what I really wanted is a renderer. For two reasons - some ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsvgk9qk99vjpaylhujnrauh264585l9fs82u6rwxg2vkh4k7wg23czypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvadwg88" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszx8ja5sx4p3etled3fw4d62k9fxer92vsspvhaxek4amuxy7neaczvrr7p&#39;&gt;nevent1q…rr7p&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;But... what I really wanted is a renderer. For two reasons - some printers only support bitmaps, and I wanted to be able to print on those too.&lt;br/&gt;&lt;br/&gt;But I also wanted to have a preview to see how a receipt rendered.&lt;br/&gt; &lt;img src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/117/332/005/181/141/732/original/2b7594ffa4fbe5d5.png&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-09-25T13:53:29Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqszx8ja5sx4p3etled3fw4d62k9fxer92vsspvhaxek4amuxy7neaczypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv26jyh3</id>
    
      <title type="html">From the moment I&amp;#39;ve been working on this - 15 years ago - ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqszx8ja5sx4p3etled3fw4d62k9fxer92vsspvhaxek4amuxy7neaczypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv26jyh3" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsffzjqqjsc8lrnesrzgegrppk2jcngj2uhy4gd99f5w63655nx50g6d85xh&#39;&gt;nevent1q…85xh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;From the moment I&amp;#39;ve been working on this - 15 years ago - I&amp;#39;ve always wanted to build a decoder, so that I could inspect what we actually send to the printer... every single command that it receives.&lt;br/&gt; &lt;img src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/117/331/998/453/816/104/original/f1e63d38229214cc.png&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-09-25T13:51:15Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsffzjqqjsc8lrnesrzgegrppk2jcngj2uhy4gd99f5w63655nx50gzypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvvqsr4f</id>
    
      <title type="html">And you end up with bytes. Just raw bytes that you send to the ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsffzjqqjsc8lrnesrzgegrppk2jcngj2uhy4gd99f5w63655nx50gzypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvvqsr4f" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsffsn6zxrs5t6pdz09aretz9vtamv454kctd7tv466k7pjtm9jryqrz6gzr&#39;&gt;nevent1q…6gzr&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;And you end up with bytes. Just raw bytes that you send to the printer - also with libraries that I created...&lt;br/&gt; &lt;img src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/117/331/994/952/382/449/original/25d7a5b2eb5cfec3.png&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-09-25T13:49:32Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsffsn6zxrs5t6pdz09aretz9vtamv454kctd7tv466k7pjtm9jryqzypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv526kgc</id>
    
      <title type="html">But let&amp;#39;s rewind. You start with some JavaScript and my ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsffsn6zxrs5t6pdz09aretz9vtamv454kctd7tv466k7pjtm9jryqzypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv526kgc" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsydxzeq4t4qu9snp7wank04qh2kfl9dkt7ttztte7d5v8d5k8r85ctzu6jt&#39;&gt;nevent1q…u6jt&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;But let&amp;#39;s rewind. You start with some JavaScript and my ReceiptPrinterEncoder library to create the actual receipt. From JavaScript, in the browser or a server. Or using Capacitor or Electron. I&amp;#39;ve build integrations for everything.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://point-of-sale.dev&#34;&gt;https://point-of-sale.dev&lt;/a&gt;&lt;br/&gt; &lt;img src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/117/331/983/950/410/334/original/2ade201a22efcb9c.png&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-09-25T13:48:10Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsydxzeq4t4qu9snp7wank04qh2kfl9dkt7ttztte7d5v8d5k8r85czypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvdyv0rv</id>
    
      <title type="html">And this is what I&amp;#39;ve been spending my evenings on lately. A ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsydxzeq4t4qu9snp7wank04qh2kfl9dkt7ttztte7d5v8d5k8r85czypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvdyv0rv" />
    <content type="html">
      And this is what I&amp;#39;ve been spending my evenings on lately. A decoder for receipt printer protocols. You can take the bytes that get send to a receipt printer and inspect the commands that are inside of it. And... actually see a render of the receipt.&lt;br/&gt;&lt;br/&gt;Only useful for a hand full of people. And me.&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/117/331/974/010/484/223/original/d99116b7bf73ecd7.mp4&#34;&gt;&lt;/video&gt;&lt;br/&gt;
    </content>
    <updated>2026-09-25T13:44:24Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqs2jravqyk5wpr7rlw3tpmqs9djgsjhkc5pc85x30p2eptteh2y20czypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv4ntm50</id>
    
      <title type="html">RE: https://front-end.social/@heydon/117315437800953545 I&amp;#39;ve ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqs2jravqyk5wpr7rlw3tpmqs9djgsjhkc5pc85x30p2eptteh2y20czypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv4ntm50" />
    <content type="html">
      RE: &lt;a href=&#34;https://front-end.social/@heydon/117315437800953545&#34;&gt;https://front-end.social/@heydon/117315437800953545&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve seen Heydon&amp;#39;s talk a week or two ago at [@smashingconf](&lt;a href=&#34;https://mastodon.social/@smashingconf&#34;&gt;https://mastodon.social/@smashingconf&lt;/a&gt; ) and it was amazing. I just loved it so much. &lt;br/&gt;&lt;br/&gt;So if you want to see it... come down to Dordrecht in The Netherlands... A handful of tickets are still available.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://www.fronteersconf.org&#34;&gt;https://www.fronteersconf.org&lt;/a&gt;&lt;blockquote class=&#34;border-l-05rem border-l-strongpink border-solid&#34;&gt;&lt;div class=&#34;-ml-4 bg-gradient-to-r from-gray-100 dark:from-zinc-800 to-transparent mr-0 mt-0 mb-4 pl-4 pr-2 py-2&#34;&gt;quoting &lt;br/&gt;&lt;span itemprop=&#34;mentions&#34; itemscope itemtype=&#34;https://schema.org/Article&#34;&gt;&lt;a itemprop=&#34;url&#34; href=&#34;/note1s0w8hwkeh5j0w27ypnfmh9y9jwvx2e59dhzlxw2ddx2hj8xfakfqxm5j9h&#34; class=&#34;bg-lavender dark:prose:text-neutral-50 dark:text-neutral-50 dark:bg-garnet px-1&#34;&gt;note1s0w…5j9h&lt;/a&gt;&lt;/span&gt;&lt;br/&gt; &lt;/div&gt; Who is going to #fronteersConf (🦇 DARK MODE 🌚)? I have a feeling it will be pretty special. Tickets available here: &lt;a href=&#34;https://www.fronteers.nl/en/conference/&#34;&gt;https://www.fronteers.nl/en/conference/&lt;/a&gt;&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/117/315/424/123/120/606/original/2a831710a964a019.mp4&#34;&gt;&lt;/video&gt;&lt;br/&gt; &lt;/blockquote&gt;
    </content>
    <updated>2026-09-24T17:07:04Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsz7v3vf2ttedw3matsj5ly3rkjdyupqxqtvk0zlkcxar2d9clqelczypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvp59jks</id>
    
      <title type="html">Take a Joy-Con and connect it with WebHID, draw a picture in the ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsz7v3vf2ttedw3matsj5ly3rkjdyupqxqtvk0zlkcxar2d9clqelczypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgvp59jks" />
    <content type="html">
      Take a Joy-Con and connect it with WebHID, draw a picture in the air and capture it with the sensors. Create an SVG path and insert in the DOM. Apply CSS styling. Sample the DOM and use WebUSB to convert to ILDA and send it to a laser projector. &lt;br/&gt;&lt;br/&gt;I created the worlds most complicated laserpointer…&lt;br/&gt;&lt;video controls width=&#34;100%&#34; class=&#34;max-h-[90vh] bg-neutral-300 dark:bg-zinc-700&#34;&gt;&lt;source src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/116/351/601/206/686/862/original/86dd54ff76a93137.mp4&#34;&gt;&lt;/video&gt;&lt;br/&gt;
    </content>
    <updated>2026-04-05T10:22:29Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsxkrvdvm8q5yrjct8kl5h85pf6yclckank44q5058js8gq5a2jmuszypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv6kgl3y</id>
    
      <title type="html">Want to know how I created this? Check my blog post with an ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsxkrvdvm8q5yrjct8kl5h85pf6yclckank44q5058js8gq5a2jmuszypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgv6kgl3y" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsdwf9x5sm43uxm9pn3dnm0nlppuvvdt0mg3rjfalh9q6vlc0j067s4fwtx3&#39;&gt;nevent1q…wtx3&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;Want to know how I created this? &lt;br/&gt;&lt;br/&gt;Check my blog post with an explanation of the math, the techniques I used and the problems I ran into.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://nielsleenheer.com/articles/2026/css-is-doomed-rendering-doom-in-3d-with-css/&#34;&gt;https://nielsleenheer.com/articles/2026/css-is-doomed-rendering-doom-in-3d-with-css/&lt;/a&gt;
    </content>
    <updated>2026-03-27T15:18:10Z</updated>
  </entry>

  <entry>
    <id>https://nostr.now/nevent1qqsdwf9x5sm43uxm9pn3dnm0nlppuvvdt0mg3rjfalh9q6vlc0j067szypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgva00jj0</id>
    
      <title type="html">CSS is DOOMed! I&amp;#39;ve build DOOM in CSS and every wall, floor, ...</title>
    
    <link rel="alternate" href="https://nostr.now/nevent1qqsdwf9x5sm43uxm9pn3dnm0nlppuvvdt0mg3rjfalh9q6vlc0j067szypn39klnp6kc4clmz50dpv8nlzjljwrx694pvptp8ypncjnxsydgva00jj0" />
    <content type="html">
      CSS is DOOMed!&lt;br/&gt;&lt;br/&gt;I&amp;#39;ve build DOOM in CSS and every wall, floor, barrel, and imp is a div, positioned in 3D space using CSS transforms.&lt;br/&gt;&lt;br/&gt;&lt;a href=&#34;https://cssdoom.wtf&#34;&gt;https://cssdoom.wtf&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Try it out! But... not every browser can handle it. This is taking the browser to its limit. Chrome has some issues. Safari too. Bugs will be filed.&lt;br/&gt; &lt;img src=&#34;https://cdn.masto.host/frontendsocial/media_attachments/files/116/301/800/628/808/007/original/da39c38dd8b4a407.jpg&#34;&gt; &lt;br/&gt;
    </content>
    <updated>2026-03-27T15:16:48Z</updated>
  </entry>

</feed>