<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>viktorstrate on qpqp.dk</title>
    <link>/</link>
    <description>Posts on qpqp.dk</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <managingEditor>viktorstrate@gmail.com (Viktor Strate Kløvedal)</managingEditor>
    <webMaster>viktorstrate@gmail.com (Viktor Strate Kløvedal)</webMaster>
    <lastBuildDate>Fri, 05 Sep 2025 15:55:24 +0200</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Tempo</title>
      <link>/project/tempo/</link>
      <author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <pubDate>Fri, 05 Sep 2025 15:34:43 +0200</pubDate><author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <guid>/project/tempo/</guid>
      <description>&lt;p&gt;Tempo is a new &lt;a href=&#34;https://en.wikipedia.org/wiki/Choreographic_programming&#34;&gt;choreographic programming langauge&lt;/a&gt; that I have been working on over the last couple of months now.&lt;/p&gt;&#xA;&lt;!-- readmore --&gt;&#xA;&lt;h2 id=&#34;what-is-choreographic-programming&#34;&gt;What is Choreographic Programming?&lt;/h2&gt;&#xA;&lt;p&gt;Choreographic programming is a relatively new programming paradigm for writing distributed systems from a global viewpoint.&lt;/p&gt;&#xA;&lt;p&gt;A choreographic program specifies the communications performed by the participating processes in the system and the local computations they perform.&lt;/p&gt;&#xA;&lt;p&gt;A compiler can automatically transform a choreographic program into an executable implementation for each role.&#xA;This compilation procedure is called projection.&#xA;Running the projections concurrently will yield the global behavior described by the choreography.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Tempo is a new &lt;a href=&#34;https://en.wikipedia.org/wiki/Choreographic_programming&#34;&gt;choreographic programming langauge&lt;/a&gt; that I have been working on over the last couple of months now.&lt;/p&gt;&#xA;&lt;!-- readmore --&gt;&#xA;&lt;h2 id=&#34;what-is-choreographic-programming&#34;&gt;What is Choreographic Programming?&lt;/h2&gt;&#xA;&lt;p&gt;Choreographic programming is a relatively new programming paradigm for writing distributed systems from a global viewpoint.&lt;/p&gt;&#xA;&lt;p&gt;A choreographic program specifies the communications performed by the participating processes in the system and the local computations they perform.&lt;/p&gt;&#xA;&lt;p&gt;A compiler can automatically transform a choreographic program into an executable implementation for each role.&#xA;This compilation procedure is called projection.&#xA;Running the projections concurrently will yield the global behavior described by the choreography.&lt;/p&gt;&#xA;&lt;h2 id=&#34;choreographic-programming-in-practice&#34;&gt;Choreographic Programming in Practice&lt;/h2&gt;&#xA;&lt;p&gt;Currently, a lot of choreographic programming languages are purely theoretical.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&#xA;However, more and more practical languages have arrived over the last couple of years.&#xA;Some are full programming languages such as &lt;a href=&#34;https://www.choral-lang.org/&#34;&gt;Choral&lt;/a&gt; which targets Java, while others (&lt;a href=&#34;https://github.com/lovrosdu/klor&#34;&gt;Klor&lt;/a&gt;, &lt;a href=&#34;https://github.com/gshen42/HasChor&#34;&gt;HasChor&lt;/a&gt;, and &lt;a href=&#34;https://github.com/lsd-ucsc/ChoRus&#34;&gt;ChoRus&lt;/a&gt;) are implemented as library-level DSLs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-make-another-one&#34;&gt;Why make another one?&lt;/h2&gt;&#xA;&lt;p&gt;I set out to build a completely new choreographic programming language from scratch because I wanted a choreographic language that can project to multiple host languages.&#xA;The idea is that you can write one choreographic program and then project it to libraries in multiple different normal programming languages.&lt;/p&gt;&#xA;&lt;p&gt;Currently, Tempo can project to Go, TypeScript, and Java libraries.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://www.cambridge.org/core/books/introduction-to-choreographies/65D3DA3CFF11AB835452CBC97FAE4830&#34;&gt;Introduction to Choreographies&lt;/a&gt; book, gives a simple introduction to the theory.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</content:encoded>
    </item>
    <item>
      <title>Real-time 3D Autostereogram with FaceID</title>
      <link>/project/autostereogram/</link>
      <author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <pubDate>Wed, 05 Apr 2023 22:43:28 +0200</pubDate><author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <guid>/project/autostereogram/</guid>
      <description>&lt;p&gt;Some months ago, I was introduced to a book series called &lt;a href=&#34;https://www.magiceye.com/&#34;&gt;Magic Eye&lt;/a&gt;.&#xA;The books have no text, only some strange repeating patterns throughout the page.&#xA;But when you stare at a page for long enough and let your eyes unfocus, a 3D image &amp;ldquo;pops out of the page&amp;rdquo;.&#xA;When I first heard this I wasn&amp;rsquo;t quite convinced, but after trying it and seeing it myself I was surprised by how well it works.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Some months ago, I was introduced to a book series called &lt;a href=&#34;https://www.magiceye.com/&#34;&gt;Magic Eye&lt;/a&gt;.&#xA;The books have no text, only some strange repeating patterns throughout the page.&#xA;But when you stare at a page for long enough and let your eyes unfocus, a 3D image &amp;ldquo;pops out of the page&amp;rdquo;.&#xA;When I first heard this I wasn&amp;rsquo;t quite convinced, but after trying it and seeing it myself I was surprised by how well it works.&lt;/p&gt;&#xA;&lt;p&gt;I really wanted to know how it worked, so I set out to write a program that could generate these kinds of pictures.&#xA;I knew that the FaceID camera of my iPad uses 3D to map your face to make it more secure.&#xA;I was wondering then if it would be possible to combine this somehow.&#xA;What would it look like, if you could see yourself &amp;ldquo;pop out&amp;rdquo; of the iPad screen?&lt;/p&gt;&#xA;&lt;div class=&#34;row&#34;&gt;&#xA;&lt;div class=&#34;col&#34; style=&#34;max-width: 350px&#34;&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;a href=&#34;/project/autostereogram/images/autostereogram.jpg&#34; target=&#34;_blank&#34;&gt;&#xA;  &lt;img&#xA;    srcset=&#34;/project/autostereogram/images/autostereogram_hu_6bf0d6095ab9682b.webp 480w, /project/autostereogram/images/autostereogram_hu_37c694a67acd80ce.webp 960w, /project/autostereogram/images/autostereogram_hu_8836131b02732d77.webp 1280w, /project/autostereogram/images/autostereogram_hu_e98ac03b704a1ccc.webp 2048w&#34;&#xA;    sizes=&#34;(min-width: 480px) 480px, (min-width: 960px) 960px, (min-width: 1280px) 1280px, 2048px&#34;&#xA;    src=&#34;/project/autostereogram/images/autostereogram.jpg&#34;&#xA;    alt=&#34;Autostereogram render&#34;&#xA;  /&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;col&#34; style=&#34;max-width: 350px&#34;&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;a href=&#34;/project/autostereogram/images/faceid.jpg&#34; target=&#34;_blank&#34;&gt;&#xA;  &lt;img&#xA;    srcset=&#34;/project/autostereogram/images/faceid_hu_d9932d07c8b3209b.webp 480w, /project/autostereogram/images/faceid_hu_178504c2b306b023.webp 960w, /project/autostereogram/images/faceid_hu_c79ffb437ebaa945.webp 1280w, /project/autostereogram/images/faceid_hu_e5425fadaa664ff8.webp 2038w&#34;&#xA;    sizes=&#34;(min-width: 480px) 480px, (min-width: 960px) 960px, (min-width: 1280px) 1280px, 2038px&#34;&#xA;    src=&#34;/project/autostereogram/images/faceid.jpg&#34;&#xA;    alt=&#34;3D FaceID depth map&#34;&#xA;  /&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;!-- readmore --&gt;&#xA;&lt;h2 id=&#34;what-is-an-autostereogram&#34;&gt;What is an Autostereogram?&lt;/h2&gt;&#xA;&lt;p&gt;I quickly discovered that this effect is called an Autostereogram and that Wikipedia has a &lt;a href=&#34;https://en.wikipedia.org/wiki/Autostereogram&#34;&gt;great article&lt;/a&gt; for it.&#xA;If you don&amp;rsquo;t know what it is, I&amp;rsquo;d highly recommend giving the article a read, but here is the gist of it.&lt;/p&gt;&#xA;&lt;p&gt;Using a repeated pattern with pixels shifted in the right way, it&amp;rsquo;s possible to generate an image where if you make your eyes focus behind the image,&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; a 3D figure appears to pop out of the plane in quite a convincing way.&lt;/p&gt;&#xA;&lt;h2 id=&#34;random-dot-stereograms&#34;&gt;Random Dot Stereograms&lt;/h2&gt;&#xA;&lt;p&gt;When researching how this effect works, I first encountered a method to achieve this effect called Single Image Random Dot Stereograms (SIRDS).&#xA;I found it in &lt;a href=&#34;https://www2.cs.sfu.ca/CourseCentral/414/li/material/refs/SIRDS-Computer-94.pdf&#34;&gt;this paper&lt;/a&gt; which also proposed an algorithm for generating these images.&#xA;This method was the easiest for me to understand intuitively but I ended up using the next method for my implementation since that method was much easier to implement for the GPU.&lt;/p&gt;&#xA;&lt;p&gt;The key idea of this method is that the if you show two dots on a piece of paper. You can focus your eyes behind the paper in a way such that the two dots converge to one,&#xA;that is when the left eye looks at the left dot and the right eye on the right dot.&#xA;The longer apart the two dots are, the further behind the paper you must focus your eyes.&#xA;Then, by sampling random spots on the paper and then drawing two dots equally spaced apart from the spot.&#xA;By changing the spacing between the dot pairs slightly, the eyes will be able to match the dot pairs at different depths.&#xA;This can be used to trick the eyes to see a 3D illusion.&#xA;This may be better shown by the diagram below.&lt;/p&gt;&#xA;&lt;div class=&#34;row&#34; style=&#34;margin-bottom:2rem&#34;&gt;&#xA;&lt;figure class=&#34;col&#34; style=&#34;max-width: 350px&#34;&gt;&#xA;  &lt;img width=&#34;300&#34; height=&#34;300&#34; src=&#34;images/diagram-close.svg&#34; alt=&#34;Diagram showing focus point behind screen, short distance focus closer to screen.&#34; /&gt;&#xA;  &lt;figcaption&gt;Diagram showing focus point behind screen, short distance focus closer to screen.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure class=&#34;col&#34; style=&#34;max-width: 350px&#34;&gt;&#xA;  &lt;img width=&#34;300&#34; height=&#34;300&#34; src=&#34;images/diagram-far.svg&#34; alt=&#34;Diagram showing focus point behind screen, long distance focus further from screen.&#34; /&gt;&#xA;  &lt;figcaption&gt;Diagram showing focus point behind screen, long distance focus further from screen.&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;In this diagram, the distance between the two points (shown by the red line) change how long behind the screen the focus point is.&lt;/p&gt;&#xA;&lt;h2 id=&#34;depth-maps&#34;&gt;Depth maps&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;TODO&lt;/code&gt; Write section&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;shifting-method&#34;&gt;Shifting method&lt;/h2&gt;&#xA;&lt;p&gt;An alternative to the random dot method, where pairs of dots are scattered randomly across the image,&#xA;is to repeat a pattern across the image.&#xA;Then, by shifting the pattern slightly on the horizontal axis based on the desired depth, the same 3D illusion can be made.&lt;/p&gt;&#xA;&lt;p&gt;The algorithm goes something like this:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Generate a pattern with a certain width and use it to fill out the first rows of pixels in the image.&lt;/li&gt;&#xA;&lt;li&gt;Going from left to right, fill in the blank pixel by sampling the pixel, offset by the width of the pattern to the left of the current pixel,&#xA;but shifted slightly based on a depth map.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h1 id=&#34;outline&#34;&gt;Outline&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;del&gt;What is an Autostereogram?&lt;/del&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;del&gt;Original paper&lt;/del&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;del&gt;why doesn&amp;rsquo;t it work for GPUs&lt;/del&gt;&lt;/li&gt;&#xA;&lt;li&gt;Alternative (shifting) method&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Depth maps&lt;/li&gt;&#xA;&lt;li&gt;The Algorithm&lt;/li&gt;&#xA;&lt;li&gt;Making it run on the GPU&lt;/li&gt;&#xA;&lt;li&gt;Combining it with the depth map of FaceID&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;demo-time&#34;&gt;Demo time&lt;/h2&gt;&#xA;&lt;video controls style=&#34;max-width: 350px&#34;&gt;&#xA;  &lt;source src=&#34;images/demo.mp4&#34; type=&#34;video/mp4&#34;&gt;&#xA;  Your browser does not support the video tag.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;This effect can also be made to work when looking in front of the image, but I didn&amp;rsquo;t experiment much with this.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</content:encoded>
    </item>
    <item>
      <title>Photoview</title>
      <link>/project/photoview/</link>
      <author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <pubDate>Sun, 02 Apr 2023 17:09:06 +0200</pubDate><author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <guid>/project/photoview/</guid>
      <description>&lt;div class=&#34;row&#34;&gt;&#xA;&lt;div class=&#34;col&#34;&gt;&#xA;&lt;p&gt;Photoview is a simple and user-friendly photo gallery that&amp;rsquo;s made for photographers and aims to provide an easy and fast way to navigate directories, with thousands of high-resolution photos.&lt;/p&gt;&#xA;&lt;p&gt;You configure Photoview to look for photos and videos within a directory on your file system. The scanner automatically picks up your media and start to generate thumbnail images to make browsing super fast. When your media has been scanned they show up on the website, organised in the same way as on the filesystem.&lt;/p&gt;</description>
      <content:encoded>&lt;div class=&#34;row&#34;&gt;&#xA;&lt;div class=&#34;col&#34;&gt;&#xA;&lt;p&gt;Photoview is a simple and user-friendly photo gallery that&amp;rsquo;s made for photographers and aims to provide an easy and fast way to navigate directories, with thousands of high-resolution photos.&lt;/p&gt;&#xA;&lt;p&gt;You configure Photoview to look for photos and videos within a directory on your file system. The scanner automatically picks up your media and start to generate thumbnail images to make browsing super fast. When your media has been scanned they show up on the website, organised in the same way as on the filesystem.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;col&#34;&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;a href=&#34;/project/photoview/photoview-screenshot.png&#34; target=&#34;_blank&#34;&gt;&#xA;  &lt;img&#xA;    srcset=&#34;/project/photoview/photoview-screenshot_hu_a2e359b2681f965.webp 480w, /project/photoview/photoview-screenshot_hu_3b7f7a716f205a8c.webp 960w, /project/photoview/photoview-screenshot_hu_3908122ec099b358.webp 1280w, /project/photoview/photoview-screenshot_hu_4f4ab936faa630a5.webp 1441w&#34;&#xA;    sizes=&#34;(min-width: 480px) 480px, (min-width: 960px) 960px, (min-width: 1280px) 1280px, 1441px&#34;&#xA;    src=&#34;/project/photoview/photoview-screenshot.png&#34;&#xA;    alt=&#34;Screenshot of Photoview website&#34;&#xA;  /&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Try it at &lt;a href=&#34;https://photos.qpqp.dk/&#34;&gt;photos.qpqp.dk&lt;/a&gt;, using credentials &lt;code&gt;demo&lt;/code&gt; / &lt;code&gt;demo&lt;/code&gt;.&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;Photoview is a simple and user-friendly photo gallery, that can be run on a personal server.&#xA;It&amp;rsquo;s made for photographers and aims to provide an easy and fast way to navigate directories, with thousands of high resolution photos.&lt;/p&gt;&#xA;&lt;!-- readmore --&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sync with file system&lt;/li&gt;&#xA;&lt;li&gt;Multiple users&lt;/li&gt;&#xA;&lt;li&gt;Share media and albums&lt;/li&gt;&#xA;&lt;li&gt;Supports &lt;em&gt;RAW&lt;/em&gt; photos and &lt;em&gt;EXIF&lt;/em&gt; parsing&lt;/li&gt;&#xA;&lt;li&gt;Video support&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/viktorstrate/photoview&#34;&gt;Find the project on Github&lt;/a&gt;&lt;/p&gt;&#xA;</content:encoded>
    </item>
    <item>
      <title>MacOS Touch Bar in the Browser</title>
      <link>/project/browser-touchbar/</link>
      <author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <pubDate>Fri, 08 Apr 2022 00:00:00 +0000</pubDate><author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <guid>/project/browser-touchbar/</guid>
      <description>&lt;p&gt;Some Macbook Pro models come with the notorious Touch Bar that Apple quickly abandoned again.&#xA;After having had such a model for a while now, I have a hard time finding practical use cases for it.&#xA;One of the reasons why it is not that useful is that apps and the system do not take enough advantage of it.&lt;/p&gt;&#xA;&lt;p&gt;But then I got an idea that would actually make it useful for me.&#xA;I wanted to build a browser add-on that allows the native Touch Bar to communicate with websites&#xA;to let buttons and other Touch Bar controls perform actions on them.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Some Macbook Pro models come with the notorious Touch Bar that Apple quickly abandoned again.&#xA;After having had such a model for a while now, I have a hard time finding practical use cases for it.&#xA;One of the reasons why it is not that useful is that apps and the system do not take enough advantage of it.&lt;/p&gt;&#xA;&lt;p&gt;But then I got an idea that would actually make it useful for me.&#xA;I wanted to build a browser add-on that allows the native Touch Bar to communicate with websites&#xA;to let buttons and other Touch Bar controls perform actions on them.&lt;/p&gt;&#xA;&lt;!-- readmore --&gt;&#xA;&lt;h2 id=&#34;how-it-works&#34;&gt;How it works&lt;/h2&gt;&#xA;&lt;p&gt;The project consists of two parts, a regular browser extension and a native binary that controls the Touch Bar.&#xA;The two parts communicate back and forth using &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging&#34;&gt;Native Messaging&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The browser extension exposes a bridging API to small JavaScript scripts that are injected into webpages using &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts#Matching_URL_patterns&#34;&gt;URL pattern matching&lt;/a&gt;.&#xA;These small scripts are called &lt;a href=&#34;https://github.com/viktorstrate/native-touchbar-addon/tree/master/browser-addon/src/touchbar-packets&#34;&gt;touchbar packets&lt;/a&gt; and are formatted much like &lt;a href=&#34;https://en.wikipedia.org/wiki/Userscript&#34;&gt;Userscripts&lt;/a&gt;, with a header describing the name of the packet and one or more URL matches.&lt;/p&gt;&#xA;&lt;p&gt;The binary is a small CLI app written mostly in Swift, its purpose is to receive configurations for the Touch Bar from the browser extension, update the Touch Bar accordingly and send any user interaction events back to the browser.&#xA;The binary uses a private system API to show the new Touch Bar on top of the original. Thanks to &lt;a href=&#34;https://github.com/a2/touch-baer&#34;&gt;Touch Bär&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;future-of-the-project&#34;&gt;Future of the project&lt;/h2&gt;&#xA;&lt;p&gt;I have afterward completely disabled the dynamic touch bar, which means that the addon doesn&amp;rsquo;t work with that setup.&#xA;Also, since Apple is moving away from touch bars, I didn&amp;rsquo;t want to invest a lot of time in a project that will ultimately become useless.&#xA;Therefore, I am not planning on working further on the project.&#xA;I&amp;rsquo;m still however open to pull requests adding new features or supporting new websites.&lt;/p&gt;&#xA;&lt;p&gt;But it has been a fun project and very educational for me.&lt;/p&gt;&#xA;</content:encoded>
    </item>
    <item>
      <title>Neuron - toy neural network</title>
      <link>/project/neuron/</link>
      <author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <pubDate>Thu, 13 Sep 2018 00:00:00 +0000</pubDate><author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <guid>/project/neuron/</guid>
      <description>&lt;div class=&#34;row&#34;&gt;&#xA;  &lt;div class=&#34;col&#34;&gt;&#xA;&lt;p&gt;A toy neural network, written from scratch in javascript,&#xA;along with some different examples.&lt;/p&gt;&#xA;&lt;p&gt;I made the project to learn the basics of how neural networks work under the hood.&#xA;I built it while following &lt;a href=&#34;https://www.youtube.com/playlist?list=PLRqwX-V7Uu6Y7MdSCaIfsxc561QI0U0Tb&#34;&gt;Daniel Shiffman&amp;rsquo;s video series on Neural Networks&lt;/a&gt;,&#xA;and it&amp;rsquo;s therefore very much inspired by his &lt;a href=&#34;https://github.com/CodingTrain/Toy-Neural-Network-JS&#34;&gt;Toy Neural Network&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;After building the core library, which in itself is very easy to use.&#xA;I built &lt;a href=&#34;https://viktorstrate.github.io/neuron/examples/&#34;&gt;some examples using it&lt;/a&gt;.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;col&#34;&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;a href=&#34;/project/neuron/sandbox.png&#34; target=&#34;_blank&#34;&gt;&#xA;  &lt;img&#xA;    srcset=&#34;/project/neuron/sandbox_hu_bde0f477c880b2b.webp 480w, /project/neuron/sandbox_hu_71c0c11d2dee9f89.webp 960w, /project/neuron/sandbox_hu_c545b67cccfbecfd.webp 1280w, /project/neuron/sandbox_hu_5c11d04885c4c2a5.webp 1822w&#34;&#xA;    sizes=&#34;(min-width: 480px) 480px, (min-width: 960px) 960px, (min-width: 1280px) 1280px, 1822px&#34;&#xA;    src=&#34;/project/neuron/sandbox.png&#34;&#xA;    alt=&#34;Screenshot of sandbox page&#34;&#xA;  /&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;</description>
      <content:encoded>&lt;div class=&#34;row&#34;&gt;&#xA;  &lt;div class=&#34;col&#34;&gt;&#xA;&lt;p&gt;A toy neural network, written from scratch in javascript,&#xA;along with some different examples.&lt;/p&gt;&#xA;&lt;p&gt;I made the project to learn the basics of how neural networks work under the hood.&#xA;I built it while following &lt;a href=&#34;https://www.youtube.com/playlist?list=PLRqwX-V7Uu6Y7MdSCaIfsxc561QI0U0Tb&#34;&gt;Daniel Shiffman&amp;rsquo;s video series on Neural Networks&lt;/a&gt;,&#xA;and it&amp;rsquo;s therefore very much inspired by his &lt;a href=&#34;https://github.com/CodingTrain/Toy-Neural-Network-JS&#34;&gt;Toy Neural Network&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;After building the core library, which in itself is very easy to use.&#xA;I built &lt;a href=&#34;https://viktorstrate.github.io/neuron/examples/&#34;&gt;some examples using it&lt;/a&gt;.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;col&#34;&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;a href=&#34;/project/neuron/sandbox.png&#34; target=&#34;_blank&#34;&gt;&#xA;  &lt;img&#xA;    srcset=&#34;/project/neuron/sandbox_hu_bde0f477c880b2b.webp 480w, /project/neuron/sandbox_hu_71c0c11d2dee9f89.webp 960w, /project/neuron/sandbox_hu_c545b67cccfbecfd.webp 1280w, /project/neuron/sandbox_hu_5c11d04885c4c2a5.webp 1822w&#34;&#xA;    sizes=&#34;(min-width: 480px) 480px, (min-width: 960px) 960px, (min-width: 1280px) 1280px, 1822px&#34;&#xA;    src=&#34;/project/neuron/sandbox.png&#34;&#xA;    alt=&#34;Screenshot of sandbox page&#34;&#xA;  /&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;</content:encoded>
    </item>
    <item>
      <title>Color Picker Plus</title>
      <link>/project/color-picker-plus/</link>
      <author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <pubDate>Wed, 13 Jun 2018 00:00:00 +0000</pubDate><author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <guid>/project/color-picker-plus/</guid>
      <description>&lt;div class=&#34;row&#34;&gt;&#xA;  &lt;div class=&#34;col&#34;&gt;&#xA;&lt;p&gt;Color Picker Plus is an extension to the macOS Colors panel.&lt;/p&gt;&#xA;&lt;p&gt;I have always thought that Apple&amp;rsquo;s color picker window is quite bad for picking precise colors,&#xA;especially for working with colors on the web.&lt;/p&gt;&#xA;&lt;p&gt;I do though like the way the color picker in Photoshop works,&#xA;where the color is sampled from a color square with brightness and saturation along its width and height.&#xA;I wanted to mimic that while also making it easy to copy and paste colors from HEX or RGB.&lt;/p&gt;</description>
      <content:encoded>&lt;div class=&#34;row&#34;&gt;&#xA;  &lt;div class=&#34;col&#34;&gt;&#xA;&lt;p&gt;Color Picker Plus is an extension to the macOS Colors panel.&lt;/p&gt;&#xA;&lt;p&gt;I have always thought that Apple&amp;rsquo;s color picker window is quite bad for picking precise colors,&#xA;especially for working with colors on the web.&lt;/p&gt;&#xA;&lt;p&gt;I do though like the way the color picker in Photoshop works,&#xA;where the color is sampled from a color square with brightness and saturation along its width and height.&#xA;I wanted to mimic that while also making it easy to copy and paste colors from HEX or RGB.&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;col&#34; style=&#34;max-width: 400px;&#34;&gt;&#xA;&lt;p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;a href=&#34;/project/color-picker-plus/color-picker-plus.png&#34; target=&#34;_blank&#34;&gt;&#xA;  &lt;img&#xA;    srcset=&#34;/project/color-picker-plus/color-picker-plus_hu_75f9fa13a9b62cc9.webp 480w, /project/color-picker-plus/color-picker-plus_hu_4eab7593236121db.webp 960w, /project/color-picker-plus/color-picker-plus_hu_5411ebc11f8ce0a5.webp 1280w, /project/color-picker-plus/color-picker-plus_hu_852e39efea5a37b5.webp 1358w&#34;&#xA;    sizes=&#34;(min-width: 480px) 480px, (min-width: 960px) 960px, (min-width: 1280px) 1280px, 1358px&#34;&#xA;    src=&#34;/project/color-picker-plus/color-picker-plus.png&#34;&#xA;    alt=&#34;Screenshot of the color extension window&#34;&#xA;  /&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Fortunately, MacOS supports plugins for the color picker window.&#xA;When a color plugin is installed, a new icon appears in the toolbar.&lt;/p&gt;&#xA;&lt;p&gt;But at the time, I couldn&amp;rsquo;t find any good color picker extensions.&#xA;The only one I could find was a very basic and old one called &lt;em&gt;Hex Color Picker&lt;/em&gt;, for making colors directly from HEX values.&lt;/p&gt;&#xA;&lt;p&gt;So making a better one was a great excuse to learn more about how such extensions actually work.&lt;/p&gt;&#xA;</content:encoded>
    </item>
    <item>
      <title>Photography</title>
      <link>/photos/</link>
      <author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>viktorstrate@gmail.com (Viktor Strate Kløvedal)</author>
      <guid>/photos/</guid>
      <description>&lt;p&gt;I like to get out with my camera to take photos in my spare time.&#xA;Below you can see some of the pictures i&amp;rsquo;ve taken.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;I like to get out with my camera to take photos in my spare time.&#xA;Below you can see some of the pictures i&amp;rsquo;ve taken.&lt;/p&gt;&#xA;</content:encoded>
    </item>
  </channel>
</rss>