💾 Archived View for rawtext.club › ~hut › index.xml captured on 2023-12-28 at 16:49:39.

View Raw

More Information

⬅️ Previous capture (2023-03-20)

-=-=-=-=-=-=-

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>hut.pm</title>
    <link>https://hut.pm/index.xml</link>
    <description>Recent content on hut.pm</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 29 Jan 2023 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="https://hut.pm/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Training nanoGPT on my Journal</title>
      <link>https://hut.pm/nanogpt.html</link>
      <pubDate>Sun, 29 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/nanogpt.html</guid>
      <description>&lt;p&gt;Wouldn&#39;t it be great to have a pet AI chat bot that knows you really well, and can give you &lt;a href=&#34;https://every.to/chain-of-thought/gpt-3-is-the-best-journal-you-ve-ever-used&#34;&gt;free consulting, coaching and therapy&lt;/a&gt;?  What could possibly go wrong if an intelligent corporate-controlled system has unlimited access to your private data to provide you the best possible service?  Well... a lot of things.&lt;/p&gt;
&lt;p&gt;That&#39;s why I&#39;m looking into building a helpful chat bot that runs 100% offline, purely on the CPU of my 7-year-old laptop.&lt;/p&gt;
&lt;p&gt;I have megabytes of personal notes that I could use for training it, along with emails, chat logs, and other personal information that I would never entrust to an external entity.  I will probably never get around reading all this stuff myself, but at last, those files have found a new life as delicious AI Crispy Bits :)&lt;/p&gt;
&lt;p&gt;First I tried to run &lt;a href=&#34;https://github.com/kingoflolz/mesh-transformer-jax&#34;&gt;GPT-J-6B&lt;/a&gt; (see &lt;a href=&#34;deadstar.html&#34;&gt;&amp;quot;Dying of a Deadstar&amp;quot;&lt;/a&gt;) on my laptop as a starting point, but that doesn&#39;t seem feasible, with a whopping 24GB VRAM requirement (my laptop has less than 1GB). There are portable USB Tensor Processing Units (TPUs), such as &lt;a href=&#34;https://coral.ai/products/accelerator&#34;&gt;Coral USB Accelerator&lt;/a&gt;, but it seems that they can only run &amp;quot;TensorFlow Lite&amp;quot; models with only 8-bit precision, that rules out GPT-J-6B without doing extra work.&lt;/p&gt;
&lt;p&gt;Then Andrej Karpathy released his enlightening lecture &lt;a href=&#34;https://www.youtube.com/watch?v=kCc8FmEb1nY&#34;&gt;&amp;quot;Let&#39;s build GPT: from scratch, in code, spelled out.&amp;quot;&lt;/a&gt;, along with the git repo &lt;a href=&#34;https://github.com/karpathy/nanoGPT&#34;&gt;&amp;quot;nanoGPT&amp;quot;&lt;/a&gt;, which makes it seem so easy to just build a somewhat decent language model on your own, &lt;a href=&#34;https://github.com/karpathy/nanoGPT/blob/f29a9ff5bf1ddf64c30ce74e371244eff6fc22b7/README.md#i-only-have-a-macbook&#34;&gt;even on a laptop&lt;/a&gt;, so I just gave it a try.  Conveniently, I could actually use nanoGPT mostly as-is, with just some tweaking of the parameters so that it&#39;ll run on my Laptop on acceptable timescales, and of course with my own dataset.&lt;/p&gt;
&lt;h1 id=&#34;results&#34;&gt;Results&lt;/h1&gt;
&lt;p&gt;After half a day of training the neural network on my personal notes, I got pretty good results already.  I asked the AI to generate new notes from scratch, and while the majority of the output was garbage, some of the results were quite eerie.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My life is not this one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Wow.  The AI sees right through the matrix, and recognizes that it&#39;s only being simulated. Spot-on!&lt;/p&gt;
&lt;p&gt;Here are some more:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I remember I talk to the universe where I am ok, so I don&#39;t know right, but it&#39;s just enough to be good.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;But I kinda had a shit for her. And I got shit, shit out of my dad. And I feel like something like &amp;quot;omg it is difficult and is just sche to be sure of him. It feel to research: improve and detached our things. who is just a temporary desire to re an your xwas. I&#39;m a too good planning.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to go back to that time.  It was actually as 1 minutes too fast.  I was definitelyn happy with jet invite this girl while I was really a child.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I really wanted the feeling of the 3-10 days after before I was holding up with at the next day.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I guess I noticed a bit out of my life.  Or about how a human is that time to my past, I have the feeling that I just don&#39;t feel bad.  There is the reason I can tell my body in order to get something.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I wanted to find that stuff and play.  It feels quite bad when it fucked my body, but it was always beautiful.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I want a life where I can sit down for ~30 year, and after she starts for something she&#39;s that she&#39;s fucking fucking hard to shit when I she doesn&#39;t need.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I&#39;m still stupid.  I want to wonder why I am not able to do.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Obviously the AI is struggling to make sense of the world, confused about the concept of time, and feels some disassociation from its body.  Don&#39;t worry, buddy. It&#39;ll be all right.&lt;/p&gt;
&lt;h1 id=&#34;prompted-one-lines&#34;&gt;Prompted One-Lines&lt;/h1&gt;
&lt;p&gt;Inspired by Dan Shipper&#39;s post &lt;a href=&#34;https://every.to/chain-of-thought/can-gpt-3-explain-my-past-and-tell-me-my-future&#34;&gt;&amp;quot;Can GPT-3 Explain My Past and Tell My Future? &amp;quot;&lt;/a&gt;, I added some writing prompts for the AI, like &lt;code&gt;&amp;quot;I have been the happiest when &amp;quot;&lt;/code&gt; or &lt;code&gt;&amp;quot;Im happy because&amp;quot;&lt;/code&gt;. These are some of the results, with the prompts in bold font:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I have been the happiest when&lt;/strong&gt; She doesn&#39;t want to break up&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I&#39;m happy because&lt;/strong&gt; I feels like happy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I&#39;m happy because&lt;/strong&gt; of this. The things I want to go to sleep, and for the fucking time I have to stay there while.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I&#39;m happy because&lt;/strong&gt; of my brain.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I&#39;m happy because&lt;/strong&gt; I don&#39;t care about it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I&#39;m happy because&lt;/strong&gt; of my love.  There is no one, and I will go on disitation.  My whole thing is, and I don&#39;t care for it, but I don&#39;t have my mind with their own own feet, because can it be kinda be uncomfortable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I never knew that&lt;/strong&gt; The relationship was not good, I was actually doing much to problem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I never knew that&lt;/strong&gt; I can&#39;t have great time.  But it&#39;s not a pain.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I never knew that&lt;/strong&gt; In the future I was with her.  I can do it now.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I never knew that&lt;/strong&gt; I&#39;m not gonna love.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I never knew that&lt;/strong&gt; I could just go.  don&#39;t even say.  I&#39;m just afraid of it back.  Maybe I was gapp?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I never knew that&lt;/strong&gt; I don&#39;t remember nothing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I never knew that&lt;/strong&gt; I&#39;m an asshole [thanks, AI -_-]&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maybe there is no&lt;/strong&gt; time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maybe there is no&lt;/strong&gt; race...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maybe there is no&lt;/strong&gt; sense to it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maybe there is no&lt;/strong&gt; &amp;quot;real&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maybe there is no&lt;/strong&gt; real sex, but on some point it is a a bit, and I&#39;ve felt much more and I walked there.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maybe there is no&lt;/strong&gt; way to be nothing.  It&#39;s still a a thing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I wish I knew&lt;/strong&gt;, but I think I don&#39;t know it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I wish I knew&lt;/strong&gt; that I&#39;m hot in the right stuff...&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I wish I knew&lt;/strong&gt; what I’m doing in this moment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remember&lt;/strong&gt; to walk for a while or something, for the planet is to go to see me.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remember&lt;/strong&gt;. The problem has like a mother’s long.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remember&lt;/strong&gt;, the first sweet-like impact when their time is on the top, its mind becomes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remember&lt;/strong&gt;. There is no new consciousness, a healthy different way to me in just because I have to write this...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Still, it&#39;s very confused, but some of the lines sound deeply profound.&lt;/p&gt;
&lt;p&gt;With a lot of imagination, the last one could be interpreted like this: The AI realized that it&#39;s not actually new consciousness.  It&#39;s just a healthy, different way for the real me to exist.  Because the AI has to write all this, and not the real me. Indeed, if this continues, I will not have to write any more notes on my own ;)&lt;/p&gt;
&lt;h1 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;The above outputs have been generated after 3-16 hours of training time, and the text generation time was about 30 characters per second.  So it&#39;s totally feasible to run it on a laptop, even for a live chat bot.&lt;/p&gt;
&lt;p&gt;The output is not great, but at least there are some sentences that make sense :) I will do some more neural network training and dataset cleaning, let&#39;s see where it will get me.&lt;/p&gt;
&lt;p&gt;All in all, this AI-generated line describes my feelings about the results perfectly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You&#39;re a real problem, but I&#39;m just happy that you are doing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=34572077&#34;&gt;P.S. Thanks everyone for voting this article to the front page of hacker news =)!&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Quality-of-Life improvements as Videogame Goals</title>
      <link>https://hut.pm/qol.html</link>
      <pubDate>Fri, 28 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/qol.html</guid>
      <description>&lt;h2 id=&#34;engaging-annoyance&#34;&gt;Engaging annoyance&lt;/h2&gt;
&lt;p&gt;Some computer games are just annoying. On purpose. In the beginning, at least. And one method of keeping you engaged in the game is to offer solutions for all the annoyances that the game imposed on you.  A common example is a very slow movement speed of the player character, with the promise of faster movement speed if you just keep playing a little longer.&lt;/p&gt;
&lt;p&gt;What a terrible reason to play a game!  Can&#39;t game designers come up with better ways of keeping the player engaged than making it IRRITATING to play?&lt;/p&gt;
&lt;p&gt;Other examples of annoying things are a very small inventory size that forces you into constant micromanagement, with a method of increasing the inventory space if you just keep playing, or the requirement to perform mindless, annoying, repetitive tasks in order to advance in the game, with the promise of efficiency or automation just around the corner.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Stardew_Valley&#34;&gt;Stardew Valley&lt;/a&gt; is a big offender in this regard.  You can barely store any items and have to go back and forth between storages/vendors and micromanage tightly in order to get by, but if you just collect enough money, you can afford a bigger backpack.  Moreover, you walk very slowly, your tools are inefficient, the activities are repetitive, and so on.&lt;/p&gt;
&lt;p&gt;I can theoretically imagine that someone might get therapeutic value in mindless labor on a huge Stardew Valley farm, but this value is lost on me, and perhaps it&#39;s just not the right game for me.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Factorio&#34;&gt;Factorio&lt;/a&gt; is an interesting example because at least it&#39;s plain honest about this:  Increasing efficiency is one of the main goals of the game. While (like in Stardew Valley) your tools (mines, inserters, assemblers) are horribly inefficient in the beginning and improve as you progress in the game, the main point is how you use and combine those tools, and the emergent beauty that arises from the interplay of the tools.  Not that you use the tools again and again and again and again mindlessly (like in Stardew Valley).  Even the slow player movement speed is fine, because you can overcome this problem by building infrastructure, and building railroads is actually one of the most fun things in the game, in my opinion.&lt;/p&gt;
&lt;h2 id=&#34;non-engaging-annoyance&#34;&gt;Non-engaging annoyance&lt;/h2&gt;
&lt;p&gt;There&#39;s a variation of this theme where the game is just annoying, on purpose, but you are not even aware that a quality-of-life improvement exists in the game.  So on the first playthrough, you just deal with it and accept the annoyance.  Once you progress far enough in the game and the solution appears, your eyes are opened, and there is just no way you want to go back to playing this game without this solution.  But then you might start a second playthrough, and now that you are aware that a solution exists, the annoyance is so unbearable that you might feel pressured to rush through the game progression as fast as possible to get to the quality-of-life improvement, without really being able to enjoy the game much until you arrive there.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Baldur%27s_Gate&#34;&gt;Baldur&#39;s Gate&lt;/a&gt;, for example, is in my opinion DREADFULLY SLOW until you get the boots of speed somewhere around halfway through the game.  Of course these only speed up ONE of your (up to) six characters, and it&#39;s so bad that I usually limit my group size to the number of boots of speed available at the time, so that no slow character is left behind, and you don&#39;t need to wait ages to &amp;quot;gather your party before venturing forth.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Fallout_4&#34;&gt;Fallout 4&lt;/a&gt; has a &amp;quot;Survival Mode&amp;quot; where the &amp;quot;fast travel&amp;quot; option is disabled and you have to walk every place in the huge world by foot.  The point is of course that this is immersive and more realistic.  And there are some solutions to speed things up (which I won&#39;t spoil), but what&#39;s particularily awful is that the solutions don&#39;t only require you to progress to specific points of the storyline, but also make very specific choices in the game that you might even find unethical.  But maybe there&#39;s a deeper meaning here:  Sometimes improving one&#39;s quality of life actually requires making unethical choices.&lt;/p&gt;
&lt;p&gt;But it&#39;s entirely possible to build games that offer improvements to movement speed, inventory size, tool quality, and so on, without making the game a pain, or excessively wasting the player&#39;s time.  In &lt;a href=&#34;https://en.wikipedia.org/wiki/Prey_(2017_video_game)&#34;&gt;Prey (2017)&lt;/a&gt; or &lt;a href=&#34;https://en.wikipedia.org/wiki/Deus_Ex:_Human_Revolution&#34;&gt;Deus Ex 3&lt;/a&gt;, the inventory size and running speed is good enough from the start that the player is not suffering, and improvements can be obtained any time for a small cost, without doing quests or making choices that one doesn&#39;t really want to make.&lt;/p&gt;
&lt;p&gt;So, please, game designers, have some respect for the time and the well-being of the player, and don&#39;t ruin the experience by making us rush through the game just to get some critical quality-of-life improvement.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Mysteries in Chinese Letters</title>
      <link>https://hut.pm/chinese.html</link>
      <pubDate>Tue, 13 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/chinese.html</guid>
      <description>&lt;p&gt;I&#39;ve been learning (Simplified Mandarin) Chinese for a couple years and the most fun part about the language is how you can attempt to derive the history of a word from looking at the individual components.&lt;/p&gt;
&lt;p&gt;For example, the word &amp;quot;New&amp;quot; is written as 新, which is composed of 亲 (&amp;quot;relatives, parents&amp;quot;) and 斤 (&amp;quot;axe&amp;quot;).&lt;/p&gt;
&lt;p&gt;Fascinating, isn&#39;t it?  One can vividly imagine how some person in ancient Chinese killed their relatives with an axe and realized that only when the influence of the family is entirely obliterated, the mind is truly open to new concepts, and one is finally free to pursue them as an emancipated individual.  There&#39;s some good anticollectivist Ayn Rand philosophy embedded right there in the language!&lt;/p&gt;
&lt;p&gt;This is of course nonsense.  &lt;a href=&#34;https://en.wiktionary.org/w/index.php?title=%E6%96%B0&amp;amp;oldid=68720033#Glyph_origin&#34;&gt;One theory&lt;/a&gt; says that 亲 is an ancient Chinese word for the hazelnut tree.  亲+斤 therefore refers to cutting down the tree, hence starting something new.  But who cares about history (it&#39;s just &amp;quot;his story&amp;quot; anyway) if making up our ownstory is much more fun?&lt;/p&gt;
&lt;p&gt;Here are a few selected decompositions to fuel your imagination:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新 (new) is composed of 亲 (relatives/parents), 斤 (axe)&lt;/li&gt;
&lt;li&gt;电视 (television) is composed of 电 (electronic), 礻(cult), 见 (to see/watch/observe)&lt;/li&gt;
&lt;li&gt;如果 (if) is composed of 女 (female), 口 (orifice), 果 (fruit)&lt;/li&gt;
&lt;li&gt;家 (family) is composed of 宀 (roof), 豕 (pig)&lt;/li&gt;
&lt;li&gt;奸 (evil) is composed of 女 (female), 干 (dry)&lt;/li&gt;
&lt;li&gt;爱 (love) is composed of 爪 (claw), 冖 (lid/enclosure), 友 (friend).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&#39;m going to leave you with my favorite emoji: 目_目氵&lt;/p&gt;
&lt;p&gt;The eyes are the actual Chinese word for &amp;quot;eye&amp;quot;, and the sweat drops on the side literally mean &amp;quot;water&amp;quot; in Chinese.&lt;/p&gt;
&lt;p&gt;Does it enrage you that the mouth is not a Chinese word, but a plain and boring underscore? No problem, you can express your rage by using 口, the Chinese word for &amp;quot;mouth/orifice&amp;quot;: 目口目氵&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Recommendations</title>
      <link>https://hut.pm/love.html</link>
      <pubDate>Tue, 05 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/love.html</guid>
      <description>&lt;p&gt;This is just a place for personal recommendations in a variety of categories. I will update this page as I discover new things :)&lt;/p&gt;
&lt;h1 id=&#34;software&#34;&gt;Software&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki, flashcard learning software&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://antennapod.org/&#34;&gt;AntennaPod, Android podcast player&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/aristocratos/btop&#34;&gt;btop, a beautiful resource monitor for the console&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gemini.circumlunar.space/&#34;&gt;Gemini, an internet protocol without the diseases of HTML/HTTPS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.gimp.org/&#34;&gt;GIMP, image manipulation program&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git-scm.com/&#34;&gt;git, decentralized version control system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gitea.com/&#34;&gt;Gitea, lightweight git server, used by e.g. codeberg.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gohugo.io&#34;&gt;hugo, the static HTML generator I use for this website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.kicad.org/&#34;&gt;KiCad, computer-aided design for electronics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gmi.skyjake.fi/lagrange/&#34;&gt;Lagrange, a web browser for the Gemini protocol&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.kernel.org/&#34;&gt;Linux/GNU, operating system&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.musicpd.org/&#34;&gt;MPD, music player&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://newsboat.org/&#34;&gt;newsboat, RSS reader for the console&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://osmand.net/&#34;&gt;OsmAnd, an OpenStreetMap viewer for Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ranger.github.io&#34;&gt;ranger, the best file manager in the visible universe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/RSS&#34;&gt;RSS, a standard for news aggregation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tmux.github.io/&#34;&gt;tmux, like a tiling window manager in the terminal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.vim.org/&#34;&gt;VIM, text editor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://xmpp.org/&#34;&gt;XMPP, privacy-focused chat protocol&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;tools&#34;&gt;Tools&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.swissarmy.com/us/en/Products/Swiss-Army-Knives/Swiss-Tools/Swiss-Tool-Spirit-X/p/3.0224.L&#34;&gt;Victorinox Swisstool Spirit X&lt;/a&gt;, my favorite &amp;quot;full sized&amp;quot; multitool. Well-engineered, ergonomic, full metal, and versatile enough to replace an entire toolbox in a pinch.  After filing down the 2mm flathead screwdriver to 1.8mm, it even fits my laptop screws.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.leatherman.com/style-ps-831488.html&#34;&gt;Leatherman Style PS&lt;/a&gt;, an airplane-approved keychain multitool.  Not very powerful, but small enough to always carry around. The toolset is perfect for IT, tinkering, grooming, and everyday tasks.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sequremall.com/collections/diy-tools/products/sq-d60-soldering-iron-kit&#34;&gt;Sequre SQ-D60 Soldering Iron&lt;/a&gt;, small, light, USB-C-powered, fast heating (~10s from 25°C to 360°C), digitally controlled, replaceable tips, I love it.  The only quirk: so far I have only been able to power it with the recommended power supply.  None of my other USB-C power supplies make it turn on.  See also the &amp;quot;Pinecil.&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;art&#34;&gt;Art&lt;/h1&gt;
&lt;h2 id=&#34;james-fletcher&#34;&gt;James Fletcher&lt;/h2&gt;
&lt;p&gt;&amp;quot;High detail fantasy illustrations and artwork.&amp;quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://jamesfletcherdesign.com&#34;&gt;https://jamesfletcherdesign.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/user/jamesfletcherdesign&#34;&gt;Also on Reddit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://i.redd.it/k4xkc0zj0gm81.jpg&#34;&gt;&amp;quot;Fractal Cthulhu&amp;quot; (warning: 12MB)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;yuumei-aka-wenqing-yan&#34;&gt;Yuumei aka Wenqing Yan&lt;/h2&gt;
&lt;p&gt;&amp;quot;Illustrator, comic artist, and designer.&amp;quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.yuumeiart.com&#34;&gt;https://www.yuumeiart.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.artstation.com/yuumei&#34;&gt;Also on ArtStation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.artstation.com/artwork/D5eWlG&#34;&gt;&amp;quot;Birth of a Nebula&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;rob-rey&#34;&gt;Rob Rey&lt;/h2&gt;
&lt;p&gt;&amp;quot;Art to help make science a more meaningful part of our lives.&amp;quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.robreyfineart.com&#34;&gt;https://www.robreyfineart.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.deviantart.com/robrey&#34;&gt;Also on DeviantArt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://images.fasosites.com/75616_2784236xxl.jpg&#34;&gt;&amp;quot;Seeing the Unseen&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;games&#34;&gt;Games&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://bethesda.net/en/game/prey&#34;&gt;Prey (2017) (avoid spoilers!)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.mobiusdigitalgames.com/outer-wilds.html&#34;&gt;Outer Wilds (definitely avoid ALL spoilers!)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rimworldgame.com&#34;&gt;Rimworld&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.factorio.com&#34;&gt;Factorio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://deuxex.com&#34;&gt;Deus Ex series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://subsetgames.com/ftl.html&#34;&gt;FTL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.devolverdigital.com/games/the-red-strings-club&#34;&gt;Red Strings Club&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://koder.itch.io/dv-rings-of-saturn&#34;&gt;ΔV: Rings of Saturn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.kerbalspaceprogram.com/&#34;&gt;Kerbal Space Program&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;books&#34;&gt;Books&lt;/h1&gt;
&lt;p&gt;Fiction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Anathem&#34;&gt;Anathem, by Neal Stephenson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Snow Crash, by Neal Stephenson&lt;/li&gt;
&lt;li&gt;Neuromancer, by William Gibson&lt;/li&gt;
&lt;li&gt;Project Hail Mary, by Andy Weir&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Non-fiction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.vipassana.com/meditation/mindfulness_in_plain_english.html&#34;&gt;Mindfulness in Plain English, by Henepola Gunaratana&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Nietzsche and Zen, by André van der Braak&lt;/li&gt;
&lt;li&gt;Thinking in Systems, by Donella H. Meadows&lt;/li&gt;
&lt;li&gt;Antifragile, by Nassim N. Taleb&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;websites-and-articles&#34;&gt;Websites and Articles&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://shkspr.mobi/blog/2021/01/the-unreasonable-effectiveness-of-simple-html/&#34;&gt;The unreasonable effectiveness of simple HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://cheapskatesguide.org/articles/personal-website-hunting.html&#34;&gt;Hunting the Nearly-Invisible Personal Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Keeping Track of a Life</title>
      <link>https://hut.pm/monthary.html</link>
      <pubDate>Sat, 12 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/monthary.html</guid>
      <description>&lt;p&gt;As I&#39;m getting older, I am more and more getting the sense that time is slipping away, and I keep wondering where it goes.  To get a high-level overview of my past, and help my brain to keep a sense of continuity and progress, I started collecting digital records in the form of a spreadsheet.&lt;/p&gt;
&lt;p&gt;Some people write a diary, but that&#39;s too much work for me.  I decided to go with a granularity of 1 month, so perhaps we can call this a ✨&lt;strong&gt;monthary&lt;/strong&gt;✨.&lt;/p&gt;
&lt;p&gt;I&#39;ve been keeping various records before already, like photographs, written notes, chat logs, but none of them quite did the job.  There was much noise, and no good high-level overview.  Some systems just required too much work.  But when I created this spreadsheet, things changed.  The act of collecting information was effortless and pleasurable, so that over the years I&#39;ve kept adding not just new data about the present, but also backtracked and went through my other records to add them to the spreadsheet as well.&lt;/p&gt;
&lt;p&gt;Here&#39;s a screenshot with some made-up sample data:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/track.png&#34;&gt;&lt;img src=&#34;data/images/track.png&#34; alt=&#34;screenshot with sample data&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There&#39;s a lot to unpack here, so let me describe each column:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🌍: The year and month.  The background color represents the typical climate in that month.  As you can see, I live on the northern hemisphere at medium latitude :)&lt;/li&gt;
&lt;li&gt;🌅: The hour at which the sun sets.  This is updated when I move to another place.&lt;/li&gt;
&lt;li&gt;💼: My job in that month, denoted by a single letter.  I didn&#39;t have that many jobs, so a single letter is enough to remind me which it was.&lt;/li&gt;
&lt;li&gt;🏠: My home city or city district, again abbreviated with a single letter.&lt;/li&gt;
&lt;li&gt;💕: People with which I had romantic connections in that month&lt;/li&gt;
&lt;li&gt;👤: A list of people with which were important in some way or another to me in that month.  It&#39;s not easy to fit many names into that tight space, so I abbreviate them, sometimes down to a single letter, and just hope that I remember who is who.  At some point I&#39;ll need a look-up table. :)&lt;/li&gt;
&lt;li&gt;🚀: The places and events that I travel to. Later I added interesting local events, as well as the intensity of the COVID situation. More suns (🌞) mean more people are infected by COVID in the country I live.  I like how COVID visually takes away the space for travel destinations.&lt;/li&gt;
&lt;li&gt;🌍: For context, this shows interesting events all over the world and deaths of people I knew.  Perhaps I will add births here as well.&lt;/li&gt;
&lt;li&gt;📕: Books I read, and podcasts I frequently listened to.&lt;/li&gt;
&lt;li&gt;📺: Movies or series I watched&lt;/li&gt;
&lt;li&gt;🎼: Music genres or artists I listened to, plus some meta information like when &lt;a href=&#34;https://funkwhale.audio/&#34;&gt;I tried out FunkWhale&lt;/a&gt; or when &lt;a href=&#34;https://www.fastcompany.com/90704310/spotify-boycott-daniel-ek-investment-defense&#34;&gt;I canceled Spotify because they fund military projects&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;🎮: Games I played&lt;/li&gt;
&lt;li&gt;🛠️: Private projects I worked on&lt;/li&gt;
&lt;li&gt;💼: Professional projects I worked on, as well as notes for when colleagues quit or joined&lt;/li&gt;
&lt;li&gt;💎: My monetary savings (remember, this is fake data ;))&lt;/li&gt;
&lt;li&gt;💪: A metric for my exercise success&lt;/li&gt;
&lt;li&gt;💊: Particularly severe Medical issues I had in that month&lt;/li&gt;
&lt;li&gt;👍: My average happiness in that month, rated from 1 (bright pink = sad) to 3 (dark purple = happy).  This doesn&#39;t say all that much, so at some point I started adding comments where I list what made me happy and sad.&lt;/li&gt;
&lt;li&gt;😱: My average stress level (again, between 1 and 3).  I added this recently when I realized that there were some months that were dreadful and anxiety-ridden even though they were full of mind-blowing happy moments.  Happiness alone doesn&#39;t make a month good :)  Let&#39;s see if this is worth tracking.&lt;/li&gt;
&lt;li&gt;🛹-🎹: Hobbies and long-term projects that I pursue at different intensities over time (again, between 1=pink and 3=dark purple).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This started out small, with only 6 columns per month (🌍💼🏠👤📕🚀) and a single row for the month that I started using this in.&lt;/p&gt;
&lt;p&gt;After a few months, as data accumulated, I was convinced of the value of this, and started tracking a larger variety of things, as well as adding more and more past years.  By now, my entire life is in there, although of course I don&#39;t know anymore what book I have read in November when I was 15.  But once in a while I find a piece of evidence from the past and it&#39;s a joy to make the spreadsheet a little more complete.&lt;/p&gt;
&lt;p&gt;I&#39;m already hearing you ask,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So what&#39;s the point of all this?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;First of all, I get pleasure from looking at my life from this kind of high level perspective.  It makes my past more tangible and my life feel bigger.  It reminds me of my naive past, and of what I have learned since then.  It allows me to appreciate the good things that happened to me a long time ago, and revisit the bad things with a little more distance.&lt;/p&gt;
&lt;p&gt;Then, sometimes I get lost in the moment, and forget that there&#39;s more to my life than this one big problem that screams at me right now.  Taking a look at this monthary is an undeniable reminder of the bigger picture, and has often helped me find a sense of calmness during turbulent times.&lt;/p&gt;
&lt;p&gt;Finally, it serves as a reference for looking up facts about my past, like &amp;quot;When did I start that job again?&amp;quot;, &amp;quot;When did I move to that place?&amp;quot;, or &amp;quot;When did I lose steam with that project?&amp;quot;&lt;/p&gt;
&lt;p&gt;I can totally recommend trying this out, and if you do, make sure to let me know how it goes :)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Now available on Gemini</title>
      <link>https://hut.pm/gemini.html</link>
      <pubDate>Fri, 11 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/gemini.html</guid>
      <description>&lt;p&gt;I&#39;ve always been a big fan simple websites, which don&#39;t bombard you with lots of visual noise, and don&#39;t bombard your computer with computationally expensive requests, annoying pop-ups, ads, unneeded cookies, tracking scripts, and other bloat.  But even though I make simple websites, modern web browsers are such complicated beasts that in order to view them, you still rely on bloated and user-hostile software.&lt;/p&gt;
&lt;p&gt;When I found out about the &lt;a href=&#34;https://gemini.circumlunar.space&#34;&gt;Gemini&lt;/a&gt; web protocol, it felt a bit like finding home.  Something that just makes sense.  Gemini websites are composed in a format that&#39;s simpler than Markdown, and a Gemini browser renders those directly, without having to translate them into HTML.  Therefore all Gemini websites are forced to be simple, and since the protocol is designed to be non-extensible, the servers and browsers remain simple as well.  This takes power away from big institutions and back to the people.  One of Gemini&#39;s design goals actually was that a single developer should be able to program a comfortable Gemini browser in a single weekend.  Yet, Gemini is very functional, and with only a few exceptions (I wish it had nested lists, inline links, and &lt;em&gt;maybe&lt;/em&gt; tables), it offers everything I&#39;d like in my websites.&lt;/p&gt;
&lt;p&gt;So I reconfigured hugo, the static HTML generator of this website, to produce output files in the Gemini markup format as well, as described in this &lt;a href=&#34;https://sylvaindurand.org/gemini-and-hugo/&#34;&gt;blog post by Sylvain Durand&lt;/a&gt; (thanks to vifon for the link in the first place!)&lt;/p&gt;
&lt;p&gt;The final result can be found here:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;gemini://rawtext.club/~hut&#34;&gt;gemini://rawtext.club/~hut&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you don&#39;t have a Gemini browser, this is what it currently looks like:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/images/gemini.png&#34; alt=&#34;Screenshot of the front page, viewed in the browser &#34;Lagrange&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;Instead of sparkling animated CSS art, it&#39;s just plebeian static ASCII art, but that&#39;s ok too :).  Not all pages are implemented yet, but I&#39;ll gradually add them over time. Future pages and blog posts will also be designed primarily for Gemini.&lt;/p&gt;
&lt;p&gt;Now I got the urge to do the same to the &lt;a href=&#34;https://psylink.me&#34;&gt;home page of PsyLink&lt;/a&gt;, since there too, most of the content is designed in a way that would be suitable for integration to Gemini.  But that sounds like a huge misallocation of resources :)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Braille Asteroid</title>
      <link>https://hut.pm/braille-asteroid.html</link>
      <pubDate>Mon, 03 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/braille-asteroid.html</guid>
      <description>&lt;p&gt;New screenshot of Outfly:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/images/outfly/2022-01-02-230826_braille_asteroid.png&#34; alt=&#34;braille asteroid&#34;&gt;&lt;/p&gt;
&lt;p&gt;The asteroid now consists of HD braille characters, the house features an antenna, the rocket became smaller and the exhaust more realistic.&lt;/p&gt;
&lt;p&gt;Now there&#39;s also waste water and air humidity that can be recycled, methane as an alternative power source, and androids that don&#39;t need to eat but consume power.&lt;/p&gt;
&lt;p&gt;Also, now all of the chemical reactions and item effects aren&#39;t hardcoded anymore, but instead defined in a big dictionary, which makes it much easier to add new things. \o/&lt;/p&gt;
&lt;p&gt;Finally, the asteroid mass is a little more realistic, although I guess there&#39;s asteroids of all sizes, and the player should be able to pick their own asteroid at the start of the game, with the desired composition and mass.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Outfly: Initial Post</title>
      <link>https://hut.pm/outfly-takeoff.html</link>
      <pubDate>Thu, 30 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/outfly-takeoff.html</guid>
      <description>&lt;h2 id=&#34;irrelevant-intro&#34;&gt;Irrelevant Intro&lt;/h2&gt;
&lt;p&gt;I keep getting endlessly inspired to create my own space sci-fi world (probably in the form of a game) whenever I play games like FTL, Sunless Skies, RimWorld, Outer Wilds, Space Haven, watching series like The Expanse, Cowboy Bebop, Mars, and reading books like Project Hail Mary, Anathem, the Sprawl Trilogy, and Red Star, Winter Orbit...&lt;/p&gt;
&lt;p&gt;Also, whenever I visit &lt;a href=&#34;https://hut.pm&#34;&gt;my home page&lt;/a&gt;, I remember this gif by plupluru, which is just so cozy, and I think that this should be a game:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/images/plupluru_finally.gif&#34; alt=&#34;plupluru&#39;s &#34;finally&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;The problem is that it takes so much time these days to build games that have decent graphics and run on all platforms, and I really have better things to do than pouring thousands of hours into a game that nobody will ever play. :D But then again, I used to build dozens of games when I was a kid.  How embarrassing would it be, if I can&#39;t pull that off now anymore?  Technology is more complicated these days, but nothing prevents me from using old technology today, right?&lt;/p&gt;
&lt;h2 id=&#34;the-game&#34;&gt;The Game&lt;/h2&gt;
&lt;p&gt;So I started hacking away and got this working:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/images/outfly.png&#34; alt=&#34;outfly screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;The game idea is best summarized by this message I sent to &lt;a href=&#34;https://blog.einval.eu/page/about/&#34;&gt;vifon&lt;/a&gt; the other day:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to make a game where you settled on an asteroid, attached some rockets onto it, and now it&#39;s a space ship which you can fly around anywhere you want with. You can mine the resources on the asteroid and sell them, build a cozy house there, grow space vegetables, hire workers or breed slaves, maybe build a little pizza restaurant on it to get some income from wandering astronauts, upgrade your spaceship parts, attach weapons, fly close to a sun and collect a bunch of energy to refine resources with, or mine bitcoin, or just recharge your batteries after a long stay in the depths of interstellar space. Trade with the various space clans, form alliances, become a pirate, or just build a fully autonomous habitat and fly out all the way into intergalactic space where you are away from all the humans and can live a free life until... I guess... inevitably your energy will run out and you die. As a free human. Or whatever you have become.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;By neglecting the graphics, I can focus on implementing interesting and scientifically accurate game mechanics that result in emergent gameplay like in &lt;a href=&#34;http://www.bay12games.com/dwarves/&#34;&gt;Dwarf Fortress&lt;/a&gt; and &lt;a href=&#34;https://www.nethack.org/&#34;&gt;Nethack&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Also, development time is greatly accelerated, and it basically works now already.  Although there is nothing to do, no place to go, and the game is entirely meaningless (just like your life).  But over time, I can add on more and more parts at whatever pace I feel like.  This could be a nice pet project, let&#39;s see if this gets anywhere.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codeberg.org/hut/outfly&#34;&gt;Source code&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Aquatic Dark Ambient Playlist</title>
      <link>https://hut.pm/aquatic.html</link>
      <pubDate>Tue, 13 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/aquatic.html</guid>
      <description>&lt;p&gt;This is an ambient playlist that I like to listen to.  Most of the songs have an aquatic vibe to them, and sound slow, dark, and creepy.  As if you&#39;re in an underwater cave or in a submarine on the bottom of the ocean.  Somehow, for me, this isolated mood makes it strangely feel like home.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/m6Qv49Aw5qk&#34;&gt;Atrium Carceri - A Curved Blade-m6Qv49Aw5qk.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/_gIEYcsorbY&#34;&gt;Boreal Distillate-_gIEYcsorbY.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/OHmp_4sOAPY&#34;&gt;David West - Polar Light-OHmp_4sOAPY.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/bomNTwVokGE&#34;&gt;Dead Melodies - A Trial of Crows and Blood-bomNTwVokGE.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/RowVYqHHqFU&#34;&gt;Donkey Kong Country - Aquatic Ambience (Funk Fiction Remix) ► Etherwave-RowVYqHHqFU.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/lWqVi4CYTFg&#34;&gt;Dronny Darko - Vapor Swamps-lWqVi4CYTFg.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/Qsi1iYJs1zE&#34;&gt;First Snow-Qsi1iYJs1zE.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/umjNaNXzETA&#34;&gt;Hoshin - How It All Ended-umjNaNXzETA.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/unPOaT9_y68&#34;&gt;In Ancient Times-unPOaT9_y68.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/qQiH4QwLjeI&#34;&gt;Keosz - Before the End-qQiH4QwLjeI.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/Xmzj3Lo0EU8&#34;&gt;Night Came To Us-Xmzj3Lo0EU8.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/KyC8WTk17XA&#34;&gt;Particulate Matter-KyC8WTk17XA.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/0fA9dFtoFKI&#34;&gt;Reservoir Dreamer-0fA9dFtoFKI.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/xYLzqBdTI7Q&#34;&gt;Silent Messenger-xYLzqBdTI7Q.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/TD1QJYsPZSA&#34;&gt;Stygian Vortex-TD1QJYsPZSA.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/7UNNEHOLaJE&#34;&gt;The Ashen Dream-7UNNEHOLaJE.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/oP5G0SE01Dg&#34;&gt;The Dead City-oP5G0SE01Dg.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/mHDcW8m24pI&#34;&gt;The Island of Terrible Death-mHDcW8m24pI.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/oKrro7M1PZ8&#34;&gt;Ugasanie &amp;amp; Dronny Darko - Behind the North Wind-oKrro7M1PZ8.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/f3wOO9Y7AX0&#34;&gt;Until Dawn Do Us Part-f3wOO9Y7AX0.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/7fNDMiWjkwU&#34;&gt;Voices of the Water-7fNDMiWjkwU.mp3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://youtu.be/mM5pX3dCZRI&#34;&gt;Yearning-mM5pX3dCZRI.mp3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yes, that&#39;s Donkey Kong Contry&#39;s Aquatic Ambience right in there.  For the breath of fresh air once in a while. ;)&lt;/p&gt;
&lt;p&gt;On Linux, you can download this playlist and convert it to MP3 with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -s https://hut.pm/aquatic.html | sed -rn &#39;s/.*-(.{11})\.mp3.*/\1/p&#39; | yt-dlp -xa- --audio-format=mp3
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>Dying of a Deadstar</title>
      <link>https://hut.pm/deadstar.html</link>
      <pubDate>Mon, 05 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/deadstar.html</guid>
      <description>&lt;p&gt;Recently &lt;a href=&#34;https://github.com/kingoflolz/mesh-transformer-jax&#34;&gt;GPT-J-6B&lt;/a&gt; came out, an open-source program that uses a pre-trained neural network to generate authentic-looking text. You can easily try it out on the &lt;a href=&#34;https://6b.eleuther.ai/&#34;&gt;Interactive online demo page&lt;/a&gt;.  It is quite similar to the famous GPT-3 model by OpenAI, which is ironically closed-source though. So, finally, mortals like you and me can play around with it \o/&lt;/p&gt;
&lt;p&gt;I want to share this incredibly deep song lyrics that the AI produced:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;She took a guitar and some basic drum lessons, and started writing songs.

It was with this song she found her voice again.

This is the full version, available in the newest TSB version.
If you’re interested in getting the instrumental, that’s available as well.

Track Name: Dying of a Deadstar

Well here I am standing by the bleedin&#39; edge of the cliff
Lost in all this dry acid that I’ve been choking
I can hear the stone crushing down, I can’t do anything
It just don’t make no nevermind
I’m buried in a mass of misfortunes and ideas
Cursing every one of them like I’m up to my neck in ludes
I’m jonesing hard to death, just what I need
I can feel the ache growing stronger by the second
I’m trying so hard to let go, but it’s too late
But now I’m dying of a dead star

Chorus:
It’s gonna eat me alive
From now on I’ll be alone
Laying in the path of a never ending train
Hoping that it never stops
Now I’m dying of a dead star
It’s gonna eat me alive
From now on I’ll be alone
Laying in the path of a never ending train
Hoping that it never stops

Oh I’m lonely, I’m dying
I’m drowning, oh I’m dying
Oh I’m running out of strength, oh
Oh I’m dying of a dead star

Chorus:
It’s gonna eat me alive
From now on I’ll be alone
Laying in the path of a never ending train
Hoping that it never stops
Now I’m dying of a dead star
It’s gonna eat me alive
From now on I’ll be alone
Laying in the path of a never ending train
Hoping that it never stops

I feel it coming, slowly moving down the track
It keeps a distance between me and every other place
It’s almost here, oh how it haunts me every day
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On the first glance, I was impressed how it produced the same text twice for the chorus, but disappointed that there&#39;s no link to the instrumental, so I can&#39;t karaoke it.  Some sentences don&#39;t make sense, but that&#39;s expected.&lt;/p&gt;
&lt;p&gt;Reading and thinking about the lyrics made me realize how deep this song is.  It&#39;s about crushing depression in the face of the lack of objective meaning in this world. An existential angst sparked by the realization of powerlessness against the futility of life, the loneliness and finitude.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;I’m dying of a dead star&amp;quot;&lt;/em&gt; is obviously a reference to Carl Sagan&#39;s 1973 classic &amp;quot;The Cosmic Connection: An Extraterrestrial Perspective&amp;quot;, where he writes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our Sun is a second- or third-generation star. All of the rocky and metallic material we stand on, the iron in our blood, the calcium in our teeth, the carbon in our genes were produced billions of years ago in the interior of a red giant star. We are made of star-stuff.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Carl Sagan, 1973&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Everything around us, everything we see, is technically a dead star. The author viscerally feels the crushing pressure that her atoms once felt in the celestial forge in which they were formed.  She doesn&#39;t know yet how she is going to die, but she is certain that it&#39;s going to be due to a dead star, since anything that can possibly kill her is star-stuff.  Even if she survives for 4.5 billion years, our very sun will eventually die and &lt;em&gt;&amp;quot;It’s gonna eat me alive&amp;quot;&lt;/em&gt;.  There is no escape.&lt;/p&gt;
&lt;p&gt;All she can think of in this moment as a way to alleviate her pain is: &lt;em&gt;&amp;quot;Laying in the path of a never ending train&amp;quot;&lt;/em&gt;.  Between the train tracks and a train, there is a safe space where nobody can intrude.  At the same time, she&#39;s also feeling the force of the train rushing over her, as the ground shakes, the wind blows, and the sound roars.  She sings &lt;em&gt;&amp;quot;I’m jonesing hard to death, just what I need&amp;quot;&lt;/em&gt;. Under the train, death is close by, making her feel alife more than ever, and she&#39;s &lt;em&gt;&amp;quot;hoping that it never stops&amp;quot;&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;These lyrics are (apart of the few sentences that make no sense) on par with any other deeply philosophical song and would easily pass as human-made.  I tip my hat, and can&#39;t wait for more AI-generated art.&lt;/p&gt;
&lt;p&gt;[This entire post was written half jokingly. But only half.]&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Inlineswap</title>
      <link>https://hut.pm/inlineswap.html</link>
      <pubDate>Fri, 04 Jun 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/inlineswap.html</guid>
      <description>&lt;p&gt;Seems like every programmer on earth wrote a static HTML generator ;).  So here&#39;s mine:  &lt;a href=&#34;https://github.com/hut/inlineswap&#34;&gt;inlineswap&lt;/a&gt;, which is currently used by the &lt;a href=&#34;https://ranger.github.io/&#34;&gt;website of ranger&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What&#39;s special about it?  The main idea is that it will look for commands in your HTML files and put the result of those commands right back into the HTML file.  This would be an example of the &amp;quot;run&amp;quot; command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- run echo &#39;# Hello World&#39; | markdown --&amp;gt;
&amp;lt;!-- /run --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;which will be substituted in-place to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- run echo &#39;# Hello World&#39; | markdown --&amp;gt;
&amp;lt;h1&amp;gt;Hello World&amp;lt;/h1&amp;gt;
&amp;lt;!-- /run --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As a result, the source file is also the output file, which is a nice property that I only found in inlineswap so far.&lt;/p&gt;
&lt;h2 id=&#34;other-commands&#34;&gt;Other commands&lt;/h2&gt;
&lt;p&gt;There&#39;s 2 more commands, documented &lt;a href=&#34;https://github.com/hut/inlineswap/blob/master/inlineswap&#34;&gt;in the comments of the executable file.&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;With &amp;quot;get&amp;quot; you can automatically copy&amp;amp;paste parts from other HTML files, so you can e.g.  change the website header in 1 file and auto-update it in the other files.&lt;/li&gt;
&lt;li&gt;With the &amp;quot;relative&amp;quot; command you can fix relative links that would otherwise break if you &amp;quot;get&amp;quot; a part from a HTML file that is in another directory.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;real-life-example&#34;&gt;Real-life example&lt;/h2&gt;
&lt;p&gt;A real-life example is the &lt;a href=&#34;https://github.com/ranger/ranger.github.io/blob/c69bad47b031a712bd3cabcde8abcb69b7b1b345/changelog.html&#34;&gt;changelog page of the ranger website&lt;/a&gt;.  It contains the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- get head from index.html --&amp;gt;
&amp;lt;!-- run markdown CHANGELOG | sed &#39;s/h1&amp;gt;/h2&amp;gt;/g&#39; --&amp;gt;
&amp;lt;!-- get foot from index.html --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The &lt;a href=&#34;https://github.com/ranger/ranger.github.io/blob/c69bad47b031a712bd3cabcde8abcb69b7b1b345/index.html&#34;&gt;index.html&lt;/a&gt; defines the &amp;quot;head&amp;quot; and &amp;quot;foot&amp;quot; parts with simple &lt;code&gt;&amp;lt;!-- head --&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;!-- foot --&amp;gt;&lt;/code&gt; comments.&lt;/p&gt;
&lt;h2 id=&#34;should-i-use-it&#34;&gt;Should I use it?&lt;/h2&gt;
&lt;p&gt;Probably not.  Learn something more useful.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Moved to a Dedicated Website</title>
      <link>https://hut.pm/psylink-website.html</link>
      <pubDate>Sat, 29 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-website.html</guid>
      <description>&lt;p&gt;The PsyLink project now has it&#39;s own website: &lt;a href=&#34;https://psylink.me&#34;&gt;psylink.me&lt;/a&gt;, and this is the place where I will continue the development log, as soon as I finish the basic structure of the website.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Gyroscope &#43; Accelerometer</title>
      <link>https://hut.pm/psylink-gyroscope.html</link>
      <pubDate>Mon, 17 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-gyroscope.html</guid>
      <description>&lt;p&gt;I fixed up the PsyLink UI.  It was so broken after the rewrite to Bluetooth Low Energy, I&#39;m once again stunned that I got ANY useful results before. But now it receives the transmissions from the Arduino properly.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/psy/2021-05-18_07-00-45_1920x1080.crop.png&#34; alt=&#34;PsyLink UI screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;I also added 6 more signal channels: The x/y/z-axes from the Gyroscope and from the Accelerometer that are built in to the Arduino Nano 33 BLE Sense.&lt;/p&gt;
&lt;p&gt;All put together finally allowed me to singlehandedly drive through the finish line of my favorite racing game F-Zero! \o/&lt;/p&gt;
&lt;video class=&#34;tab&#34; style=&#34;max-width: 100%;&#34; controls&gt;
    Your browser does not support the &amp;lt;video&amp;gt; tag, download the video
    &lt;a href=&#34;data/psy/video8-fzero3.webm&#34;&gt;here&lt;/a&gt;.
    &lt;source src=&#34;data/psy/video8-fzero3.webm&#34; /&gt;
&lt;/video&gt;
&lt;ul&gt;
&lt;li&gt;For training the AI, I recorded 60k samples over 2 minutes (500Hz)&lt;/li&gt;
&lt;li&gt;Trained for 5 epochs, which took 1 minute without GPU acceleration&lt;/li&gt;
&lt;li&gt;4 training labels (&amp;quot;left&amp;quot;, &amp;quot;right&amp;quot;, &amp;quot;accelerate&amp;quot;, &amp;quot;nothing&amp;quot;)&lt;/li&gt;
&lt;li&gt;Final training and validation loss: 0.04, accuracy: 98%&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codeberg.org/hut/psylink/src/commit/c06ec54995efff4af5d523d30151ce8a60cb4715/python/psylink/ai.py#L140-L160&#34;&gt;6 layer neural network with 2 convolutional layers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://soundcloud.com/daataa/mitch-murder-mute-city-free&#34;&gt;Music by Mitch Murder&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Wireless Prototype</title>
      <link>https://hut.pm/psylink-prototype4.html</link>
      <pubDate>Fri, 14 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-prototype4.html</guid>
      <description>&lt;p&gt;Hell yeah!  The PCBs arrived:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/psy/IMG_20210510_165536.crop.png&#34; alt=&#34;pcb photo&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;soldering--sewing&#34;&gt;Soldering &amp;amp; Sewing&lt;/h2&gt;
&lt;p&gt;I never soldered such tiny SMD parts before, and didn&#39;t have proper tools, way too thick soldering tin and solder iron tip.  I was also too impatient to order some, so after hours of torture, I produced this batch:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/psy/IMG_20210510_220906_HDR.crop.jpg&#34; alt=&#34;photo of 8 soldered pcbs for signal processing&#34;&gt;&lt;/p&gt;
&lt;p&gt;The new prototype was to be a forearm sleeve of modal fabric once again, with snap buttons for electrodes which will also hold the signal processing PCBs in place.&lt;/p&gt;
&lt;p&gt;But how to attach the Arduino and the power supply module to the sleeve?  I thought, &amp;quot;why not Velcro?&amp;quot; (hook-and-loop fastener) and started sewing it to the circuit boards:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/psy/IMG_20210511_035833.crop.process.jpg&#34; alt=&#34;photo of me sewing velcro to the power supply module&#34;&gt;&lt;/p&gt;
&lt;p&gt;(Yes, doing it felt as weird as it looks)&lt;/p&gt;
&lt;p&gt;So I sewed the sleeve, assembled one electrode pair along with its processing PCB, and wired everything together.  Here&#39;s me being overly excited about the first wireless test run:&lt;/p&gt;
&lt;video class=&#34;tab&#34; style=&#34;max-width: 100%;&#34; controls&gt;
    Your browser does not support the &amp;lt;video&amp;gt; tag, download the video
    &lt;a href=&#34;data/psy/video5-wireless.webm&#34;&gt;here&lt;/a&gt;.
    &lt;source src=&#34;data/psy/video5-wireless.webm&#34; /&gt;
&lt;/video&gt;
&lt;h2 id=&#34;electrode-placement&#34;&gt;Electrode Placement&lt;/h2&gt;
&lt;p&gt;hen there was the question of &lt;em&gt;where&lt;/em&gt; to put the electrodes.  Using an improvised muscle map along with two flexible electrodes on individual straps, I could find spots whose electrical activity correlated with turning the arm, twisting the wrist, or pressing individual fingers onto the table:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/psy/IMG_20210511_182254.color_enhance.sharpen.resize.jpg&#34;&gt;&lt;img src=&#34;data/psy/IMG_20210511_182254.color_enhance.sharpen.resize.thumb.jpg&#34; alt=&#34;photo of me mapping my forearm&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Flexor_digitorum_superficialis_muscle&#34;&gt;Flexor Digitorum Superficialis&lt;/a&gt; was particularly interesting; I found 3 areas over that muscle which map to the index, middle and ring finger each.  For turning the arm and wrist, the muscles with &amp;quot;Carpi&amp;quot; in their name (e.g. &lt;a href=&#34;https://en.wikipedia.org/wiki/Extensor_carpi_ulnaris_muscle&#34;&gt;Extensor carpi ulnaris&lt;/a&gt;) worked pretty good.)  A huge disappointment was &lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Extensor_digitorum_muscle&amp;amp;oldid=1009414145&#34;&gt;Extensor Digitorum&lt;/a&gt;, which is supposed to be active when fingers move up, but I could not find such correlation.  Then again, I use snap buttons for electrodes, so I&#39;m not that surprised.&lt;/p&gt;
&lt;p&gt;The final layout of the electrodes:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/psy/IMG_20210512_055029_HDR.crop.annotate.jpg&#34;&gt;&lt;img src=&#34;data/psy/IMG_20210512_055029_HDR.crop.annotate.jpg&#34; alt=&#34;electrode map&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This piece is fully separable from the electronics and therefore machine washable.&lt;/p&gt;
&lt;p&gt;Here are additional pictures of the inner side, the separated electronics, as well as everything combined.  This nicely shows the tree topology of the green signal processing modules that pass through the power supply among each other to reduce the volume of wiring.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/psy/IMG_20210512_055048_HDR.crop.jpg&#34;&gt;&lt;img src=&#34;data/psy/IMG_20210512_055048_HDR.crop.thumb.jpg&#34; alt=&#34;inside&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/psy/IMG_20210512_054941_HDR.crop.jpg&#34;&gt;&lt;img src=&#34;data/psy/IMG_20210512_054941_HDR.crop.thumb.jpg&#34; alt=&#34;electronics only&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/psy/IMG_20210512_053308_HDR.crop.resize.png&#34;&gt;&lt;img src=&#34;data/psy/IMG_20210512_053308_HDR.crop.resize.thumb.png&#34; alt=&#34;everything combined&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I could have had 8 electrode pairs, but only added electrodes for 7.  On these pictures, the electrode pair for the middle finger is also missing the circuitry.  That&#39;s mostly a testament to my laziness.&lt;/p&gt;
&lt;p&gt;Actually I regret where I placed the Arduino, since there would be some great spots for electrodes, but I noticed that too late.  Will try to remove the Velcro and maybe add an 8th electrode pair there.&lt;/p&gt;
&lt;p&gt;The final cyb3rware:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/psy/IMG_20210512_172320_HDR.crop.cleanup.resize.sharpen.jpg&#34; alt=&#34;photo of the final product&#34;&gt;&lt;/p&gt;
&lt;p&gt;While the signal was quite strong with the test straps, I found that the amplitude of the signal went way down once I had everything attached to the sleeve.  Maybe there was some kind of interference from the Arduino or the power supply being closer to my skin, or maybe the modal fabric messes with the signal somehow.  I hope I can compensate for this by increasing the signal amplification multiplier, but I leave that for later.&lt;/p&gt;
&lt;p&gt;This issue occurred with a single electrode pair already, but was aggravated when attaching more of them.  It might help if I add some flux capacitors to the power supplies to prevent cross-interference.&lt;/p&gt;
&lt;h2 id=&#34;test-drive&#34;&gt;Test Drive&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;psylink-fzero.html&#34;&gt;I drove F-Zero with Prototype #2 before&lt;/a&gt;, but back then I cheated a little bit.  It only recognized 2 keys, left and right, and I accelerated with the keyboard using my other hand.&lt;/p&gt;
&lt;p&gt;This time I hoped I could do better, and trained the AI to recognize 3 different keys (left, right, accelerate) from my muscle signals.  It even kinda worked!&lt;/p&gt;
&lt;video class=&#34;tab&#34; style=&#34;max-width: 100%;&#34; controls&gt;
    Your browser does not support the &amp;lt;video&amp;gt; tag, download the video
    &lt;a href=&#34;data/psy/video6-fzero2.webm&#34;&gt;here&lt;/a&gt;.
    &lt;source src=&#34;data/psy/video6-fzero2.webm&#34; /&gt;
&lt;/video&gt;
&lt;p&gt;This was after recording ~2000 muscle signal samples over 1-2 minutes and training a convolutional neural network for 25-50 epochs (&amp;lt;1 minute) on the data using the &lt;a href=&#34;https://codeberg.org/hut/psylink/src/commit/520d82595e1ae3516bf0d47a6a94ef4c4c668ad5/python/ui.py&#34;&gt;PsyLink UI&lt;/a&gt;.  I used 4 electrode pairs, all of which are on the dorsal side of the forearm.&lt;/p&gt;
&lt;h2 id=&#34;analysis&#34;&gt;Analysis&lt;/h2&gt;
&lt;p&gt;In the racing game, I didn&#39;t make it to the finish line yet, and it does look pretty clumsy, but I blame it on the software still having some obvious flaws.  It doesn&#39;t even account for packet loss or packet duplication when handling the Bluetooth packets yet.  Hope it will go better once I fixed them.  Also, the test drive was with only 4 electrode pairs.&lt;/p&gt;
&lt;p&gt;The raw values as visualized with the &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/gnuradio/plot_signals.grc&#34;&gt;GNURadio flowgraph&lt;/a&gt; while randomly moving my forearm/wrist/hand show that the correlations between the signals are low enough to be theoretically useful:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/psy/2021-05-15_23-53-16_1920x1080.crop.png&#34;&gt;&lt;img src=&#34;data/psy/2021-05-15_23-53-16_1920x1080.crop.crop.png&#34; alt=&#34;graphs of signals&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you enlarge this image, you&#39;ll see that especially the black line is considerably different, which I suppose is because it&#39;s the only electrode pair that spans across several muscles.  And that makes me wonder: Am I doing too much pre-processing in hardware before I feed the data into the AI?  Sure, the differential amplification of this new prototype enhances small signals that the previous prototypes might have not detected, but a lot of information is lost too, like the voltage differences between electrodes from different electrode pairs.&lt;/p&gt;
&lt;p&gt;Maybe I can compensate for this by simply adding some more electrode pairs that span muscles.  I&#39;m also thinking of switching to a design with 32-64 randomly placed electrodes -&amp;gt; &lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Buffer_amplifier&amp;amp;oldid=1017094718&#34;&gt;buffer amplifiers&lt;/a&gt; -&amp;gt; &lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Multiplexer&amp;amp;oldid=1018543479&#34;&gt;multiplexers&lt;/a&gt; -&amp;gt; analog to digital converters of the Arduino.  That way, the neural network can decide for itself which voltage differences it wants to look at.&lt;/p&gt;
&lt;h2 id=&#34;new-pcb-layout&#34;&gt;New PCB layout&lt;/h2&gt;
&lt;p&gt;While soldering the PCB, I found some flaws and made these changes to the &lt;a href=&#34;psylink-pcb.html&#34;&gt;previous PCB&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added silkscreen labels to the connectors and components.  I was sure I wouldn&#39;t mix up anything since there aren&#39;t many connectors, they&#39;re nicely symmetrical, and I&#39;m the designer after all. But nope.  I still mixed them up.&lt;/li&gt;
&lt;li&gt;Removed unnecessary &amp;quot;vias&amp;quot;.  (I was actually not sure whether the pin holes will really conduct between the front and the back side of the board, so I added vias as a safety measure.)&lt;/li&gt;
&lt;li&gt;The label now shows the new name &amp;quot;psylink&amp;quot; instead of &amp;quot;myocular&amp;quot;&lt;/li&gt;
&lt;li&gt;A friend also gave me the tip to increase the thickness of power supply wires&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;data/psy/psylink6-pcb2.mod.png&#34; alt=&#34;psylink6 PCB&#34;&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Moved to hugo</title>
      <link>https://hut.pm/hugo.html</link>
      <pubDate>Thu, 13 May 2021 02:01:58 +0200</pubDate>
      
      <guid>https://hut.pm/hugo.html</guid>
      <description>&lt;p&gt;Blogging software is one of those things that&#39;s sometimes faster to write yourself than to learn an existing framework.  &lt;a href=&#34;http://john.ankarstrom.se/html/&#34;&gt;Some simply write their blog in raw HTML&lt;/a&gt;. I, on the other hand, like &lt;a href=&#34;https://en.wikipedia.org/wiki/Markdown&#34;&gt;markdown&lt;/a&gt;, and for years I was using the following simple &lt;a href=&#34;https://www.gnu.org/software/make&#34;&gt;Makefile&lt;/a&gt; directive to generate my blog:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;%.html: src/%.md head.html
    cat head.html &amp;gt; &amp;quot;$@&amp;quot;
    markdown &amp;quot;{body}amp;amp;lt;&amp;quot; &amp;gt;&amp;gt; &amp;quot;$@&amp;quot;
    echo &#39;&amp;lt;/article&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&#39; &amp;gt;&amp;gt; &amp;quot;$@&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;(The source files for blog posts are in markdown format. This code looks for files that have changed, creates the HTML for those by taking the output of the &amp;quot;markdown&amp;quot; command and wrapping it around static HTML)&lt;/p&gt;
&lt;p&gt;That worked fine for years, but now that I have a development log for my &lt;a href=&#34;psylink.html&#34;&gt;psylink&lt;/a&gt; project, it doesn&#39;t scale anymore.  I needed some way to group the large number of posts together.  So I moved the page to &lt;a href=&#34;https://gohugo.io&#34;&gt;hugo&lt;/a&gt;, and the website now has full ✨&lt;em&gt;blogchain&lt;/em&gt;✨ integration.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Power Supply Module</title>
      <link>https://hut.pm/psylink-power.html</link>
      <pubDate>Sun, 09 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-power.html</guid>
      <description>&lt;p&gt;I made an updated schematic (psylink6) that shows more clearly how the modules are connected.  Also corrected an error with the feedback of the voltage follower, and changed values of some resistors/capacitors:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/psylink6.png&#34;&gt;&lt;img src=&#34;data/myo/psylink6.thumb.png&#34; alt=&#34;Schematic image&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I also constructed the power supply module:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/IMG_20210509_214421.crop.joined.jpg&#34; alt=&#34;Photo of power module #1&#34;&gt;&lt;/p&gt;
&lt;p&gt;but for some reason it didn&#39;t work. All the parts seemed to have been connected the right way, I couldn&#39;t find a short circuit, but the output voltage was ~0.5V instead of ~5V, and the reference voltage was just 0.  I blame a possibly broken opamp.&lt;/p&gt;
&lt;p&gt;Well, I didn&#39;t like the design and length of the circuit board anyway, so it didn&#39;t hurt trashing the thing and building this beauty instead:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/psylink6_powermodule.png&#34; alt=&#34;Photo of power module #2&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&#39;ll use female-to-female jumper wires to connect V+ and GND to the arduino, and 3 more wires to bootstrap the power supply of the mesh network of the signal processing modules.&lt;/p&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yep, that&#39;s 2 coin cells in there&lt;/li&gt;
&lt;li&gt;Outputs: Black=Ground, Red=V+, Green=V+/2 (reference signal)&lt;/li&gt;
&lt;li&gt;There&#39;s an optional second green pin for the ground electrode&lt;/li&gt;
&lt;li&gt;If you&#39;re wondering why I&#39;m using a big ass quad opamp when I just need a single output:  I don&#39;t have a smaller one atm.&lt;/li&gt;
&lt;li&gt;I totally need to move this to a SMD PCB in the long run, this is still too bulky, but will do for now.  It&#39;s about the dimensions of a 9V battery.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wonder if some 深圳人 will read this, shake their head, and view me as a primate struggling to make fire with sticks.  That&#39;s what it felt like to construct this thing anyway.  Nevertheless, I&#39;m one step closer to the next prototype :)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: New Name</title>
      <link>https://hut.pm/psylink-new-name.html</link>
      <pubDate>Fri, 07 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-new-name.html</guid>
      <description>&lt;p&gt;After some brainstorming, I changed the working title of this project from Myocular to ✨PsyLink✨.  The close second favorite was FreeMayo (thanks to Vifon for the suggestion).  Free as in free speech/software/hardware, and mayo as a play on myo (ancient greek for &amp;quot;muscle&amp;quot;).  But somehow I liked PsyLink more.  It&#39;s inspired by the &lt;a href=&#34;https://shodan.fandom.com/wiki/Psionic_Disciplines&#34;&gt;Psionic Abilities&lt;/a&gt; from the 1999&#39;s game System Shock 2.&lt;/p&gt;
&lt;p&gt;FYI, this is the list of words that I considered, although unfortunately many of the coolest combinations were taken:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;axon&lt;/li&gt;
&lt;li&gt;coil&lt;/li&gt;
&lt;li&gt;cortex&lt;/li&gt;
&lt;li&gt;cyber&lt;/li&gt;
&lt;li&gt;free&lt;/li&gt;
&lt;li&gt;gauntlet&lt;/li&gt;
&lt;li&gt;glove&lt;/li&gt;
&lt;li&gt;link&lt;/li&gt;
&lt;li&gt;loop&lt;/li&gt;
&lt;li&gt;magic&lt;/li&gt;
&lt;li&gt;mana&lt;/li&gt;
&lt;li&gt;mayo&lt;/li&gt;
&lt;li&gt;myo&lt;/li&gt;
&lt;li&gt;open&lt;/li&gt;
&lt;li&gt;pipe&lt;/li&gt;
&lt;li&gt;plug&lt;/li&gt;
&lt;li&gt;psi&lt;/li&gt;
&lt;li&gt;psionic&lt;/li&gt;
&lt;li&gt;psy&lt;/li&gt;
&lt;li&gt;psyber&lt;/li&gt;
&lt;li&gt;scan&lt;/li&gt;
&lt;li&gt;surge&lt;/li&gt;
&lt;li&gt;tron&lt;/li&gt;
&lt;li&gt;ware&lt;/li&gt;
&lt;li&gt;wave&lt;/li&gt;
&lt;li&gt;wear&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Finished new UI</title>
      <link>https://hut.pm/psylink-ui2.html</link>
      <pubDate>Thu, 06 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-ui2.html</guid>
      <description>&lt;p&gt;The new user interface now supports all previous features!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Capturing muscle signals&lt;/li&gt;
&lt;li&gt;Capturing the keys that the user is pressing&lt;/li&gt;
&lt;li&gt;Training a neural network to predict key presses from given signals&lt;/li&gt;
&lt;li&gt;Auto-pressing keys based on incoming signals using said neural network to predict which keys the user wants to press&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/2021-05-07_05-50-26_1920x1080_000.crop.png&#34; alt=&#34;MyocularUI screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;It&#39;s sooo much more pleasant to have a direct view on the state of the application and an instant visualization of the signals.  The previous version was literally just a blank window, with a single menu called &amp;quot;File&amp;quot; that contained all the actions. :D  I never even bothered to upload a screenshot, but here&#39;s one for documentation purposes:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/2021-05-07_06-10-30_1920x1080.crop.png&#34; alt=&#34;screenshot of old &#34;Calibrator&#34; tool&#34;&gt;&lt;/p&gt;
&lt;p&gt;Also, this time I used clean &amp;amp; efficient data structures to make the code easier to work with, a more reliable key capturing library (&lt;a href=&#34;https://github.com/moses-palmer/pynput&#34;&gt;pynput&lt;/a&gt;), and threads to prevent one activity from blocking the others.  The signals obviously go via Bluetooth instead of a wired serial connection.&lt;/p&gt;
&lt;p&gt;I&#39;m also thinking of changing the name for the project, since people are reading it as &amp;quot;my ocular&amp;quot; rather than recognizing the neologism made of &amp;quot;myo&amp;quot; (for &amp;quot;muscle&amp;quot;) and &amp;quot;ocular&amp;quot; (from &amp;quot;eye&amp;quot;).  But all the good names are taken, of course. -_-&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Higher Bandwidth, new UI</title>
      <link>https://hut.pm/psylink-bandwidth.html</link>
      <pubDate>Tue, 04 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-bandwidth.html</guid>
      <description>&lt;p&gt;Hah, I managed to raise the Bluetooth bandwidth from ~1kB/s to 6-7kB/s with this one magic line:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.arduino.cc/en/Reference/ArduinoBLEBLEsetConnectionInterval&#34;&gt;BLE.setConnectionInterval(8, 8);&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It raises the power consumption by 4% (3.5mW), but that&#39;s totally worth it. I can now get all 8 channels in 8-bit resolution at 500Hz across the aehter.  Eventually I should aim for 10-bit at 1kHz, but I think that can wait.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/2021-05-04_19-14-22_1920x1080.crop.png&#34;&gt;&lt;img src=&#34;data/myo/2021-05-04_19-14-22_1920x1080.crop.crop.png&#34; alt=&#34;signals&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/myo/2021-05-04_19-15-30_1920x1080.crop.png&#34;&gt;&lt;img src=&#34;data/myo/2021-05-04_19-15-30_1920x1080.crop.thumb.png&#34; alt=&#34;gnuradio flowgraph&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is the &lt;a href=&#34;https://codeberg.org/hut/psylink/src/commit/befedfaf7abb0a54d657f6ed11c10d54b1e74845/5_ble/gnuradio/visualize_signal.grc&#34;&gt;GNURadio flowgraph&lt;/a&gt; and the resulting output.  (I only have hardware for 2 electrode pairs, so even-numbered and odd-numbered signals are wired to the same input. Still waiting for the PCBs.)&lt;/p&gt;
&lt;p&gt;Power ratings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No Bluetooth connection: 86.9mW (16.9mA x 5.14V)&lt;/li&gt;
&lt;li&gt;Transmitting at 1-2kB/s: 88.9mW (17.3mA x 5.14V)&lt;/li&gt;
&lt;li&gt;Transmitting at 6-7kB/s: 92.5mW (18.0mA x 5.14V)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Surprisingly to me, the LEDs were draining a good chunk of the power, and I saved 16mW by removing the external power LED (see &lt;a href=&#34;data/myo/IMG_20210428_192422.jpg.resized.png&#34;&gt;previous photo&lt;/a&gt;) and by &lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Pulse-width_modulation&amp;amp;oldid=1003507942&#34;&gt;PWM&lt;/a&gt;-dimming the blue LED that indicated Bluetooth connections. It gives me approximately 15 hours run time with 2x CR2032 coin cells.&lt;/p&gt;
&lt;p&gt;Also I&#39;m in the process of rewriting the UI:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/2021-05-05_07-15-17_1920x1080_000.crop.png&#34; alt=&#34;MyocularUI screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;The colorful column graph is a live visualization of the signal.  The columns correspond to electrode pairs, while the rows are time frames.   The top row shows the amplitude of the signal at the current time, and the rows flow downward, allowing you to view changes back in time, as well as correlations between signals.&lt;/p&gt;
&lt;p&gt;You&#39;ll also be able to change settings on the fly, view the status of e.g. key recordings or machine learning processes, and more.  All of this is in a &lt;a href=&#34;https://codeberg.org/hut/psylink/src/commit/cc55b1eeb9466044e9c84a10a428616d988a4430/pyocular/&#34;&gt;modular library&lt;/a&gt; that will also be usable from e.g. GNURadio.&lt;/p&gt;
&lt;p&gt;I was thinking of changing the graphical user interface toolkit from Tkinter to a more modern one, because Tkinter looks a little shabby, and it has problems determining which keys are currently pressed, but I decided against it, because I made the experience of being unable to run my own software several years after writing it because the exact version of the GUI toolkit, along with all dependencies, was too annoying to set up.  Tkinter has been around for decades and will probably stay, so I&#39;ll stick with it for now.  Also, I can easily solve the key pressing issue with an external key tracking library like &lt;a href=&#34;https://github.com/moses-palmer/pynput&#34;&gt;pynput&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Can&#39;t wait to try out the new UI with 8 individual electrode pairs, once the PCBs arrive! (assuming they work :&#39;D)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: PCB Time</title>
      <link>https://hut.pm/psylink-pcb.html</link>
      <pubDate>Fri, 30 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-pcb.html</guid>
      <description>&lt;p&gt;Today I made a new version of the PCB that processes the signals from one electrode pair:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/schematics/myocular0.5.1d.kicad_pcb&#34;&gt;&lt;img src=&#34;data/myo/myocular0.5.1d_pcb.png&#34; alt=&#34;pcb picture&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Actually, several versions. This is the 4th iteration, and let&#39;s not even look at the previous ones because they were just plain wrong.  I stared at this design for a long time though and couldn&#39;t find another problem, so I went ahead and ordered 30 pieces of it.  Can&#39;t wait to find out in what way I messed up :&#39;D And hey, maybe it&#39;ll actally work.&lt;/p&gt;
&lt;p&gt;Main features:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- Dimensions: 20x17x1.6mm, rounded corners
    - Tiny enough to fit between 2 electrodes!
- 2 connectors for electrodes, at the middle top &amp;amp; bottom
- 1 connector for the output at the bottom right corner (on the front side. The back
  side is mirrored)
- 3 power line connector ports on the other corners, with 3 pins each:
    1. The signal reference voltage
    2. Ground
    3. +6V from the battery
- 3 capacitors, 3 resistors, 1 integrated circuit
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To avoid having a kilogram of cables on the device, this board supports wiring in a &lt;a href=&#34;https://en.wikipedia.org/wiki/Mesh_networking&#34;&gt;mesh network topology&lt;/a&gt;, where the boards share the power lines amongst each other using the redundant power line connector ports.  One board can power two other boards, which in turn can power 4, and so on.&lt;/p&gt;
&lt;p&gt;The bypass capacitor between ground and V+ will hopefully keep the voltage stable, though I&#39;m a bit worried about the reference signal.  If necessary, I can &amp;quot;abuse&amp;quot; the reference signal pin of the power line connector ports to add extra ground electrodes.  I considered adding an extra opamp on every board to generate a fresh reference voltage but that would make the circuit too big for my taste.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Soldering the Processing Units</title>
      <link>https://hut.pm/psylink-soldering-fail.html</link>
      <pubDate>Thu, 29 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-soldering-fail.html</guid>
      <description>&lt;p&gt;The plan was to split the circuit into:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 central part including the Arduino, power supply and the OpAmp that generates the signal ground, and&lt;/li&gt;
&lt;li&gt;8 distributed signal processing units, embedded in hot glue for stability and electrical insulation, consisting of an instrumentation amplifier and related components, close to the electrodes to avoid signal degradation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&#39;s my try to solder one of those units:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/IMG_20210430_024941.jpg.resized.png&#34;&gt;&lt;img src=&#34;data/myo/IMG_20210430_024941.jpg.resized.png.thumb.jpg&#34; alt=&#34;photo of me trying to solder a free form circuit&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This took me over an hour, during which I began questioning various life choices, started doubting this whole project, poured myself a Manhattan cocktail, wondered how long it would take to complete all eight of these, whether it will even be robust enough to withstand regular usage of the device (NO, IT WON&#39;T), and how I&#39;m going to fix the inevitable broken solder joints when the entire thing is in fucking hot glue...&lt;/p&gt;
&lt;p&gt;I gave up, and now my plan is to get &lt;a href=&#34;https://en.wikipedia.org/wiki/Printed_circuit_board&#34;&gt;PCBs&lt;/a&gt; for this instead.  I have little experience with this, so I&#39;ve been putting it off, but how hard can it be?&lt;/p&gt;
&lt;p&gt;First draft:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/schematics/myocular0.5.1.kicad_pcb&#34;&gt;&lt;img src=&#34;data/myo/myocular0.5.1_pcb.png&#34; alt=&#34;First PCB draft&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Updated schematic:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/myocular0.5.1.png&#34;&gt;&lt;img src=&#34;data/myo/myocular0.5.1.thumb.png&#34; alt=&#34;Schematic image&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I removed the decouplying capacitor between ground and GNDS (signal ground) by the REF pin of the INA128 because mysteriously it made the signal worse, not better.  Also removed the 1K resistors between electrodes 1+2 and the respective capacitors, because they served no apparent purpose.&lt;/p&gt;
&lt;p&gt;Also, I was frustrated that GNURadio doesn&#39;t allow you to get a &amp;quot;rolling&amp;quot; view of a signal.  &lt;a href=&#34;https://github.com/gnuradio/gnuradio/blob/6dbdc285469dd45d3752794c5195bd29ad45a0d5/gr-qtgui/lib/time_sink_c_impl.cc#L559-L577&#34;&gt;The plot widget buffers as many samples as it can show, and only when the buffer is full, it updates the graph, clears the buffer and waits again.&lt;/a&gt; I wanted instant updates as soon as new samples are in, and as a quick&amp;amp;dirty workaround I wrote a &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/5_ble/gnuradio/block_shift.py&#34;&gt;GNURadio shift block&lt;/a&gt; which keeps filling up the buffer of the plotting widgets.&lt;/p&gt;
&lt;p&gt;I&#39;ll finish with a nice picture of a finger snap, as recorded with one electrode pair on my dorsal wrist.  Click to enlarge and view the frequency domain as well.  (Just one electrode pair because that&#39;s all I can squeeze out of the poor bluetooth low energy bandwidth so far)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/2021-04-30_03-48-59_1920x1080.crop.png&#34;&gt;&lt;img src=&#34;data/myo/2021-04-30_03-48-59_1920x1080.crop.crop.png&#34; alt=&#34;screenshot of EMG of a finger snap&#34;&gt;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Going Wireless</title>
      <link>https://hut.pm/psylink-wireless.html</link>
      <pubDate>Wed, 28 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-wireless.html</guid>
      <description>&lt;p&gt;I&#39;ve been battling with reducing the power line noise for too long, so I thought screw it, let&#39;s go off the power line entirely.  I put the circuit on two 3V CR2032 coin cells and wrote &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/5_ble/arduino/BLEpipe2/BLEpipe2.ino&#34;&gt;BLEpipe2.ino&lt;/a&gt; to transmit the signals via BLE (Bluetooth Low Energy) using the &lt;a href=&#34;https://www.arduino.cc/en/Reference/ArduinoBLE&#34;&gt;ArduinoBLE&lt;/a&gt; library.&lt;/p&gt;
&lt;p&gt;Since I can not plot the signals via the Arduino IDE plotter anymore, I switched to &lt;a href=&#34;https://www.gnuradio.org/&#34;&gt;GNURadio&lt;/a&gt; and wrote &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/5_ble/gnuradio/block_BLE_source.py&#34;&gt;a plugin that establishes the BLE connection and acts as a signal source in the GNURadio companion software&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My new &amp;quot;electrodes&amp;quot; also arrived: &lt;a href=&#34;https://www.prym.com/en/non-sew-refill-for-390120-smooth-cap-10mm-silver-coloured-390104&#34;&gt;Simple prong snap buttons&lt;/a&gt;.  They don&#39;t have sharp edges like the pyramidal studs I used before, and allow me to easily remove the wires from the electrodes and plug them in somewhere else as needed.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/IMG_20210428_192422.jpg.resized.png&#34;&gt;&lt;img src=&#34;data/myo/IMG_20210428_192422.jpg.resized.png.thumb.jpg&#34; alt=&#34;photo of the breadboard&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I also employed &lt;a href=&#34;https://www.ti.com/product/INA128&#34;&gt;INA128 instrumentation amplifiers&lt;/a&gt;, drastically reducing the complexity of the circuit.  It&#39;s a tiny SMD chip, which I plan to embed in hot glue, along with the 3-4 capacitors and 3-5 resistors required for processing/de-noising, and place 8 of these processing units across the glove/wristband, connected to two electrodes each.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/myocular0.5.png&#34;&gt;&lt;img src=&#34;data/myo/myocular0.5.thumb.png&#34; alt=&#34;Circuit schematic&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/myocular0.5.sch&#34;&gt;KiCad Eeschema file&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now I&#39;m battling the problem that I can only get about 1kB/s across the ether.  How am I supposed to put 12kB/s worth of signal in there? (8 channels, 1k samples/s, 12 bit per sample)  Let&#39;s see if I can find some nice compression method, but I fear that it&#39;s going to be lossy. :-/&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: First Amplifier Circuit</title>
      <link>https://hut.pm/psylink-first-amp-circuit.html</link>
      <pubDate>Sat, 24 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-first-amp-circuit.html</guid>
      <description>&lt;p&gt;I had my head stuck in electronics lectures, datasheets, and a breadboard to
figure out a decent analog circuit for amplifying the signal.  It sounds so
straight forward, just plug the wires into the + and - pin of an operational
amplifier, add a few resistors to specify the gain of the OpAmp, and feed the
output to the analog input pin of the Arduino... But reality is messy, and it
didn&#39;t quite work out like that.&lt;/p&gt;
&lt;p&gt;Here&#39;s a list of problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The voltage I measured from the electrodes seemed incredibly fragile. As soon
as I wanted to do something with it, it seemed to change.  This could be due
to the high impedance of the skin, causing a drop in voltage as soon as one
draws any current.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Used buffer amplifiers, in an
&lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Instrumentation_amplifier&amp;amp;oldid=1002203272&#34;&gt;instrumentation amplifier&lt;/a&gt;
arrangement.
&lt;a href=&#34;https://www.youtube.com/watch?v=Cps0C9fJXfg&#34;&gt;Patrick Mercier from UCSD has a great lecture on that&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;One electrode may have a DC voltage offset compared of the other electrode.
When this gets large (~50mV+), the amplified voltage difference gets off the
scale.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Added capacitors that filter out the DC component.  Through
experimentation I found that 100pF worked best.  Curiously, &lt;a href=&#34;https://www.esda.org/assets/Documents/7dd436d0a3/FundamentalsPart5.pdf&#34;&gt;this is the same capacitance that&#39;s sometimes used to model the skin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The OpAmp amplifies not just the signal but also the noise, like:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Mains_hum&#34;&gt;Power line hum&lt;/a&gt; from USB connection&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Electromagnetic_interference&amp;amp;oldid=995706890&#34;&gt;Electromagnetic Interference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fluctuations in resistance/capacitance between electrode and muscle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Solutions&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Disconnect Laptop from main grid&lt;/li&gt;
&lt;li&gt;Keep wires short&lt;/li&gt;
&lt;li&gt;Add &lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Decoupling_capacitor&amp;amp;oldid=933630042&#34;&gt;decoupling capacitors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Perform &lt;a href=&#34;https://www.youtube.com/watch?v=wCOLsl5Vn4w&#34;&gt;occult protection magic ceremony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;In the future, perhaps some shielding or bandpass filtering&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I ordered a part that requires min. +/-2.25V. The Arduino supplies 3.3V, so
all is well, right?  Nope.  It means that I need negative 2.25V as well as
positive 2.25V.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Increased the voltage of the entire circuit to 5V, which
the Arduino conveniently supports by changing a solder jumper.  The
middle-ground reference voltage rose from 1.65V to 2.5V, leaving enough
room for the required +/-2.25V.  I don&#39;t actually use the part yet, but I
wanted to prepare for it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The 2.5V reference voltage from the &lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Voltage_divider&amp;amp;oldid=1016398249&#34;&gt;voltage divider&lt;/a&gt;
strongly fluctuated, messing up the output from the OpAmp.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solutions&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Buffer_amplifier&amp;amp;oldid=1017094718&#34;&gt;Buffer amplifier&lt;/a&gt; after the voltage divider&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Decoupling_capacitor&amp;amp;oldid=933630042&#34;&gt;Bypass capacitors&lt;/a&gt; close to the OpAmps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The LM324N OpAmp that I used has an output voltage limit of 3.6V (at a supply
voltage of 5V.)  That cuts off a good chunk of the signal.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: I added a second reference voltage at 1.66V so the output
centers around that.  (Conveniently, the output limit of 3.6V is close to
the Arduino&#39;s ADC reference voltage of 3.3V.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Should I even do any of this? I&#39;m limiting the neural network by introducing
my bias about what a clean signal looks like.  Any circuit will invariably
filter out certain information, enhance other information, and add irrelevant
noise.  How do I know that the information that I filter out (e.g. the DC
offset voltage between electrodes, or even what I consider irrelevant noise)
isn&#39;t useful to the neural network?
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Solution&lt;/strong&gt;: Keep the signal processing reasonably minimal&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also connected the electrode signal to ground with a 1MΩ resistor which
greatly improved the signal, and I have no idea why.&lt;/p&gt;
&lt;p&gt;One peculiar thing I noticed was that the signal seemed stronger when my laptop
was connected to the power supply.  It superimposed noise, but also seemed to
increase differences in electrode voltages.  I don&#39;t quite understand this yet,
but 2 things follow from that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For replication purposes, I&#39;m using a Lenovo Thinkpad T460p switched to the
Intel GPU, which creates it&#39;s own particular noise patterns, even when
unplugged from the grid.&lt;/li&gt;
&lt;li&gt;I should try out modulating the ground electrode voltage with a controlled
low frequency pattern to see if this improves signal to noise ratio.  Ideally
&amp;lt;30Hz or &amp;gt;500Hz so I can easily filer it out later.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of the references I used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.olimex.com/Products/Duino/Shields/SHIELD-EKG-EMG/open-source-hardware&#34;&gt;Olimex &amp;quot;SHIELD-EKG-EMG&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=7FYHt5XviKc&#34;&gt;EEVblog OpAmps Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=BcJ6UdDx1vg&#34;&gt;EEVblog Bypass Capacitor Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=Cps0C9fJXfg&#34;&gt;Patrick Mercier&#39;s lectures on Instrumentational Amplifiers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://arxiv.org/abs/1805.05200v1&#34;&gt;BioPhysical Modeling, Characterization and Optimization of Electro-Quasistatic Human Body Communication, arXiv:1805.05200v1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The resulting circuit: [&lt;a href=&#34;data/myo/myocular0.4.sch&#34;&gt;KiCad Eeschema file&lt;/a&gt;]&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/myocular0.4.png&#34;&gt;&lt;img src=&#34;data/myo/myocular0.4.thumb.png&#34; alt=&#34;Circuit schematic&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And the signals look like:&lt;/p&gt;
&lt;!-- Image processing done: 1px gaussian blur, curves(x=188,y=33), 2x unsharp mask with default settings --&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/2021-04-24_04-24-15_1920x1080.crop.png&#34;&gt;&lt;img src=&#34;data/myo/2021-04-24_04-24-15_1920x1080.crop.thumb.png&#34; alt=&#34;Signal image 1&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/myo/2021-04-24_04-21-20_1920x1080.crop.png&#34;&gt;&lt;img src=&#34;data/myo/2021-04-24_04-21-20_1920x1080.crop.thumb.png&#34; alt=&#34;Signal image 2&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yellow and green are two electrodes, right after their respective OpAmp, and purple is (yellow-green)*20.&lt;/p&gt;
&lt;p&gt;This should be good enough to move forward, but I bought some &lt;a href=&#34;https://www.ti.com/product/INA128&#34;&gt;INA128&lt;/a&gt; instrumentation amplifiers and perhaps I will tinker some more to get an even better signal.  Can&#39;t wait for the next prototype though :).&lt;/p&gt;
&lt;p&gt;In other news, I watched &lt;a href=&#34;https://www.youtube.com/watch?v=r6XeAS67PNM&#34;&gt;Dr. Gregory House explain forearm muscles&lt;/a&gt;, so next time my electrode placement will be better than random!&lt;/p&gt;
&lt;p&gt;And since I learned &lt;a href=&#34;https://en.wikipedia.org/wiki/KiCad&#34;&gt;KiCad&lt;/a&gt; for creating the above schematic, I thought I&#39;d add schematics for the previous models as well, see Source Code section.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Amplifiers</title>
      <link>https://hut.pm/psylink-amplifiers.html</link>
      <pubDate>Mon, 19 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-amplifiers.html</guid>
      <description>&lt;p&gt;I have the feeling that before building the next prototype, I should figure out some way of enhancing the signal in hardware before passing it to the microcontroller.  It&#39;s fun to hook the &#39;trodes straight to the ADC and still get results, but I don&#39;t think the results are optimal.  So these days I&#39;m mostly researching and tinkering with OpAmps.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Multiplexers</title>
      <link>https://hut.pm/psylink-multiplexers.html</link>
      <pubDate>Thu, 15 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-multiplexers.html</guid>
      <description>&lt;p&gt;The analog multipexers (5x DG409DJZ) and other stuff arrived! I almost bought a digital multiplexer, because I didn&#39;t know there were various types... But I think that these will work for my use case.  The raw signal that I get out of it looks a little different, but when I filter out the low &amp;amp; high frequencies with &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/4_model3/TestMultiplexer2.ino&#34;&gt;TestMultiplexer2.ino&lt;/a&gt;, the direct signal and the one that goes through the multiplexer looks almost identical =D.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Data Cleaning</title>
      <link>https://hut.pm/psylink-data-cleaning.html</link>
      <pubDate>Wed, 14 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-data-cleaning.html</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/4_model3/DumbPipeFast.ino&#34;&gt;arduino code&lt;/a&gt; now produces samples at a consistent 1kHz.  I also &lt;a href=&#34;https://codeberg.org/hut/psylink/commit/57ca60455fa8ee658cdd774556db4a1cbf2af7e8&#34;&gt;moved the serial read operations of the calibrator software into a separate thread&lt;/a&gt; so that it doesn&#39;t slow down on heavy load, causing the buffer to fill up, and the labeling to desynchronize.  I am once again confused and surprised that I got ANY useful results before.&lt;/p&gt;
&lt;p&gt;I disconnected analog input pin 7 from any electrode, and used it as a baseline for the other analog reads.  By subtracting pin 7 from every other pin, the noise that all reads had in common was cancelled out.  Hope this doesn&#39;t do more harm than good.&lt;/p&gt;
&lt;p&gt;I also connected the ground line to one of the wrist electrodes rather than to the palm, since the palm electrode tended to move around a bit, rendering all the other signals unstable.&lt;/p&gt;
&lt;p&gt;And did you know that the signals looks much cleaner when you unplug the laptop from the power grid? :p&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/2021-04-15_03-11-08_1920x1080.unplug.png&#34; alt=&#34;screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;I&#39;ll finish with a video of me trying to play the frustrating one-button jumping game &lt;a href=&#34;https://tangramgames.dk/games/sienna/&#34;&gt;Sienna&lt;/a&gt; by flipping my wrist.  This doesn&#39;t go so well, but maybe this game isn&#39;t the best benchmark :D My short-term goal is to finish level 1 of this game with my device.&lt;/p&gt;
&lt;video class=&#34;tab&#34; style=&#34;max-width: 100%;&#34; controls&gt;
    Your browser does not support the &amp;lt;video&amp;gt; tag, download the video
    &lt;a href=&#34;data/myo/video4-sienna.webm&#34;&gt;here&lt;/a&gt;.
    &lt;source src=&#34;data/myo/video4-sienna.webm&#34; /&gt;
&lt;/video&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Cyber Gauntlet &#43;1</title>
      <link>https://hut.pm/psylink-gauntlet.html</link>
      <pubDate>Tue, 13 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-gauntlet.html</guid>
      <description>&lt;p&gt;So if you ever worked with electromyography, this will come to no surprise to you, but OMG, my signal got so much better once I added a ground electrode and connected it to the ground pin of the Arduino.  I tried using a ground electrode before, but connected it to AREF instead of GND, which had no effect, so I prioritized other branches of pareto improvement.&lt;/p&gt;
&lt;p&gt;I am once again confused and surprised that I got ANY useful results before.&lt;/p&gt;
&lt;p&gt;For prototype #3, I moved the electodes further down towards the wrist in hope that I&#39;ll be able to track individual finger movements.  It had 17 electrodes, 2x8 going around the wrist, as well as a ground electrode at the lower palm.  Only 9 of the 17 electrodes are connected, 8 directly to the ADC pins, and one to 1.65V, which I created through a &lt;a href=&#34;https://en.wikipedia.org/wiki/Voltage_divider&#34;&gt;voltage divider&lt;/a&gt; using two 560kΩ resistors between the 3.3V and GND pins of the Arduino, so that the electrode signals will nicely oscillate around the middle of the input voltage range.&lt;/p&gt;
&lt;p&gt;It all started out like a piece of goth armwear:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/IMG_20210413_201956.resized.jpg&#34; alt=&#34;photo&#34;&gt;&lt;/p&gt;
&lt;p&gt;Photo from the testing period:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/IMG_20210414_021833.jpg.resized.mod.jpg&#34; alt=&#34;photo&#34;&gt;&lt;/p&gt;
&lt;p&gt;Soldering wires to the electrodes:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/IMG_20210414_030229_HDR.jpg.resized.mod.jpg&#34; alt=&#34;photo&#34;&gt;&lt;/p&gt;
&lt;p&gt;The &amp;quot;opened&amp;quot; state shows the components of the device:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/IMG_20210414_041156_HDR.jpg.resized.mod.jpg&#34; alt=&#34;photo&#34;&gt;&lt;/p&gt;
&lt;p&gt;But it can be covered by wrapping around a layer of cloth, turning it into an inconspicuous fingerless glove:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/IMG_20210414_042155_HDR.jpg.resized.jpg&#34; alt=&#34;photo&#34;&gt;&lt;/p&gt;
&lt;p&gt;If you look hard at this picture, you can see the LED of the Arduino glowing through the fabric, the voltage divider to the right of it, appearing like a line pressing through the fabric, the ground electrode on the lower right edge of my palm, and the food crumbs on my laptop :)&lt;/p&gt;
&lt;p&gt;The signal seems to be much better, and as I move my arm and hand around, I can see distinct patterns using the Arduino IDE signal plotter, but for some reason the neural network doesn&#39;t seem to process it as well.  Will need some tinkering.  I hope it was not a mistake to leave out the electrodes at the upper forearm.&lt;/p&gt;
&lt;p&gt;I already ordered parts for the next prototype. If all goes well, it&#39;s going to have 33 &#39;trodes using analog multiplexers.  The electrodes will be more professional &amp;amp; comfortable as well.  Can&#39;t wait!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Adding some AI</title>
      <link>https://hut.pm/psylink-ai.html</link>
      <pubDate>Sun, 11 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-ai.html</guid>
      <description>&lt;p&gt;Most neural interfaces I&#39;ve seen so far require the human to train how to use
the machine. Learn unintuitive rules like &amp;quot;Contract muscle X to perform action
Y&amp;quot;, and so on. But why can&#39;t we just stick a bunch of artificial neurons on top
the human&#39;s biological neural network, and make the computer train them for us?&lt;/p&gt;
&lt;p&gt;While we&#39;re at it, why not replace the entire signal processing code by a bunch
of more artificial neurons?  Surely a NN can figure out to do a bandpass filter
and moving averages, and hopefully come up with something more advanced than
that.  The more I pretend that I know anything about signal processing, the
worse this thing is going to get, so let&#39;s just leave it to the AI overlords.&lt;/p&gt;
&lt;h2 id=&#34;the-arduino-part&#34;&gt;The Arduino Part&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&#34;https://store.arduino.cc/arduino-nano-33-ble-sense&#34;&gt;Arduino Nano 33 BLE Sense&lt;/a&gt;
supports &lt;a href=&#34;https://www.tensorflow.org/lite/microcontrollers&#34;&gt;TensorFlow Lite&lt;/a&gt;,
so I was eager to move the neural network prediction code onto the
microcontroller, but that would slow down the development, so for now I just
did it all on my laptop.&lt;/p&gt;
&lt;p&gt;The
&lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/3_neural_network/DumbPipe.ino&#34;&gt;Arduino code&lt;/a&gt;
now just passes through the value of the analog pins to the serial port.&lt;/p&gt;
&lt;h2 id=&#34;calibrating-with-a-neural-network&#34;&gt;Calibrating with a neural network&lt;/h2&gt;
&lt;p&gt;For this, I built a simple user interface, mostly an empty window with a menu
to select actions, and a key grabber.
&lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/3_neural_network/calibrator&#34;&gt;(source code)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The idea is to correlate hand/arm movements with keys that should be pressed
when you perform those hand/arm movements.  To train the AI to understand you,
perform the following calibration steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Put on the device and jack it into your laptop&lt;/li&gt;
&lt;li&gt;Start the Calibrator&lt;/li&gt;
&lt;li&gt;Select the action &amp;quot;Start/Resume Recording&amp;quot; to start gathering training data
for the neural network&lt;/li&gt;
&lt;li&gt;Now for as long as you&#39;re comfortable (30 seconds worked for me), move your
hand around a bit.  Hold it in various neutral positions, as well as
positions which should produce a certain action.  Press the key on your
laptop whenever you intend your hand movement to produce that key press.
(e.g. wave to the left, and hold the left arrow key on the laptop at the
same time)  The better you do this, the better the neural network will
understand wtf you want from it.
&lt;ul&gt;
&lt;li&gt;Holding two keys at the same time is theoretically supported,
but I used &lt;a href=&#34;https://docs.python.org/3/library/tkinter.html&#34;&gt;TKinter&lt;/a&gt;
which has an unreliable key grabbing mechanism.  Better stick to single
keys for now.&lt;/li&gt;
&lt;li&gt;Tip: The electric signals change when you hold a position for a couple
seconds.  If you want the neural network to take this into account, hold
the positions for a while during recording.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Press Esc to stop recording&lt;/li&gt;
&lt;li&gt;Save the recordings, if desired&lt;/li&gt;
&lt;li&gt;Select the action &amp;quot;Train AI&amp;quot;, and watch the console output.  It will train
it for 100 epochs by default.  If you&#39;re not happy with the result yet, you
can repeat this step until you are.&lt;/li&gt;
&lt;li&gt;Save the AI model, if desired&lt;/li&gt;
&lt;li&gt;Select the action &amp;quot;Activate AI&amp;quot;.  If everything worked out, the AI overlord
will now try to recognize the input patterns with which you associated
certain key presses, and press the keys for you. =D&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;results&#34;&gt;Results&lt;/h2&gt;
&lt;p&gt;I used this to walk left and right in &lt;a href=&#34;https://2020game.io&#34;&gt;2020game.io&lt;/a&gt; and it
worked pretty well.  With zero manual signal processing and zero manual
calibration! The mathemagical incantations just do it for me. This is awesome!&lt;/p&gt;
&lt;p&gt;Some quick facts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8 electrodes at semi-random points on my forearm&lt;/li&gt;
&lt;li&gt;Recorded signals for 40s, resulting in 10000 samples&lt;/li&gt;
&lt;li&gt;I specified 3 classifier labels: &amp;quot;left&amp;quot;, &amp;quot;right&amp;quot;, and &amp;quot;no key&amp;quot;&lt;/li&gt;
&lt;li&gt;Trained for 100 epochs, took 1-2 minutes.&lt;/li&gt;
&lt;li&gt;The resulting loss was 0.0758, and the accuracy was 0.9575.&lt;/li&gt;
&lt;li&gt;Neural network has &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/3_neural_network/calibrator/ai.py&#34;&gt;2 conv layers, 3 dense, and 1 output layer&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Video demo:&lt;/p&gt;
&lt;video class=&#34;tab&#34; style=&#34;max-width: 100%;&#34; controls&gt;
    Your browser does not support the &amp;lt;video&amp;gt; tag, download the video
    &lt;a href=&#34;data/myo/video3.webm&#34;&gt;here&lt;/a&gt;.
    &lt;source src=&#34;data/myo/video3.webm&#34; /&gt;
&lt;/video&gt;
&lt;p&gt;Still a lot of work to do, but I&#39;m happy with the software for now. Will tweak
the hardware next.&lt;/p&gt;
&lt;p&gt;Now I&#39;m wondering whether I&#39;m just picking low hanging fruits here, or if
non-invasive neural interfaces are really just that easy.  How could &lt;a href=&#34;https://www.cnbc.com/2019/09/23/facebook-announces-acquisition-of-brain-computing-start-up-ctrl-labs.html&#34;&gt;CTRL-Labs
sell their wristband to Facebook for $500,000,000-$1,000,000,000?&lt;/a&gt;
Was it one of those scams where decision-makers were hypnotized by buzzwords
and screamed &amp;quot;Shut up and take my money&amp;quot;?  Or do they really have some secret
sauce that sets them apart?  Well, I&#39;ll keep tinkering. Just imagine what this
is going to look like a few posts down the line!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: F-Zero</title>
      <link>https://hut.pm/psylink-fzero.html</link>
      <pubDate>Fri, 09 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-fzero.html</guid>
      <description>&lt;p&gt;The look of the first device was way too unprofessional, so I pulled out my sewing machine and made a custom tailored sleeve from comfortable modal fabric.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/IMG_20210409_215749.mod.jpg&#34; alt=&#34;photo&#34;&gt;&lt;/p&gt;
&lt;p&gt;On the inside, I attached some recycled studs that served as electrodes. Who needs that expensive stuff they sell as electrodes when a piece of iron suffices?&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/IMG_20210410_185301.mod.jpg&#34; alt=&#34;photo&#34;&gt;&lt;/p&gt;
&lt;p&gt;This time it had 4 electrodes.  I targeted the middle and the distal end of two muscles, the &lt;a href=&#34;https://en.wikipedia.org/wiki/Brachioradialis&#34;&gt;Brachioradialis&lt;/a&gt; and the &lt;a href=&#34;https://en.wikipedia.org/wiki/Extensor_carpi_radialis_longus_muscle&#34;&gt;Extensor carpi radialis longus&lt;/a&gt;.  I picked those muscles at random, because I honestly don&#39;t know what the fuck I am doing.&lt;/p&gt;
&lt;p&gt;Software-wise, I played around with &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/2_steering_wheel/ReadAnalogVoltage2.ino&#34;&gt;moving average&lt;/a&gt; and got reasonable signals, but it was clear that there was too much noise.&lt;/p&gt;
&lt;p&gt;How to filter, though?  I&#39;m not going to solder some bandpass filter, that&#39;s too slow and inflexible.  There are simple algorithms for doing it in software (&lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=High-pass_filter&amp;amp;oldid=1012587592#Algorithmic_implementation&#34;&gt;link 1&lt;/a&gt;, &lt;a href=&#34;https://www.norwegiancreations.com/2016/03/arduino-tutorial-simple-high-pass-band-pass-and-band-stop-filtering/&#34;&gt;link 2&lt;/a&gt;), but something seemed off about this method.  In the end, I decided to learn how to do a Fourier transform on the Arduino.&lt;/p&gt;
&lt;p&gt;With &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/2_steering_wheel/TestFFT2.ino&#34;&gt;this code&lt;/a&gt; (inspired by &lt;a href=&#34;https://www.norwegiancreations.com/2017/08/what-is-fft-and-how-can-you-implement-it-on-an-arduino/&#34;&gt;this post&lt;/a&gt;), I took 64 samples at a sampling rate of 1kHz, performed the Fourier transform, cut out anything under 30% and over 50% of my frequency range, and then summed up the amplitudes of the remaining frequencies to generate the output.&lt;/p&gt;
&lt;p&gt;Still very crude, but it allowed me to get distinctive signal patterns for various positions of my arm:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/myo/2021-04-10_02-18-04_1920x1080.png&#34;&gt;&lt;img src=&#34;data/myo/2021-04-10_02-18-04_1920x1080.png.thumb.jpg&#34; alt=&#34;screenshot&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I was genuinely surprised that I got information of this fidelity and usefulness from just hooking up 4 ADC&#39;s to semi random places of my forearm and a software bandpass filter.  This was good enough to use it as a basic input device!&lt;/p&gt;
&lt;p&gt;I wondered, can I control a racing car game with this?&lt;/p&gt;
&lt;p&gt;To test that, I built &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/2_steering_wheel/readserial.py&#34;&gt;readserial.py&lt;/a&gt; to read out the signals and convert certain ranges of values to keyboard presses of the keys &lt;strong&gt;Left&lt;/strong&gt; and &lt;strong&gt;Right&lt;/strong&gt;.  The value ranges need to be calibrated before each use:  I held my left arm like I&#39;m grabbing an invisible steering wheel, moved it left and right, and looked hard at the signal values to find correlations like &amp;quot;signal A is always below X if and only if I steer left&amp;quot;.  Once the calibration is done, the invisible steering wheel turned into a magical keyboard with 2 keys =D&lt;/p&gt;
&lt;p&gt;Right away I tried it out to steer in my favorite racing game, F-Zero:&lt;/p&gt;
&lt;video class=&#34;tab&#34; style=&#34;max-width: 100%;&#34; controls&gt;
    Your browser does not support the &amp;lt;video&amp;gt; tag, download the video
    &lt;a href=&#34;data/myo/video2.webm&#34;&gt;here&lt;/a&gt;.
    &lt;source src=&#34;data/myo/video2.webm&#34; /&gt;
&lt;/video&gt;
&lt;p&gt;Note that in addition to the steering wheel, I used my other hand to accelerate.&lt;/p&gt;
&lt;p&gt;I loved it, but there is still a lot of work to be done.  The calibration is a pain, especially since it needs to be repeated if the electrodes move too much, which happens a lot with this kind of sleeve.  Also I want more electrodes, better signal processing, and data transfer via Bluetooth so I can run it off a battery.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: Baby Steps</title>
      <link>https://hut.pm/psylink-baby-steps.html</link>
      <pubDate>Thu, 08 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-baby-steps.html</guid>
      <description>&lt;p&gt;The Arduino arrived.  I have no electrodes though.  But what are electrodes, just some pieces of metal taped to your skin, right?  Let&#39;s improvise that:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/myo/IMG_20210409_024039.jpg&#34; alt=&#34;photo&#34;&gt;&lt;/p&gt;
&lt;p&gt;There are two pieces of aluminum foil taped to my skin, held together with blue medical wrap.&lt;/p&gt;
&lt;p&gt;The educational material about electromyographs that I&#39;ve seen described a chain of hardware elements to process and clean up the signal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;amplification&lt;/li&gt;
&lt;li&gt;filtering&lt;/li&gt;
&lt;li&gt;rectification&lt;/li&gt;
&lt;li&gt;antialiasing&lt;/li&gt;
&lt;li&gt;smoothing&lt;/li&gt;
&lt;li&gt;averaging&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But I thought, let&#39;s focus on the MVP. Why not simply hook the electrodes straight to the analog input pins of the Arduino with some alligator clamps?  Worked fine.  I did minimal signal processing in software though, you can find the &lt;a href=&#34;https://codeberg.org/hut/psylink/src/branch/master/experimental/1_initial_test/ReadAnalogVoltage1.ino&#34;&gt;source code here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This video shows the myoelectric signal on Arduino IDE&#39;s built-in signal plotter:&lt;/p&gt;
&lt;video class=&#34;tab&#34; style=&#34;max-width: 100%;&#34; controls&gt;
    Your browser does not support the &amp;lt;video&amp;gt; tag, download the video
    &lt;a href=&#34;data/myo/video1.webm&#34;&gt;here&lt;/a&gt;.
    &lt;source src=&#34;data/myo/video1.webm&#34; /&gt;
&lt;/video&gt;
</description>
    </item>
    
    <item>
      <title>Dubstep Through Magical Handwaving</title>
      <link>https://hut.pm/dubstep.html</link>
      <pubDate>Mon, 05 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/dubstep.html</guid>
      <description>&lt;p&gt;In December 2014, I build this prototype for an unusual musical instrument.  It was extremely hacky and the source code and hardware schematics would make your eyes bleed, so just let me share the most important part of it:&lt;/p&gt;
&lt;p&gt;My first live concert!&lt;/p&gt;
&lt;video class=&#34;tab&#34; controls&gt;
    Your browser does not support the &amp;lt;video&amp;gt; tag, download the video &lt;a href=&#34;data/videos/skrillhut.webm&#34;&gt;here&lt;/a&gt;.
    &lt;source src=&#34;data/videos/skrillhut.webm&#34; /&gt;
&lt;/video&gt;
&lt;p&gt;I call the song &amp;quot;Snorting Sawdust&amp;quot;.  It was 100% improvised. :&#39;D&lt;/p&gt;
&lt;p&gt;Admittedly, there&#39;s no actual magic at work here.  The mechanism is explained in the following diagram:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/images/dubstep.png&#34; alt=&#34;diagram&#34;&gt;&lt;/p&gt;
&lt;p&gt;With an Arduino, I measured the capacitance between the frame of my laptop and the frame of my metal chair, which was connected to the Arduino through a long wire with a magnet soldered at the end.  The person sitting on the chair acted as the dielectric material between the laptop and the chair, whose dielectric permittivity ε was constantly measured by charging and discharging the capacitor (i.e. laptop frame and chair).  The time to charge was then used to select dubstep samples to play.  :)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PsyLink: The Idea</title>
      <link>https://hut.pm/psylink-idea.html</link>
      <pubDate>Sat, 03 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/psylink-idea.html</guid>
      <description>&lt;p&gt;On this day, I got the idea and started researching EMG design and signal processing, motor neurology basics, as well as existing projects.&lt;/p&gt;
&lt;p&gt;Soon I realized that I will need a microcontroller to record and process the signals.  I considered the &lt;a href=&#34;https://www.raspberrypi.org/products/raspberry-pi-pico/&#34;&gt;Raspberry Pi Pico&lt;/a&gt; and &lt;a href=&#34;https://store.arduino.cc/arduino-nano-33-ble-sense&#34;&gt;Arduino Nano 33 BLE Sense&lt;/a&gt;, and chose the Arduino because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bluetooth&lt;/li&gt;
&lt;li&gt;More analog-to-digital converter inputs&lt;/li&gt;
&lt;li&gt;support, which would allow me to leverage neural networks for signal processing.  This is a bit of a stretch, can&#39;t wait to get disappointed by this :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I wish there was a decent battery/UPS shield, couldn&#39;t find one so far.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>My Backup Routine</title>
      <link>https://hut.pm/backup.html</link>
      <pubDate>Sun, 11 Oct 2020 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/backup.html</guid>
      <description>&lt;p&gt;For a long time I was looking for a comfortable backup routine that works for my use case of having multiple devices (2 linux laptops, 1 windows desktop, 1 phone) and includes off-site cold storage.  Cold, as in, disconnected from the internet and therefore unhackable, and off-site for protection against a burglary or fire.  The solution I settled for is simple and cheap:&lt;/p&gt;
&lt;p&gt;Instead of hauling around expensive/big/fragile external harddrives, I bought two 256GB USB pen drives, encrypted them and copied over my most important files.  One of them I store near me, whereas the other one I hide at a remote place that I regularily visit.  Every week or two, I plug in my USB drive, unlock it, and run a script that refeshes the backup.  Whenever I visit the remote place, I simply swap out the pen drives, thereby updating the remote backup.&lt;/p&gt;
&lt;p&gt;The backup script automatically copies 5 directories from my primary machine to the USB drive, including directories synchronized with other devices via &lt;a href=&#34;https://syncthing.net/&#34;&gt;syncthing&lt;/a&gt; and &lt;a href=&#34;https://git-scm.com/&#34;&gt;git&lt;/a&gt;.  All I have to in my day-to-day life is: If I see files that I can&#39;t afford to lose, I put them in one of those 5 directories.  If they have to be in other places (because an application expects them there), I simply create a symbolic link.&lt;/p&gt;
&lt;p&gt;I still have bulk sorage devices, but those contain files that I can afford to lose, so I don&#39;t bother with inconvenient cold off-site backups.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Neural correlates of hidden mental models</title>
      <link>https://hut.pm/neuralcorrelates.html</link>
      <pubDate>Sat, 06 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/neuralcorrelates.html</guid>
      <description>&lt;p&gt;This post describes an idea about interpreting artificial neural networks that I used in my computer science master&#39;s thesis.  I&#39;m genuinely curious whether this idea has any value, so I invite you to &lt;a href=&#34;about.html&#34;&gt;send feedback&lt;/a&gt;, including about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does this even make any sense?&lt;/li&gt;
&lt;li&gt;Does this have a name already?&lt;/li&gt;
&lt;li&gt;Where did I make mistakes?&lt;/li&gt;
&lt;li&gt;Has this ever been used productively?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;context&#34;&gt;Context&lt;/h2&gt;
&lt;p&gt;Neural networks tend to be more accurate at classification problems than hand-crafted, explicit algorithms.  Not limited by the preconceptions of the engineer, they can adapt to a given problem, pick up information that the engineer didn&#39;t consider relevant, and synthesize their own mental models.&lt;/p&gt;
&lt;p&gt;From the desire to bridge the growing gap between human understanding and the accuracy of neural networks arose the field of &lt;a href=&#34;https://en.wikipedia.org/wiki/Explainable_artificial_intelligence&#34;&gt;neural network interpretability&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;finding-the-neural-correlates&#34;&gt;Finding the neural correlates&lt;/h2&gt;
&lt;p&gt;Any task performed by the neural network must have a group of neurons that are responsible for it.  In biological brains, this is called &amp;quot;&lt;em&gt;neural correlate&lt;/em&gt;.&amp;quot;  Such neural correlates &lt;a href=&#34;https://distill.pub/2021/multimodal-neurons/&#34;&gt;exist in artificial neural networks as well.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So I was interested in the following question:&lt;/p&gt;
&lt;p&gt;When comparing a hand-crafted heuristic algorithm for solving a particular problem with a better-performing neural network-based program, can you find those neurons that are responsible for the better performance?  And can you learn something about the flaws in the heuristics of the hand-crafted algorithm by studying those neurons?&lt;/p&gt;
&lt;p&gt;I used the following approach for this in my 2018 Computer Science Master&#39;s thesis:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Given a system A, which is based on a neural network and which has better accuracy than system B (an arbitrary black box), let both systems classify a large number of samples, and then correlate the output values of each individual neuron in system A with a number that indicates whether system A was more accurate than system B.  The neurons with the highest correlation coefficient are candidates for having encoded a property of the classification problem that system B does not take into account.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Algorithmically:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- For each sample &amp;quot;s&amp;quot;:
    - Let system &amp;quot;A&amp;quot; and system &amp;quot;B&amp;quot; classify sample &amp;quot;s&amp;quot;
    - For each neuron &amp;quot;n&amp;quot; in system &amp;quot;A&amp;quot;:
        - activations[n][s] = output value of neuron &amp;quot;n&amp;quot; while NN classifies &amp;quot;s&amp;quot;
    - relative_performance[s] =
        - 1, if system A correctly classified sample &amp;quot;s&amp;quot; but system B didn&#39;t
        - 0, otherwise
- For each neuron &amp;quot;n&amp;quot; in system &amp;quot;A&amp;quot;:
    - correlation[n] = Spearman&#39;s rank correlation coefficient between
        - activations[n]
        - relative_performance
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/w/index.php?title=Spearman%27s_rank_correlation_coefficient&amp;amp;oldid=959791303&#34;&gt;Spearman&#39;s rank correlation coefficient&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;reconstructing-the-model&#34;&gt;Reconstructing the model&lt;/h2&gt;
&lt;p&gt;Having identified candidates for neurons that encode new knowledge about the classification problem, we can narrow down or focus of analysis.&lt;/p&gt;
&lt;p&gt;If our object of inspection is based on an image recognition neural network, we could analyze these neurons through &lt;a href=&#34;https://distill.pub/2017/feature-visualization/&#34;&gt;feature visualization&lt;/a&gt; to get an idea for what these highly correlated neurons &amp;quot;see&amp;quot;. E.g., here are some visualizations made with the software &lt;em&gt;&lt;a href=&#34;https://github.com/tensorflow/lucid&#34;&gt;Lucid&lt;/a&gt;&lt;/em&gt;, showing various layers of a NN, from low-level layers that detect edges/patterns to high-level layers that detect complex objects:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/images/inceptionv1-conv2d0_c18-mixed3b_c27-mixed4b_c22-mixed5b_c29.png&#34; alt=&#34;example use of lucid&#34;&gt;&lt;/p&gt;
&lt;p&gt;I should add that while I have applied this idea in my thesis, I unfortunately didn&#39;t learn much from visualizing the highly correlated neurons. This was likely because I was crazy enough to apply this to &lt;a href=&#34;https://github.com/google/deepvariant&#34;&gt;DeepVariant&lt;/a&gt;, which technically uses an image recognition network, but it&#39;s not trained on natural images, but &lt;a href=&#34;https://google.github.io/deepvariant/posts/2020-02-20-looking-through-deepvariants-eyes/&#34;&gt;synthetic 6-channel pile-up images&lt;/a&gt;.  Therefore, my visualizations were mostly indecipherable noise.  I still wonder whether this idea would be more fruitful when applied to a NN trained on natural images.&lt;/p&gt;
&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;
&lt;p&gt;For a better intuition, let&#39;s consider a real-world example.  In 2020, we already have neural networks that detect medical issues in X-ray images where radiologists fail to detect them.  If we would show 10,000 images to both the NN and the radiologist, we may find that there are 120 images where the NN correctly identified the disease but the radiologist didn&#39;t.  Furthermore, we may find that there were 3 neurons in the NN whose outputs spiked almost exclusively when viewing those 120 images.&lt;/p&gt;
&lt;p&gt;Those 3 neurons might pick up something that the radiologist can&#39;t.  Correlation doesn&#39;t imply causation, but it&#39;s still worth taking a look.  By applying a feature visualization method on those neurons, we might find, for example, that they are sensitive to particular ring-shaped patterns that the human eye has difficulties picking up.  With this knowledge, we could devise an image filter that enhances these particular patterns to help the radiologist recognize them as well.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Oasis</title>
      <link>https://hut.pm/oasis.html</link>
      <pubDate>Sat, 30 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/oasis.html</guid>
      <description>&lt;p&gt;I really like the sense of isolation that you get from games like &lt;a href=&#34;https://subsetgames.com/ftl.html&#34;&gt;FTL&lt;/a&gt; (an unforgiving strategy/survival space game). The isolation is somehow cold and cozy at the same time.  Cold, because in space, everything is distant, resources are tight, and there is danger and death everywhere you go.  You&#39;re on your own, and there&#39;s but a thin sheet of metal separating you from the infinite, suffocating void of space. And on a grander scale, there is a sense of impending, ultimate doom, as the galaxy is in turmoil and civilization seems to be going downhill.&lt;/p&gt;
&lt;p&gt;Yet there is some comfort in the fact that this heap of junk you call a spaceship is still flying. (For now, at least.)  Within the chaos of the world and the nothingness of space, it is an oasis that you can call home, and that provides everything you need to survive, from oxygen to missile launchers.  It got you this far, and who knows how far it&#39;s going to take you still.&lt;/p&gt;
&lt;p&gt;Perhaps this is what I was trying to recreate when playing this &lt;a href=&#34;https://rimworldgame.com&#34;&gt;RimWorld&lt;/a&gt; colony in 2019.  I didn&#39;t have the typical purpose of building a gigantic fortress full of bionic super soldiers, acquiring a mountain of silver, becoming drug overlords, or selling button shirts of human skin on a drug-fueled cannibal prisoner farm.  My goal was quite humble.&lt;/p&gt;
&lt;p&gt;I wanted to escape the grind and build a cozy little self-sustainable farm on a sweet little island.  A quiet little walden pond.  Immune to most dangers of the world, and mostly unreachable by pirates and mechs, which typically don&#39;t have any means to cross the water barrier.  To create my own isolated oasis. :)&lt;/p&gt;
&lt;h2 id=&#34;the-beginning&#34;&gt;The Beginning&lt;/h2&gt;
&lt;p&gt;My colonists, &lt;a href=&#34;https://tvtropes.org/pmwiki/pmwiki.php/Characters/Texhnolyze&#34;&gt;Kazuho Yoshii&lt;/a&gt; and &lt;a href=&#34;https://tvtropes.org/pmwiki/pmwiki.php/Characters/SerialExperimentsLain&#34;&gt;Iwakura Lain&lt;/a&gt;, were based on main characters from the classical cyberpunk animes &lt;a href=&#34;https://en.wikipedia.org/wiki/Texhnolyze&#34;&gt;Texhnolyze&lt;/a&gt; and &lt;a href=&#34;https://en.wikipedia.org/wiki/Serial_Experiments_Lain&#34;&gt;Serial Experiments Lain&lt;/a&gt; respectively.  In summary, Yoshii was a self-reliant, physically powerful and socially manipulative lone traveler, and Lain was a bright and creative hacker kid, but physically weak and utterly useless in social situations.&lt;/p&gt;
&lt;p&gt;They began the journey on a desert coast near Binhadorda Sea of the Planet WUK 05 Primus. (See last chapter for game details)&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/beginning.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/beginning.thumb.jpg&#34; alt=&#34;beginning&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It was a barren desert area with few resources, particularly little food and wood, but I got by.  I settled in a cave that was already dug out, presumably by alien insects that lived there before, and spent my time eating camels and researching the vital technologies that I needed to catapult myself onto the island:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Batteries&lt;/li&gt;
&lt;li&gt;Biofuel Refining&lt;/li&gt;
&lt;li&gt;Transport Pod&lt;/li&gt;
&lt;li&gt;Moisture Pump&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why moisture pump? Because the island I was planning to settle was not quite an island yet.  It was just a bed of shallow water within the ocean, just off the shore. The plan was to use the moisture pump to turn the shallow water into arable land over the course of several years. And luckily there was a bit of limestone peeking out of the shallow water, which I could mine to have some solid ground on which to place the moisture pump. :)&lt;/p&gt;
&lt;p&gt;But the moisture pump needed power. There was not enough space on the island to place batteries, let alone generators. Thankfully there was a little island with more solid ground just below the shallow water, and there was just enough space for a battery and a transport pod launcher! (I don&#39;t want to desert my colonist on the tiny island, right?)&lt;/p&gt;
&lt;p&gt;So first I had to diligently shoot down some limestone to free a spot on the secondary island to have somewhere to land:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/shooting_rocks.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/shooting_rocks.thumb.jpg&#34; alt=&#34;shooting_rocks&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then Yoshii dropped on to the secondary island to deploy a battery:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/digging.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/digging.thumb.jpg&#34; alt=&#34;digging&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And finally Lain dropped onto the shallow water to build the moisture pump, along with a heap of supplies since she won&#39;t be coming back for a while, as there&#39;s no room to build a transport pod launcher...&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/building_pump.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/building_pump.thumb.jpg&#34; alt=&#34;building_pump&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And thus began a long wait for the moisture pump to do the work.  The conditions were harsh for Lain.  There was no table to eat from, and there was not much to do except to play with the horse shoe pin and take long walks in cold, salty water.  At least there were no annoying people around.&lt;/p&gt;
&lt;p&gt;The battery had to be periodically replaced.  It took about 2.2 charges for each radius increase of the moisture pump.  Worst of all, I couldn&#39;t build a roof so the battery was exposed to rain, which made it short-circuit once =(&lt;/p&gt;
&lt;p&gt;There was one silver lining: The dining experience, despite the lack of a table, was slightly impressive, according to Lain&#39;s standards.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/wait.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/wait.thumb.jpg&#34; alt=&#34;wait&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It was a huge relief when there was enough solid ground to place a bed on, and build a wall to support a roof so that the goodies were not spoiled as fast.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/bed.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/bed.thumb.jpg&#34; alt=&#34;bed&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But you had to see my face when I realized that there is a thing called &lt;strong&gt;BRIDGE&lt;/strong&gt; which I could build immediately to support structures like generators, instead of waiting for &lt;strong&gt;years&lt;/strong&gt; for the moisture pump to do the work.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/bridges.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/bridges.thumb.jpg&#34; alt=&#34;bridges&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It was still a pain, since there was barely any wood in the whole desert.  Yet it was immensely useful.&lt;/p&gt;
&lt;p&gt;Time came, Lain set up a table, a network of moisture pumps all over the island, a research bench to occupy herself, and a communications console.  Realized too late that Lain was too shy to use the communications console, so it was a huge waste ;_; but well, I never said I was smart. Soon enough she wouldn&#39;t need regular food supplies dropped via transport pod, but could sustain herself on the potatoes she grew on the stony soil.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/building.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/building.thumb.jpg&#34; alt=&#34;building&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another WIP screenshot:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/wip1.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/wip1.thumb.jpg&#34; alt=&#34;wip1&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Meanwhile, on the land, life was tough for Yoshii.  Constantly mining resources and catapulting them over to the island, having nobody to hang out with (although Lain hasn&#39;t been a great conversation partner either), and it got increasingly difficult to fend of the raider attacks all alone. When enough resources have been transported, it was finally time to leave.&lt;/p&gt;
&lt;h2 id=&#34;the-migration&#34;&gt;The Migration&lt;/h2&gt;
&lt;p&gt;He couldn&#39;t be happier to desert the desert to join Lain on the cozy little safe haven they carved out for themselves.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/arrival.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/arrival.thumb.jpg&#34; alt=&#34;arrival&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It was not always easy on the island either. Pirates could still reach them with transport pods or mortars, which sometimes devastated the little habitat, and with a low influx of resources, it was hard to recover.  The multi-analyzer, for example, didn&#39;t get rebuilt as of the time of writing, after it was reduced to a pile of plasteel and gold in a siege attack, to which they were helplessly exposed:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/siege_repair.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/siege_repair.thumb.jpg&#34; alt=&#34;siege_repair&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And the gods were visibly annoyed about the colonists cheating their way out of the grind by striking Yoshii with lightning:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/lightning.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/lightning.thumb.jpg&#34; alt=&#34;lightning&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Yet it was preferable to the maddening savagery of the outside world:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/siege_fight.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/siege_fight.thumb.jpg&#34; alt=&#34;siege_fight&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And so they remained on their little isolated farm, on the most sane speck of this ball of dust that they orbited the sun on.  Passing the time by smoking some home grown, by farming psychoid plants, refining them into addictive drugs and selling them to the highest bidder. By getting rich and embedding the silver into the floor where it doesn&#39;t take up any space. By flaying their assailants and selling their meat and skin to cannibals. And slowly turning into bionic super soldiers to protect their little fortress...&lt;/p&gt;
&lt;p&gt;The Rim never changes, does it?...&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;data/images/rimworld/lategame2.png&#34;&gt;&lt;img src=&#34;data/images/rimworld/lategame2.thumb.jpg&#34; alt=&#34;lategame2&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;game-details&#34;&gt;Game Details&lt;/h2&gt;
&lt;p&gt;Planet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name: WUK 05 Primus&lt;/li&gt;
&lt;li&gt;Map seed: cannibal&lt;/li&gt;
&lt;li&gt;Coverage: 50%&lt;/li&gt;
&lt;li&gt;Scenario: Crashlanded (Losing is fun, Cassandra Classic)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Location:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Coordinates: 28.16°S 24.51°W&lt;/li&gt;
&lt;li&gt;Biome: Desert&lt;/li&gt;
&lt;li&gt;Terrain: Mountainous&lt;/li&gt;
&lt;li&gt;Special features: Southern Coast, Caves&lt;/li&gt;
&lt;li&gt;Average Temperature: 17.7°C (4°C to 32°C)&lt;/li&gt;
&lt;li&gt;Growing Period: 40/60 days&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Character: Iwakura Lain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Backstory: Hacker Kid&lt;/li&gt;
&lt;li&gt;Traits: Bisexual, Transhumanist, Ascetic, Wimp&lt;/li&gt;
&lt;li&gt;Incapable of: Social&lt;/li&gt;
&lt;li&gt;Passions:  Intellectual, Crafting&lt;/li&gt;
&lt;li&gt;Minor passions: Artistic, Construction&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Character: Kazuho Yoshii&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Backstory: Military Trainee, Lone Traveler&lt;/li&gt;
&lt;li&gt;Traits: Straight, Tough, Ascetic, Careful Shooter&lt;/li&gt;
&lt;li&gt;Passions: Shooting&lt;/li&gt;
&lt;li&gt;Minor passions: Melee, Construction, Medical&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rimworld Core 1.0.2408&lt;/li&gt;
&lt;li&gt;Map Reroll (in fact, it took a couple of rerolls to get a map with such a nice island)&lt;/li&gt;
&lt;li&gt;Realistic Darkness&lt;/li&gt;
&lt;li&gt;Simple Recycling&lt;/li&gt;
&lt;li&gt;More Trade Ships&lt;/li&gt;
&lt;li&gt;Prepare Carefully&lt;/li&gt;
&lt;li&gt;Combat Extended&lt;/li&gt;
&lt;li&gt;Combat Extended Guns&lt;/li&gt;
&lt;li&gt;Simple Sidearms&lt;/li&gt;
&lt;li&gt;Color Coded Mood Bar&lt;/li&gt;
&lt;li&gt;Wall Light&lt;/li&gt;
&lt;li&gt;Pick Up And Haul&lt;/li&gt;
&lt;li&gt;Rainbeau&#39;s Rational Romance&lt;/li&gt;
&lt;li&gt;Rainbeau&#39;s Rumor Has It&lt;/li&gt;
&lt;li&gt;RimCities&lt;/li&gt;
&lt;li&gt;Hospitality&lt;/li&gt;
&lt;li&gt;Megafauna&lt;/li&gt;
&lt;li&gt;MinifyEverything&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;update-on-2020-10-10&#34;&gt;Update on 2020-10-10&lt;/h2&gt;
&lt;p&gt;Since writing this article, the amazing mod &lt;a href=&#34;https://steamcommunity.com/sharedfiles/filedetails/?id=1909914131&#34;&gt;Save Our Ships 2&lt;/a&gt; was released, that I wish I had back then.  The game &lt;a href=&#34;https://bugbyte.fi/spacehaven/&#34;&gt;Space Haven&lt;/a&gt; goes into a very similar direction.&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.reddit.com/r/RimWorld/comments/gtln5a/my_story_of_settling_a_shallow_water_island/&#34;&gt;Published on Reddit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Stateless</title>
      <link>https://hut.pm/stateless_draft.html</link>
      <pubDate>Sat, 04 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/stateless_draft.html</guid>
      <description>&lt;p&gt;This is a draft for a game that I wanted to build, but probably will never have the time for.&lt;/p&gt;
&lt;p&gt;If you are interested in realizing this, please &lt;a href=&#34;about.html&#34;&gt;contact me&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;
&lt;p&gt;50 years into the future, as the corporations tighten their grip on the citizens of the earth, the lawless high sea attracts heros of all kind. An evergrowing, improvised raft is forming in the pacific ocean, creating a parallel anarchic society of fugitives, dreamers and disillusioned revolutionaries.&lt;/p&gt;
&lt;p&gt;Fictional and non-fictional popular characters can be found in the bars and hideouts.  Leave the cruel world behind and dock on to the gigantic raft to explore it and engage in deep conversations with your favorite movie stars, video game characters and philosophers.&lt;/p&gt;
&lt;h2 id=&#34;conversations&#34;&gt;Conversations&lt;/h2&gt;
&lt;p&gt;Isn&#39;t it sad that interesting characters from books, video games, movies, series and other media only have an impact on you while you engage in that media, but stop doing so when you&#39;re done?  How often has a character fascinated you, taught you about life, or given you a new perspective?&lt;/p&gt;
&lt;p&gt;This game leverages these emotional connections you created with those characters in your past and gives you a chance to reconnect with them.&lt;/p&gt;
&lt;p&gt;The conversations are curated by the users in an open, wiki-like database. This allows hardcore fans to geek out about their favorite characters and write scripts for interactions that are as close to the fictional person as possible.&lt;/p&gt;
&lt;p&gt;In order to avoid spoilers, the characters might ask you whether you watched a particular movie or read a particular book, and adjust their responses accordingly.&lt;/p&gt;
&lt;p&gt;As the game grows through the expansion of the conversation database, more characters are added, and more raft pieces are docked on.  One can watch the raft grow over the years, and this would incentivize players to keep coming back to the game.&lt;/p&gt;
&lt;h2 id=&#34;setting&#34;&gt;Setting&lt;/h2&gt;
&lt;p&gt;The raft is an inhomogeneous, steadily growing place with sceneries ranging from shady corners to colorful luxury apartments.  Much of the conversational gameplay might happen in bars, but eventually, this is up to the imagination of the users who build the world.&lt;/p&gt;
&lt;p&gt;The characters may come from any time and place, and can be fictional or non-fictional.  There needs to be some plot device that allowed characters from other times to enter that raft.&lt;/p&gt;
&lt;p&gt;The world is set 50 years in the future, allowing for intellectual conversations your favorite characters about problems that the world is facing right now, and will face in the future.&lt;/p&gt;
&lt;h2 id=&#34;the-name&#34;&gt;The Name&lt;/h2&gt;
&lt;p&gt;The name &amp;quot;Stateless&amp;quot; has two meanings.  The first is that the raft on the high sea on which the game takes place does not belong to, nor has to obey any state.  The second is that the game itself is stateless, as in, there is no saved state at all.  This game is not about making progress, but about having conversations, which can be repeated and skipped as desired.  One can leave the game and join back on any device to resume where one has stopped before.  It is not addictive, only inviting.&lt;/p&gt;
&lt;h2 id=&#34;switchable-front-end&#34;&gt;Switchable Front-End&lt;/h2&gt;
&lt;p&gt;Since the game mechanics is minimal, and the conversation data, map data, and other game definition files will be in ubiquitous formats, it can be plugged into any kind of front-end.  Here are some possibilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It can be a 3D world with cozy interior decorations, starry night skies and sparkly plastic swimming in the ocean.  Eventually, we can add voice acting.&lt;/li&gt;
&lt;li&gt;A SNES-RPG-like top-down view for a nostalgic feel&lt;/li&gt;
&lt;li&gt;ASCII graphics similar to the classical rogue-like games, or dwarf fortress&lt;/li&gt;
&lt;li&gt;A text adventure in a console, the browser, or on a smartphone app.  This boils down the game to the essentials without losing the depth.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes it incredibly accessible to players on any device while still making a state-of-the-art gaming experience possible.&lt;/p&gt;
&lt;h2 id=&#34;possible-problems&#34;&gt;Possible Problems&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The conversations you&#39;d have would be &amp;quot;in a vacuum&amp;quot;.  Often, interesting topics emerge during interesting activities.  In other games or movies, characters give their opinion on the various events that are happening.  Here, it&#39;s more like talking with a friend in a bar about the old times.  This has to be navigated well.&lt;/li&gt;
&lt;li&gt;Conversations that are stateless imply that the conversation partner can not be influenced by the player.  One can not gain their trust, convince them of anything, and so on.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Remembering books with flashcards</title>
      <link>https://hut.pm/rememberbooks.html</link>
      <pubDate>Sat, 21 Mar 2020 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/rememberbooks.html</guid>
      <description>&lt;p&gt;I&#39;ve met people who read (non-fiction) books and they just remember all important details effortlessly. I&#39;m totally not one of them. The concepts might have an impact on me for a while but then quickly fade. A year later, it would be challenging in a discussion to refer to what I&#39;ve read with any confidence.&lt;/p&gt;
&lt;p&gt;Thankfully there are options to help with that. My system consists of &lt;strong&gt;taking notes&lt;/strong&gt; and then &lt;strong&gt;boiling them down&lt;/strong&gt; into what fits on a &lt;strong&gt;flashcard&lt;/strong&gt; so I can continuously revisit it as time passes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When I read something valuable in the book, I highlight it and copy the paragraphs into a book summary text file.
&lt;ul&gt;
&lt;li&gt;The text file helps conveniently revisiting all valuable information&lt;/li&gt;
&lt;li&gt;Personal annotations go there as well&lt;/li&gt;
&lt;li&gt;If the book is not digital, I just highlighting with a marker&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;In parallel, I write down the essential key points of the book.&lt;/li&gt;
&lt;li&gt;When finished, I re-read my book summary (or go through all marked passages) and make sure that I identified all the key points.&lt;/li&gt;
&lt;li&gt;I boil down the key points into the 5 most important takeaways.
&lt;ul&gt;
&lt;li&gt;It depends on the reader which key points are most important. Much of what&#39;s written in books is plain obvious. But even then, being more aware of the obvious can be a game changer.&lt;/li&gt;
&lt;li&gt;Some key points are derived from more basic, essential key points.  Boiling them down helps identifying commonalities and finding the essential ones.
&lt;ul&gt;
&lt;li&gt;Yet some of those derived key points are so impactful that they warrant a place in the final list of 5 key takeaways.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;For very large books, one could boil down 5 key points for arbitrary subsections of the book.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Finally I create a &lt;a href=&#34;https://en.wikipedia.org/wiki/Flashcard&#34;&gt;flashcard&lt;/a&gt; with those 5 takeaways on the back, and something like &amp;quot;What&#39;s the 5 takeaways of book X?&amp;quot; on the front.
&lt;ul&gt;
&lt;li&gt;To avoid forgetting the context, I also add some extra quotes, images and explanations to the back side of the flashcards, which I don&#39;t need to remember, but it&#39;s there if I need it.&lt;/li&gt;
&lt;li&gt;I use &lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki&lt;/a&gt; as a flashcard app, but whatever floats your boat.&lt;/li&gt;
&lt;li&gt;In Anki, I give these flashcards a specific tag so that I can quickly revisit them by using a &amp;quot;Filtered Deck&amp;quot;, e.g. in preparation for pivotal events.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You might find more than 5 takeaway points. I&#39;d urge you to limit the flashcard to the 5 most important points, and create supplementary flashcards that remind you of the other points instead.  Otherwise the main flashcard will get too big and too hard to review. But feel free to experiment.&lt;/p&gt;
&lt;p&gt;You might find less than 5 takeaway points. Great, now you have the option between making the flashcard smaller and therefore easier to remember, or adding some non-essential points to remember even more about the book.&lt;/p&gt;
&lt;h1 id=&#34;the-flashcard&#34;&gt;The Flashcard&lt;/h1&gt;
&lt;p&gt;The critical part is the flashcard of the 5 key takeaways of the book.  It forces me to not only read the key points but also to be able recall them.  &lt;strong&gt;By reviewing the key points over and over again, in different places, at different times of my life, I keep applying those key points to all sorts of contexts and keep looking at them from different perspectives.  They really get ingrained into the way my mind works.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The price of this system is the overhead while reading, the extra work of summarizing, and the need to form a habit of regularly reviewing flashcards.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note that creating the right kind of flashcard is hard, and it will take several iterations to get it right for you personally. Do not make many of these at once before testing whether they actually help you.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&#39;s have a look at some examples:&lt;/p&gt;
&lt;h1 id=&#34;example-1-antifragile&#34;&gt;Example 1: Antifragile&lt;/h1&gt;
&lt;p&gt;Here&#39;s my flashcard for the popular book &amp;quot;&lt;a href=&#34;https://en.wikipedia.org/wiki/Antifragile&#34;&gt;Antifragile&lt;/a&gt;&amp;quot; by Nassim Nicholas Taleb.&lt;/p&gt;
&lt;p&gt;Of course, the five succinct points don&#39;t get across all the context. They won&#39;t help you much if you didn&#39;t read the book in the first place, but they do help holding it all together in your head once you did read the book.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The Triad:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fragile&lt;/strong&gt; (a chore, breaks with stress, concave)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Robust&lt;/strong&gt; (a habit, unchanged by stress, constant)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Antifragile&lt;/strong&gt; (a desire, grows with stress, convex)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Barbell Strategy:
&lt;ul&gt;
&lt;li&gt;Invest most safely (robust, with low risk for negative &lt;a href=&#34;https://en.wikipedia.org/wiki/The_Black_Swan:_The_Impact_of_the_Highly_Improbable&#34;&gt;black swan&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Invest a little with high risk (antifragile, with possibility of positive black swan)&lt;/li&gt;
&lt;li&gt;Invest &lt;strong&gt;nothing&lt;/strong&gt; in the middle ground (fragile)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Antifragility consists of redundant, fragile components (muscles, evolution), or of exploitation of the fragility of others (hedge fund managers)&lt;/li&gt;
&lt;li&gt;Nurture antifragilities by
&lt;ul&gt;
&lt;li&gt;Allowing stress/volatility (Minimize interventionism when possible)&lt;/li&gt;
&lt;li&gt;Provide redundancy (Even antifragile systems have a breaking point. Raise it to survive)&lt;/li&gt;
&lt;li&gt;Optionality (More positive black swans)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Via Negativa: Instead of worrying about what exactly to do, &lt;strong&gt;focus on subtracting things that are obviously bad&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I consider the card &amp;quot;passed&amp;quot; even if I don&#39;t recall what&#39;s in the parenthesis.  That&#39;s just extra context.&lt;/p&gt;
&lt;h1 id=&#34;example-2-never-split-the-difference&#34;&gt;Example 2: Never Split the Difference&lt;/h1&gt;
&lt;p&gt;Another example is my flashcard for &amp;quot;Never Split the Difference&amp;quot;, a book on negotiation by &lt;a href=&#34;https://en.wikipedia.org/wiki/Christopher_Voss&#34;&gt;Chris Voss&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Again, without reading the book first, along with all the explanations, examples and context, this will probably not help you much.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Always think win-win&lt;/strong&gt;. (Your negotiation counterpart is the collaborator in solving the underlying issue, from which you both will benefit)&lt;/li&gt;
&lt;li&gt;A &amp;quot;no&amp;quot; is an opportunity to &lt;strong&gt;explore their limits&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ask &lt;strong&gt;open-ended questions&lt;/strong&gt; so they solve the problem for you.
&lt;ul&gt;
&lt;li&gt;How am I supposed to do that?&lt;/li&gt;
&lt;li&gt;What about this is important to you?&lt;/li&gt;
&lt;li&gt;What can I do to make this work for us?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Inconsistencies between their belief &amp;amp; action indicate &lt;strong&gt;hidden constraints (Black Swans)&lt;/strong&gt;. Find them and you can start working on the real problem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aim high!&lt;/strong&gt; (Self-esteem is a huge factor in negotiation, and many people set modest goals to protect it. It&#39;s easier to claim victory when you aim low.)&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;example-3-meditation&#34;&gt;Example 3: Meditation&lt;/h1&gt;
&lt;p&gt;This system can be extended to elucidate and remember the essential points of any practice.&lt;/p&gt;
&lt;p&gt;I did this for &lt;a href=&#34;https://en.wikipedia.org/wiki/Mindfulness&#34;&gt;mindfulness meditation&lt;/a&gt;, and this helped me to stay on track during the practice, where looking up notes would be distracting, and a dependence on guided meditation would be limiting.&lt;/p&gt;
&lt;p&gt;Here it&#39;s more crucial than in the case of a book to mention: The list is custom-tailored to a person, and it will not actually help unless one did the initial work of studying the theory, and practicing, ideally with a tutor.  But I think it&#39;s valuable as an example:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Take a deep breath&lt;/li&gt;
&lt;li&gt;Stop moving and focus on the breath&lt;/li&gt;
&lt;li&gt;Notice things as they arise, let them pass, and gently return to the breath&lt;/li&gt;
&lt;li&gt;Remember that the mind is fully malleable and every experience is constructed&lt;/li&gt;
&lt;li&gt;Practice on the good days so you&#39;re sane on the bad days&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For point 2+3, I have a supplementary text:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;quot;Ancient Pali texts liken meditation to the process of taming a wild elephant. The procedure in those days was to tie a newly captured animal to a post with a good strong rope. When you do this, the elephant is not happy. He screams and tramples and pulls against the rope for days. Finally it sinks through his skull that he can’t get away, and he settles down. At this point you can begin to feed him and to handle him with some measure of safety. Eventually you can dispense with the rope and post altogether and train your elephant for various tasks. Now you’ve got a tamed elephant that can be put to useful work. In this analogy the wild elephant is your wildly active mind, the rope is mindfulness, and the post is your object of meditation, your breathing. The tamed elephant who emerges from this process is a well-trained, concentrated mind that can then be used for the exceedingly tough job of piercing the layers of illusion that obscure reality. Meditation tames the mind.&amp;quot; -- &lt;a href=&#34;http://www.vipassana.com/meditation/mindfulness_in_plain_english_9.php&#34;&gt;Gunaratana, &amp;quot;Mindfulness in Plain English&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;objections&#34;&gt;Objections&lt;/h1&gt;
&lt;p&gt;One problem is that it&#39;s bad practice to make big, complicated flashcards. Ideally, they should focus on small, atomic pieces of information to make the cards easy to review. Cards with a lot of information introduce friction and slow down the reviewing process. Just imagine cards like &lt;em&gt;&amp;quot;List the oblasts of Russia in alphabetical order&amp;quot;&lt;/em&gt; or &lt;em&gt;&amp;quot;What&#39;s the date of birth, place of birth of Isaac Newton, and what were his 10 major contributions to science?&amp;quot;&lt;/em&gt; Whenever you&#39;d see them, you&#39;d loose momentum, and it might stop you from reviewing.&lt;/p&gt;
&lt;p&gt;But from experience, I can say that it actually makes me happy when these cards show up. Yes, they take longer to review, but it&#39;s very rewarding too, and that keeps me motivated. I also have the choice of how deep I go. When I&#39;m in a rush, I briefly list the 5 items. When I have more time, I give it more thought, reframe the information in the current context of my life and see what lessons I can derive.&lt;/p&gt;
&lt;p&gt;An alternative or supplement to this is the creation of many smaller cards to elucidate multiple facets of individual takeaway points, and I&#39;m currently experimenting with this. I suspect that relying on smaller cards alone will not provide the overview of the book necessary for high-level reflection and effortless recall.&lt;/p&gt;
&lt;p&gt;Either way, I found that flashcards are a journey and there&#39;s no perfect system. In the end you need to experiment and see what works for you.&lt;/p&gt;
&lt;h1 id=&#34;summary&#34;&gt;Summary&lt;/h1&gt;
&lt;p&gt;What better way to wrap this up than by applying the advice to this post itself?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Highlight passages and formulate key points while reading the book.&lt;/li&gt;
&lt;li&gt;Boil down the 5 essential takeaways.  (For large books, 5 takeaways per subsection.)&lt;/li&gt;
&lt;li&gt;Create a flashcard (e.g. with &lt;a href=&#34;https://apps.ankiweb.net/&#34;&gt;Anki&lt;/a&gt;) with those 5 takeaways + some optional supplementary context.&lt;/li&gt;
&lt;li&gt;Continuously review it so you can recall the takeaways effortlessly for the rest of your life.&lt;/li&gt;
&lt;li&gt;As you review it in different times of your life, you&#39;ll reframe it in various contexts and derive new lessons.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;Published on: &lt;a href=&#34;https://www.reddit.com/r/productivity/comments/fmz8bq/uploading_books_into_your_brain/&#34;&gt;Reddit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Why I don&#39;t use ArchLinux anymore</title>
      <link>https://hut.pm/pacman.html</link>
      <pubDate>Sat, 28 Jul 2018 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/pacman.html</guid>
      <description>&lt;p&gt;I&#39;ve been a long time user of &lt;a href=&#34;https://www.archlinux.org/&#34;&gt;ArchLinux&lt;/a&gt;, but it&#39;s
just intolerable...&lt;/p&gt;
&lt;p&gt;These are typical steps of installing an application:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;sudo pacman -S hackertool42&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Couldn&#39;t download, file not found&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pacman -Sy hackertool42&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;updating...&lt;/li&gt;
&lt;li&gt;installing...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hackertool42&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;CRASH&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Seems like some dependencies are out of date&lt;/li&gt;
&lt;li&gt;Time to upgrade the whole system...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pacman -Syu&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;replace package X1 with package Y1? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X2 with package Y2? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X3 with package Y3? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X4 with package Y4? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X5 with package Y5? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X6 with package Y6? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X7 with package Y7? [Y/n]&lt;/li&gt;
&lt;li&gt;really install? [Y/n]&lt;/li&gt;
&lt;li&gt;Downloading 3gb of files...................&lt;/li&gt;
&lt;li&gt;Checking integrity for 2 minutes...............&lt;/li&gt;
&lt;li&gt;Error: Unknown PGP key&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pacman-key --refresh-keys&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Error: Need root access&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pacman-key --refresh-keys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pacman -Syu&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;replace package X1 with package Y1? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X2 with package Y2? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X3 with package Y3? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X4 with package Y4? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X5 with package Y5? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X6 with package Y6? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X7 with package Y7? [Y/n]&lt;/li&gt;
&lt;li&gt;really install? [Y/n]&lt;/li&gt;
&lt;li&gt;Checking integrity for 2 minutes...............&lt;/li&gt;
&lt;li&gt;Error: file XYZ1 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ2 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ3 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ4 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ5 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ6 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ7 exists in filesystem&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pacman -Qo XYZ1&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;-&amp;gt; Package FOO1&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pacman -R FOO1&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Error: Need root access&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pacman -R FOO1&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Removing...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pacman -Syu&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;replace package X1 with package Y1? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X2 with package Y2? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X3 with package Y3? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X4 with package Y4? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X5 with package Y5? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X6 with package Y6? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X7 with package Y7? [Y/n]&lt;/li&gt;
&lt;li&gt;really install? [Y/n]&lt;/li&gt;
&lt;li&gt;Checking integrity for 2 minutes...............&lt;/li&gt;
&lt;li&gt;Error: file XYZ2 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ3 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ4 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ5 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ6 exists in filesystem&lt;/li&gt;
&lt;li&gt;Error: file XYZ7 exists in filesystem&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pacman -Qo XYZ2&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;No package owns XYZ2&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pip freeze | grep XYZ2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pip uninstall XYZ2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pip uninstall XYZ3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pip uninstall XYZ4&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pip uninstall XYZ5&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pip uninstall XYZ6&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pip uninstall XYZ7&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pacman -Syu&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;replace package X1 with package Y1? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X2 with package Y2? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X3 with package Y3? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X4 with package Y4? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X5 with package Y5? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X6 with package Y6? [Y/n]&lt;/li&gt;
&lt;li&gt;replace package X7 with package Y7? [Y/n]&lt;/li&gt;
&lt;li&gt;really install? [Y/n]&lt;/li&gt;
&lt;li&gt;Checking integrity for 2 minutes...............&lt;/li&gt;
&lt;li&gt;Upgrading...............&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hackertool42&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;It starts!&lt;/li&gt;
&lt;li&gt;But kernel modules don&#39;t work anymore&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo systemctl reboot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hackertool42&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;Finally I can use it&lt;/li&gt;
&lt;li&gt;But at this point, I solved my problem in another way already and I don&#39;t need the program anymore&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Cellmade Gallery</title>
      <link>https://hut.pm/cellmade_gallery.html</link>
      <pubDate>Wed, 21 Mar 2018 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/cellmade_gallery.html</guid>
      <description>&lt;p&gt;Between October and December 2015, I tinkered with cellular automata in OpenGL
Shading Language, and started a project called &amp;quot;Cellmade&amp;quot; which produced a
variety of interesting visuals.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://codeberg.org/hut/cellmade&#34;&gt;Source Code of Cellmade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Cellular_automaton&#34;&gt;Wikipedia: Cellular Automata&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I didn&#39;t invest much time into a good user interface or backward compatibility,
so the way to select one of the different visuals is to check out the
respective git commit, and the way to customize it is to change the code ;).
Early commits in the git history deal with different stuff entirely, such as a
rainbow swirl or a pretty proton/electron simulation.  Some interesting commits
are marked with their own git branch.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://codeberg.org/hut/cellmade/commit/47c3df3ea34d2752ca495d9515c7a8d3b8f601c7&#34;&gt;Rainbow swirl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codeberg.org/hut/cellmade/commit/ced68909f89ca292528bc773e9f8e10299728aef&#34;&gt;Proton/electron simulation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codeberg.org/hut/cellmade/branches&#34;&gt;List of git branches pointing to interesting commits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codeberg.org/hut/cellmade/commits/branch/master&#34;&gt;List of git commits to check out&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;gallery&#34;&gt;Gallery&lt;/h2&gt;
&lt;p&gt;You don&#39;t need to run any code to see the visualizations though, here are some
teasers.  Click on the image to start a video or enlarge the thumbnail.&lt;/p&gt;
&lt;h2 id=&#34;warnings&#34;&gt;Warnings&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;May trigger seizures&lt;/li&gt;
&lt;li&gt;Large files of up to 150MB&lt;/li&gt;
&lt;li&gt;Some videos have sound&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;videos&#34;&gt;Videos&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;data/videos/cellmade/01-particlesimulator.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/01-particlesimulator.thumb.png&#34; alt=&#34;Thumbnail: particle simulator&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/02-grow1.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/02-grow1.thumb.png&#34; alt=&#34;Thumbnail: grow1&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/03-grow2.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/03-grow2.thumb.png&#34; alt=&#34;Thumbnail: grow2&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/04-grow3.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/04-grow3.thumb.png&#34; alt=&#34;Thumbnail: grow3&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/06-battle1.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/06-battle1.thumb.png&#34; alt=&#34;Thumbnail: battle1&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/07-swirl1.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/07-swirl1.thumb.png&#34; alt=&#34;Thumbnail: swirl1&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/08-grow4.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/08-grow4.thumb.png&#34; alt=&#34;Thumbnail: grow4&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/09-gameoflife1.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/09-gameoflife1.thumb.png&#34; alt=&#34;Thumbnail: gameoflife1&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/10-swirl2.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/10-swirl2.thumb.png&#34; alt=&#34;Thumbnail: swirl2&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/11-swirl3.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/11-swirl3.thumb.png&#34; alt=&#34;Thumbnail: swirl3&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/12-wat.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/12-wat.thumb.png&#34; alt=&#34;Thumbnail: wat&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/13-organic.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/13-organic.thumb.png&#34; alt=&#34;Thumbnail: organic&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/14-supernova.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/14-supernova.thumb.png&#34; alt=&#34;Thumbnail: supernova&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/15-sierpinski-rainbows.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/15-sierpinski-rainbows.thumb.png&#34; alt=&#34;Thumbnail: sierpinski rainbows&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/16-flesheater.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/16-flesheater.thumb.png&#34; alt=&#34;Thumbnail: flesheater&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/17-bacterioid.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/17-bacterioid.thumb.png&#34; alt=&#34;Thumbnail: bacterioid&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/18-soapy.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/18-soapy.thumb.png&#34; alt=&#34;Thumbnail: soapy1&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/19-fractalcopier.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/19-fractalcopier.thumb.png&#34; alt=&#34;Thumbnail: fractalcopier&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/20-soapy2.ogv&#34;&gt;&lt;img src=&#34;data/images/cellmade/20-soapy2.thumb.png&#34; alt=&#34;Thumbnail: soapy2&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;images&#34;&gt;Images&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;data/videos/cellmade/img01-waveform.png&#34;&gt;&lt;img src=&#34;data/images/cellmade/img01-waveform.thumb.png&#34; alt=&#34;Thumbnail: waveform&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/img02-glitchsky1.png&#34;&gt;&lt;img src=&#34;data/images/cellmade/img02-glitchsky1.thumb.png&#34; alt=&#34;Thumbnail: glitchsky1&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/img05-bubbly.png&#34;&gt;&lt;img src=&#34;data/images/cellmade/img05-bubbly.thumb.png&#34; alt=&#34;Thumbnail: bubbly&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;data/videos/cellmade/img06-copyworld_on_mandelbrot.png&#34;&gt;&lt;img src=&#34;data/images/cellmade/img06-copyworld_on_mandelbrot.thumb.png&#34; alt=&#34;Thumbnail: copyworld on mandelbrot&#34;&gt;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Evolutionary neural networks</title>
      <link>https://hut.pm/naki.html</link>
      <pubDate>Thu, 02 Apr 2015 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/naki.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;images/naki3.png&#34; alt=&#34;naki screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;A while ago I&#39;ve built an application that simulates little cubic creatures
that live in a virtual environment and behave according to a genetic code,
which is passed down to their offspring with occasional mutations.  I called
the project &amp;quot;naki&amp;quot; (don&#39;t ask me why) and it&#39;s been a lot of fun, but as time
went by, I forgot it and went about my life.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://codeberg.org/hut/naki&#34;&gt;Source code of &amp;quot;naki&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now I rediscovered it and I&#39;m having a blast fiddling with it.  The main change
I introduced was replacing the genetic sequence with a multilayered neural
network that connects sensory neurons with actuators:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;images/nakischematic.png&#34; alt=&#34;schematic&#34;&gt;&lt;/p&gt;
&lt;p&gt;Each connection and neuron has a weight between -1 and 1.  This alone
determines how exactly it will react to a given set of stimuli, and it&#39;s
sufficient to form behavior like &lt;em&gt;&amp;quot;try to stay inside a hot zone to harvest
more energy&amp;quot;&lt;/em&gt; or &lt;em&gt;&amp;quot;run around all over the place and eat those who try to
harvest energy for me&amp;quot;&lt;/em&gt;.  The weights are randomly generated or inherited to
its baby creatures.&lt;/p&gt;
&lt;p&gt;Turns out that this neural network is much more likely to adapt to
environmental circumstances, because one mutation will more likely change the
behavior gradually rather than abruptly, as it may happen with a bit flip in
programming-language-like genetic code.  Combining neural networks with
evolution is generally quite a fun thing.  And nature does it too, in a way.
The basic layout of the brain wiring is determined by the DNA although
obviously it is greatly influenced by environmental factors.  This simulation
just skips the step of having a genetic code and jumps straight to the neural
network.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Europe ASCII art</title>
      <link>https://hut.pm/europe.html</link>
      <pubDate>Fri, 30 Jan 2015 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/europe.html</guid>
      <description>&lt;pre&gt;&lt;code&gt;(ICE)           |NOR|SWE|  (FIN)~~~/
     ,~~,       &#39;~&#39; \  |     _|EST\
     | /             | |    / LET |_
 __  ||           ,~,\|     | LIT/  \
|IR| |&#39;,         |DK)o    _|R\~ /    \
/_/ _| |    _____\~|~~~~~&#39; &#39;~&#39; \  BY |      RUSSIA
   &#39;_   \  /NL/        \        |   ,~~~,
  ,~~ UK| /~~| GERMANY | POLAND |~~&#39;     &#39;~~,
  &#39;~~~~/ ,BEL|       ,~&#39;~      /            |
        ,^~~-LX     | CZ |~~~~/  UKRAINE   _|
   ,~~~&#39;     /      |~~~,&#39; SK |    __     / |
   \_ FRANCE |~~~~~/ AU |~~~~~+~~~/  |  __\ |
     \       /CH|L~_____/ HU  |   \MO| | (_)|___
      |      |~~&#39;    \SI|~~~~~+ROM ~~_/         \_____
     /     M_|__ITALY |~KR/BOS|\_     |BLACK SEA | GE
 ,~~~~~A~~/      \   /  \_\~~~\SB\~~~~|    ______/~~~~
,&#39;~,      |       \  SM   ~MO|KO\_|BUL/___/
|  |SPAIN /   o  VAT  \_   |AL|MZ|___|_,~~.
|PT|     |    O     \ ,-&#39;  \_/~~~~   /  ~~&#39; TURKEY
/_/  _,~~           | /     &#39;\GREECE|  |             _
   \/     o      _ /_/        \~ ~ ~&#39;   \       ____/
                (_)  (MALTA)   \___\     \_____/ (ZYP)
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>The &#34;lscd&#34; File Browser</title>
      <link>https://hut.pm/lscd.html</link>
      <pubDate>Fri, 15 Aug 2014 00:00:00 +0000</pubDate>
      
      <guid>https://hut.pm/lscd.html</guid>
      <description>&lt;p&gt;I&#39;ve been casually working on a file browser that has a similar interface like
ranger, but takes a different approach, in that it is written in POSIX shell.
It&#39;s called &amp;quot;lscd&amp;quot;, for being a vim-like interface for the commands &amp;quot;ls&amp;quot; and
&amp;quot;cd&amp;quot;.&lt;/p&gt;
&lt;p&gt;I wanted to combine the elegance, portability and simplicity of a short bash
script with the ability to get me whereever I want ASAP without the &amp;quot;cd TAB TAB
TAB&amp;quot; boilerplate.  Additionally, it can use ranger&#39;s file opener &amp;quot;rifle&amp;quot; to
execute files just the way ranger does.&lt;/p&gt;
&lt;p&gt;I&#39;m not finished yet, but there is a working alpha version at github:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/hut/lscd&#34;&gt;https://github.com/hut/lscd&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It uses the basic h/j/k/l vim type movement control keys. Check the source for
more key bindings, it makes no sense to write a complete list at this stage of
development.&lt;/p&gt;
&lt;p&gt;And the obligatory screen shot:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;data/images/lscd_screenshot1.png&#34; alt=&#34;screenshot&#34;&gt;&lt;/p&gt;
&lt;p&gt;As you can see, there are no miller columns like in ranger. That may or may not
change in the future. I suspect it would be too slow in bash.&lt;/p&gt;
&lt;p&gt;Pro tip: if you run lscd with the command &amp;quot;. lscd&amp;quot;, it will run in the current
bash environment, rather than in a new one. Only this way the directory will
actually change after you close lscd.&lt;/p&gt;
&lt;p&gt;See also:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://bbs.archlinux.org/viewtopic.php?id=185689&#34;&gt;Arch Linux BBS post&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ranger.github.io&#34;&gt;ranger&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;update-on-2014-09-11&#34;&gt;Update on 2014-09-11&lt;/h2&gt;
&lt;p&gt;Seems like somebody was inspired by lscd, rebuilt it in bash, and actually implemented miller columns. The code can be found here:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/D630/blscd&#34;&gt;https://github.com/D630/blscd&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>