<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"  xml:lang="en-sv"  xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
            <language>en-sv</language>
            <lastBuildDate>Fri, 10 Jul 2026 13:11:03 CEST</lastBuildDate>
            <link>https://blog.troed.se/</link>
            <atom:link href="https://blog.troed.se/rss.xml" hreflang="en-sv" rel="self" type="application/rss+xml"/>
            <atom:link href="https://blog.troed.se/" hreflang="en-sv" rel="alternate" type="text/html"/>
            <atom:link href="https://blog.troed.se/rss.xml" hreflang="en-sv" rel="alternate" type="application/rss+xml"/>
            <title>Things I couldn't find elsewhere</title>
                <item>
                        <description><![CDATA[<h2 id=unmasking-the-unnamed>Unmasking the Unnamed</h2><p>If you’ve spent any time in the retro scene, you know the drill. You’re browsing through old demos or cracktros, and a killer tune starts playing - the kind that stays stuck in your head for days. But there's always that nagging question: <em>Who actually composed this?</em></p><p>Historically, these tracks rarely had credits, and in many cases, they never will. As the scene grows and more people try to catalog this digital history, identifying these &ldquo;anonymous&rdquo; gems has become a massive headache. It turns out that identifying music is easy when you have high-fidelity studio recordings, but things get much messier when you're dealing with vintage sound chips.</p><h3 id=the-problem-with-coarse-frequencies>The Problem with Coarse Frequencies</h3><p>Most modern audio fingerprinting tools - think Dejavu or similar systems - are designed for the wide, complex frequency spectrum of a standard WAV or MP3. They rely on finding consistent &ldquo;landmarks&rdquo; in the audio.</p><p>But retro sound chips (like the Yamaha 2149 chip used to create some of the most iconic music of my youth) operate on much coarser frequency scales. The signals are sparse and periodic in a way that trips up traditional algorithms. When you're trying to match these specific harmonic structures, standard methods just can't find enough reliable landmarks to make a confident match.</p><p>Many attempts have tried to tackle this, but they usually fall short of the precision needed for retro audio.</p><h3 id=our-finding-one-library-could>Our finding: One library could!</h3><p>We found that <a href=https://github.com/dpwe/audfprint rel=external>audfprint</a>
works remarkably well for what we care about: YM (Yamaha FM) music on the Atari ST. While the library is open source and certainly useful for other chips like SID, our specific service caters only to our own retro platform. We encourage others to copy! :D</p><p>To speed up matching for our web service, we ported the core signal processing in the library to the GPU. By leveraging CUDA through <code>CuPy</code> and <code>cuSignal</code>, we implemented a highly parallelized Short-Time Fourier Transform (STFT). It turns out that while there's some overhead in moving data from your CPU to your GPU for tiny clips, once you start dealing with larger audio segments, the performance jump is massive. We’ve seen speedups of 2x or more on long signals just by offloading the STFT calculation. We did this since we expect one usage of the service to be doing live matching on demo show streams.</p><h3 id=whats-next>What's Next?</h3><p>We aren't quite at &ldquo;set it and forget it&rdquo; yet. There are still two main hurdles that could need attention:</p><p>First, there is the transition from clean digital files to real-world microphone input. Dealing with environmental noise and the weird frequency responses of different recording setups is a whole other level of complexity.</p><p>Second, there is the fundamental gap between emulation and reality. Right now, our fingerprints are generated from emulated sound rather than actual physical hardware capture. Bridging that gap - making sure an algorithm can recognize a track whether it’s being played by an emulator or a real piece of Atari ST hardware - would definitely raise the confidence level of matches higher.</p><p>You'll find our service here: <a href=https://cat.sync.wtf rel=external>Chip 'n Tell</a></p><p>Enjoy.</p><hr><p><em>Greetings:</em></p><ul><li>The creator of <code>audfprint</code>, Dan Ellis.</li><li>The creator of <code>psgplay</code>, Fredrik Noring.</li></ul>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2026-07-10:/posts/chip_n_tell/</guid>
                        <link>https://blog.troed.se/posts/chip_n_tell/</link>
                        <atom:link href="https://blog.troed.se/posts/chip_n_tell/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 10 Jul 2026 13:11:03 CEST</pubDate>
                        <title>Chip ’n Tell</title>
                </item>
                <item>
                        <description><![CDATA[<h2 id=why-are-we-here>Why are we here</h2><p>A while back I found myself having an irritating problem. I was reverse engineering an IP camera and wanted to modify its filesystem. Easy - you just desolder the BGA NAND, read it out, patch and write it back - right?</p><p>Well, not when there&rsquo;s a difference in the ECC depending on whether a page has been written at all compared to if it has been written back with the same byte pattern. That is, the ECC for a page full of 0xff is 0xff if it has never been flashed before but 0x00 if it has. This is due to the on-chip ECC engine and not something the <a href=https://www.embeddedcomputers.net/products/FlashcatUSB_Mach1/ rel=external>Flashcat</a>
software is able to avoid.</p><p>So, faced with the ability to either flash the data with ECC calulations off (&ldquo;corrupt filesystem&rdquo;) or with ECC calculations on (&ldquo;corrupt filesystem&rdquo;) I had to figure out a third solution.</p><p>Calculate the ECC myself - because then I can make sure it&rsquo;s only calculated on the sectors that should have it and not the &ldquo;uninitialized&rdquo; ones.</p><p>The ECC algorithm for Winbond W25N01GV is not public. The only <a href=https://www.techdesign.com/market/winbond/resources/application-note/how-to-work-with-winbond-serial-nand-flash-build-in-ecc rel=external>information that exists</a>
shows it to consist of 6 bytes for every 512 byte sector in a full 2112 byte page:</p><table><thead><tr><th>Component</th><th>Count</th><th>Size per Item</th><th>Total Size</th><th>Description</th></tr></thead><tbody><tr><td><code>Sector Data</code></td><td><code>4</code></td><td><code>512 bytes</code></td><td><code>2048 bytes</code></td><td><code>Main data storage area</code></td></tr><tr><td><code>Spare Area</code></td><td><code>4</code></td><td><code>16 bytes</code></td><td><code>64 bytes</code></td><td><code>Out-of-band (OOB) data</code></td></tr><tr><td><strong>Total</strong></td><td>-</td><td>-</td><td><strong>2112 bytes</strong></td><td>Complete page size</td></tr></tbody></table><p>The makeup of a 16 byte Spare area looks like this:</p><table><thead><tr><th>Byte Offset</th><th>Size</th><th>Field Name</th><th>Description</th><th>Typical Value</th></tr></thead><tbody><tr><td><code>0-1</code></td><td><code>2b</code></td><td><code>Bad Block Marker</code></td><td><code>Indicates bad/defective block</code></td><td><code>0xFFFF</code></td></tr><tr><td><code>2-3</code></td><td><code>2b</code></td><td><code>User Data II</code></td><td><code>Custom user data field</code></td><td><code>0xFFFF</code></td></tr><tr><td><code>4-7</code></td><td><code>4b</code></td><td><code>User Data I</code></td><td><code>Custom user data field</code></td><td><code>0xFFFFFFFF</code></td></tr><tr><td><code>8-13</code></td><td><code>6b</code></td><td><code>Sector ECC</code></td><td><code>ECC for 512-byte sector</code></td><td><code>Computed</code></td></tr><tr><td><code>14-15</code></td><td><code>2b</code></td><td><code>Spare ECC</code></td><td><code>ECC for spare bytes 4-13</code></td><td><code>Computed</code></td></tr></tbody></table><p>Additionally, Winbond writes the following in their documention:</p><blockquote><p><em>As the ECC engine is based on Hamming code, the ECC status bits are applicable for 1 bit ECC correction and 2 bit ECC detection.</em></p></blockquote><p>This should be solvable, right? Well, it turns out that 6 bytes for a 512 byte sector isn&rsquo;t a common Hamming code schema and none of the public Hamming ECC implementations I looked at came even close. I thus turned to making a brief stab at it myself, but after an easy win where I observed that it&rsquo;s actually a 3 byte ECC over 256 byte sub-sectors it seemed to be quite a task to reverse it any further.</p><p>So I booted up <code>Qwen3.6-35B-A3B-GGUF</code> (<code>UD_Q4_K_XL</code> quant) - and additionally built a llama.cpp with MTP support from an as-of-yet not merged PR together with an MTP version of the model. This is a model that runs quite fast on my 16GB 5060Ti system, which was needed because the next thing I did was to harness the LLM in a loop - with the &ldquo;simple&rdquo; task of &mldr; reverse engineering this ECC algorithm. I gave it what I already knew, and watched it get to work.</p><p><em>Don&rsquo;t put cloud models you&rsquo;re paying per token in a loop like this, kids!</em></p><p>Roughly 24 hours later I had the whole ECC scheme reversed. The LLM went wildly off track at times, but not more than that I only needed to nudge it slightly in the right direction with a knowledge file for it to refer to after each compaction event. Thanks to the harness (Opencode+DCP+Superpowers) it constantly verified its &ldquo;thinking&rdquo; through writing Python programs, which meant that there were practically no hallucination issues when it made hypotheses and verified them.</p><p>Oh, yeah. I&rsquo;m assuming you ended up at this blog post because you have also been searching for the algorithm. Here it is:</p><h2 id=main-sector-ecc-algorithm>Main Sector ECC Algorithm</h2><hr><p>The ECC is based on <strong>Hamming code</strong> with additional parity correction. For each 256-byte sub-sector:</p><p>Step 1: Compute Hamming Syndrome</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>syn <span style=color:#f92672>=</span> <span style=color:#ae81ff>0</span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>for</span> byte_pos <span style=color:#f92672>in</span> range(<span style=color:#ae81ff>256</span>):
</span></span><span style=display:flex><span>    bv <span style=color:#f92672>=</span> sub_sector[byte_pos]
</span></span><span style=display:flex><span>    <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> range(<span style=color:#ae81ff>8</span>):
</span></span><span style=display:flex><span>        <span style=color:#66d9ef>if</span> bv <span style=color:#f92672>&amp;</span> (<span style=color:#ae81ff>1</span> <span style=color:#f92672>&lt;&lt;</span> i):
</span></span><span style=display:flex><span>            syn <span style=color:#f92672>^=</span> (byte_pos <span style=color:#f92672>*</span> <span style=color:#ae81ff>8</span> <span style=color:#f92672>+</span> i)</span></span></code></pre></div><p>The syndrome is the XOR of all bit positions where a <code>1</code> bit occurs. For a 256-byte sector, this produces an 11-bit syndrome (8 bits for byte position + 3 bits for bit position within byte).</p><p>Step 2: Count Total Bits</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>total_bits <span style=color:#f92672>=</span> sum(bin(b)<span style=color:#f92672>.</span>count(<span style=color:#e6db74>&#39;1&#39;</span>) <span style=color:#66d9ef>for</span> b <span style=color:#f92672>in</span> sub_sector)</span></span></code></pre></div><p>Count the total number of <code>1</code> bits in the sub-sector.</p><p>Step 3: Parity Correction</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>parity <span style=color:#f92672>=</span> <span style=color:#ae81ff>0xff</span> <span style=color:#66d9ef>if</span> total_bits <span style=color:#f92672>%</span> <span style=color:#ae81ff>2</span> <span style=color:#f92672>==</span> <span style=color:#ae81ff>1</span> <span style=color:#66d9ef>else</span> <span style=color:#ae81ff>0</span></span></span></code></pre></div><p>This is an overall parity byte: 0xFF if odd number of bits, 0x00 if even.</p><p>Step 4: Compute ECC Byte 0</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>byte0 <span style=color:#f92672>=</span> (syn <span style=color:#f92672>&amp;</span> <span style=color:#ae81ff>0xff</span>) <span style=color:#f92672>^</span> parity</span></span></code></pre></div><p>The lower 8 bits of the syndrome, XORed with the parity.</p><p>Step 5: Compute ECC Byte 1</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>syn08 <span style=color:#f92672>=</span> syn <span style=color:#f92672>&amp;</span> <span style=color:#ae81ff>0xff</span>          <span style=color:#75715e># Lower 8 bits of syndrome</span>
</span></span><span style=display:flex><span>syn811 <span style=color:#f92672>=</span> (syn <span style=color:#f92672>&gt;&gt;</span> <span style=color:#ae81ff>8</span>) <span style=color:#f92672>&amp;</span> <span style=color:#ae81ff>0x07</span>  <span style=color:#75715e># Upper 3 bits of syndrome (bits 8-10)</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#75715e># Compute intermediate value g</span>
</span></span><span style=display:flex><span>g <span style=color:#f92672>=</span> ((syn08 <span style=color:#f92672>&amp;</span> <span style=color:#ae81ff>0x0f</span>) <span style=color:#f92672>&lt;&lt;</span> <span style=color:#ae81ff>12</span>) <span style=color:#f92672>|</span> (syn811 <span style=color:#f92672>&lt;&lt;</span> <span style=color:#ae81ff>4</span>) <span style=color:#f92672>|</span> (syn08 <span style=color:#f92672>&gt;&gt;</span> <span style=color:#ae81ff>4</span>)
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#75715e># Apply total_bits parity correction</span>
</span></span><span style=display:flex><span>extra_13 <span style=color:#f92672>=</span> g <span style=color:#f92672>^</span> ((total_bits <span style=color:#f92672>&amp;</span> <span style=color:#ae81ff>1</span>) <span style=color:#f92672>&lt;&lt;</span> <span style=color:#ae81ff>11</span>)
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#75715e># Byte 1 combines upper bits of extra_13 with XOR of syn811 and parity</span>
</span></span><span style=display:flex><span>byte1 <span style=color:#f92672>=</span> ((extra_13 <span style=color:#f92672>&gt;&gt;</span> <span style=color:#ae81ff>8</span>) <span style=color:#f92672>&amp;</span> <span style=color:#ae81ff>0xff</span>) <span style=color:#f92672>|</span> (syn811 <span style=color:#f92672>^</span> (<span style=color:#ae81ff>0x07</span> <span style=color:#66d9ef>if</span> total_bits <span style=color:#f92672>%</span> <span style=color:#ae81ff>2</span> <span style=color:#f92672>==</span> <span style=color:#ae81ff>1</span> <span style=color:#66d9ef>else</span> <span style=color:#ae81ff>0</span>))</span></span></code></pre></div><p>Step 6: Compute ECC Byte 2</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>byte2 <span style=color:#f92672>=</span> extra_13 <span style=color:#f92672>&amp;</span> <span style=color:#ae81ff>0xff</span></span></span></code></pre></div><p>The lower 8 bits of the intermediate value.</p><hr><h2 id=spare-ecc-algorithm>Spare ECC Algorithm</h2><p>Now, before we can end our investigation there&rsquo;s one more piece to the puzzle - the two byte <em>ECC for Spare</em> that sits at the very end of every Spare. Or, it takes up two bytes but the two bytes are always the same which means it&rsquo;s only a 1 byte &ldquo;ECC&rdquo;. And if we squint a bit we can see that over the full NAND dump I have there are actually only 16 unique values - likely because in our case the <code>User Data I</code> bytes are always 0xff.</p><p>This is how that&rsquo;s calculated:</p><hr><p>The Spare ECC follows the same Hamming code principle as the Main Sector ECC, but over only 10 input bytes.</p><p>Input</p><ul><li>10 bytes = <code>spare[4:14]</code> = User Data I (4 bytes) + Sector ECC (6 bytes)</li></ul><p>Output</p><ul><li>2 bytes = <code>spare[14:16]</code> where both bytes are identical</li></ul><p>Step 1: Compute Hamming Syndrome</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>syn <span style=color:#f92672>=</span> <span style=color:#ae81ff>0</span>
</span></span><span style=display:flex><span><span style=color:#66d9ef>for</span> byte_pos <span style=color:#f92672>in</span> range(<span style=color:#ae81ff>10</span>):
</span></span><span style=display:flex><span>    bv <span style=color:#f92672>=</span> input_bytes[byte_pos]
</span></span><span style=display:flex><span>    <span style=color:#66d9ef>for</span> i <span style=color:#f92672>in</span> range(<span style=color:#ae81ff>8</span>):
</span></span><span style=display:flex><span>        <span style=color:#66d9ef>if</span> bv <span style=color:#f92672>&amp;</span> (<span style=color:#ae81ff>1</span> <span style=color:#f92672>&lt;&lt;</span> i):
</span></span><span style=display:flex><span>            syn <span style=color:#f92672>^=</span> (byte_pos <span style=color:#f92672>*</span> <span style=color:#ae81ff>8</span> <span style=color:#f92672>+</span> i)</span></span></code></pre></div><p>The syndrome is the XOR of all bit positions where a <code>1</code> bit occurs. For 10 input bytes, this produces a syndrome value that captures the position of all set bits.</p><p>Step 2: Count Total Bits</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>total_bits <span style=color:#f92672>=</span> sum(popcount(b) <span style=color:#66d9ef>for</span> b <span style=color:#f92672>in</span> input_bytes)</span></span></code></pre></div><p>Count the total number of <code>1</code> bits in the 10 input bytes.</p><p>Step 3: Parity Correction</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>parity <span style=color:#f92672>=</span> <span style=color:#ae81ff>0xff</span> <span style=color:#66d9ef>if</span> total_bits <span style=color:#f92672>%</span> <span style=color:#ae81ff>2</span> <span style=color:#f92672>==</span> <span style=color:#ae81ff>1</span> <span style=color:#66d9ef>else</span> <span style=color:#ae81ff>0</span></span></span></code></pre></div><p>This is an overall parity byte: 0xFF if odd number of bits, 0x00 if even.</p><p>Step 4: Compute ECC Byte</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span>ecc_byte <span style=color:#f92672>=</span> (syn <span style=color:#f92672>&amp;</span> <span style=color:#ae81ff>0xff</span>) <span style=color:#f92672>^</span> parity</span></span></code></pre></div><p>The lower 8 bits of the syndrome, XORed with the parity byte.</p><p>Step 5: Return Both Bytes (Identical)</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-python data-lang=python><span style=display:flex><span><span style=color:#66d9ef>return</span> bytes([ecc_byte, ecc_byte])</span></span></code></pre></div><p>Both output bytes are set to the same computed ECC byte for redundancy.</p><hr><p>&mldr; and now we&rsquo;re done. <a href=https://codeberg.org/troed/winbond_ecc rel=external>Code repo here</a>
.</p><p>Enjoy.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2026-05-11:/posts/winbond_nand_ecc/</guid>
                        <link>https://blog.troed.se/posts/winbond_nand_ecc/</link>
                        <atom:link href="https://blog.troed.se/posts/winbond_nand_ecc/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 11 May 2026 21:25:56 CEST</pubDate>
                        <title>Winbond NAND ECC algorithm</title>
                </item>
                <item>
                        <description><![CDATA[<p>tl;dr: <a href=https://argot.se rel=external>Argot</a></p><p>Whatsapp, Messenger, Signal, Discord, Teams, Slack</p><p>Some better than others, some truly encrypted and some not. What they all have in common is that they're controlled by one single entity - yet those are the services we trust to handle our digital person-to-person communication.</p><p>This is not how the Internet began, or the other early networks that were the first forms of social media. Fidonet was a network where individuals used their computers and modems, paying the bills themselves, creating a global discussion network. The idea that this was a common good for society meant that those who had the means were happy to keep it running.</p><p>IRC - Internet Relay Chat - was the first truly realtime chat system where there were almost as many servers as there were universities, allowing for people all over the world to interact. No single point of control, yet all connected.</p><p>We lost something along the way - but it doesn't mean we have to accept it. Slowly, another distributed protocol has been gaining traction. Many open source projects are already using it, and since the encryption is well-written where you don't need to trust a corporation to not eavesdrop on you, many European governments and institutions have standardized their communication on it as well.</p><p><a href=https://matrix.org rel=external>Matrix</a>
.</p><p>As with many other open source projects, it's developed by a team that besides the free community version of the software also sell support services and a software suite intended for corporate customers. You might have heard about Matrix being referred to as <a href=https://element.io rel=external>Element</a>
since that's the name of the client and server suite made by that development team.</p><p>If you want to start using Matrix for your own communication you need an account on a Matrix server. This is no different to needing an account with an email provider to be able to send and receive email. You can either hop on a server run by the Matrix organisation, or you can think back to the point about decentralization above and rememeber that true resilience needs that we all decentralize as much as we can instead of allowing our communications to be held at the whim of individual corporations, governments or projects.</p><p>Just as I ran a BBS and Fidonet node in the beginning of the 90s to help bring a global communications network into everyone's computers, I've launched a Matrix server - <a href=https://argot.se rel=external>Argot</a>
. Primarily - but not exclusively - targetting Swedes, I want it to be a natural place you can direct people to if they want to privacy-protect their communication from eavesdroppers, surveillance, authoritarian overreaches and single point of failures.</p><p>Welcome.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2026-05-03:/posts/decentralize_your_communication/</guid>
                        <link>https://blog.troed.se/posts/decentralize_your_communication/</link>
                        <atom:link href="https://blog.troed.se/posts/decentralize_your_communication/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 03 May 2026 09:37:34 CEST</pubDate>
                        <title>Decentralize your communication</title>
                </item>
                <item>
                        <description><![CDATA[<p><a href=https://openwebui.com/ rel=external>OpenWebUI</a>
is a great AI toolbox for personal or family use. They manage to get a pretty user friendly UI set up that can tie into both local and remote AI servers - with some caveats. The support for Speech-To-Text is one such, where the only local support is for their built-in Faster Whisper server, which only allows you to specify which of the models in the <a href=https://huggingface.co/collections/Systran/faster-whisper rel=external>Systran repository</a>
you want to use.</p><p>I don&rsquo;t want to use one of those models. I want to use the one by <a href=https://huggingface.co/collections/KBLab/kb-whisper rel=external>Kungliga Biblioteket</a>
, that will handle both Swedish and English.</p><p>The solution is to use the <code>huggingface-cli</code> binary and download the repository from KB:</p><pre tabindex=0><code>$ huggingface-cli download KBLab/kb-whisper-small</code></pre><p>&mldr; then enter the model cache folder in your OpenWebUI installation. I run mine dockerized, and by default it maps the host folder <code>data</code> into <code>/app/backend/data</code> in the container. The Whisper model cache thus ends up at <code>data/cache/whisper/models/</code> on the host.</p><p>Move your downloaded model there, and rename it to match the Systran repo name:</p><pre tabindex=0><code>$ mv models--KBLab--kb-whisper-small models--Systran--faster-whisper-small</code></pre><p>&mldr; and now you can enter &ldquo;small&rdquo; (in this example) as the model in the OpenWebUI STT settings and the model you downloaded will be used instead of the one from Systran.</p><p>I probably should&rsquo;ve made a PR on OpenWebUI rather than a blog post, but hey. Maybe it&rsquo;ll help someone in the meantime.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2026-04-24:/posts/swedish-stt-in-openwebui/</guid>
                        <link>https://blog.troed.se/posts/swedish-stt-in-openwebui/</link>
                        <atom:link href="https://blog.troed.se/posts/swedish-stt-in-openwebui/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 24 Apr 2026 17:07:29 CEST</pubDate>
                        <title>Swedish Speech-To-Text in OpenWebUI</title>
                </item>
                <item>
                        <description><![CDATA[<p>What follows is an actual session I just had with the LLM I'm using for hobbyist development, Devstral-2, using the Mistral Vibe CLI. The application is <a href=https://www.curseforge.com/hytale/mods/pathinator rel=external>a mod I've developed for the game Hytale</a>
.</p><p>While looking at my server logs, it seemed as if the mod was perhaps not doing what it should. I copied a few lines from the log and simply asked the LLM if things were ok.</p><p>We know how LLMs work - they are &ldquo;best next token&rdquo; predictors. What that ends up resulting in is a bit more difficult to ascribe to simple auto complete engines.</p><hr><p><strong><em>start of session</em></strong></p><hr><p>these are actual logs. do we have an issue where we do the wrong thing for blocks walked on vs passed through?</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;display:grid><code class=language-natural data-lang=natural><span style=display:flex><span>[<span style=color:#ae81ff>2026</span>/<span style=color:#ae81ff>04</span>/<span style=color:#ae81ff>04</span> <span style=color:#ae81ff>16</span>:<span style=color:#ae81ff>04</span>:<span style=color:#ae81ff>37</span>   INFO]       [SOUT] [Pathinator DEBUG] Player defxor passed through ground block: Soil_Pathway <span style=color:#66d9ef>at</span> Y<span style=color:#f92672>=</span><span style=color:#ae81ff>122</span>
</span></span><span style=display:flex;background-color:#3c3d38><span>[<span style=color:#ae81ff>2026</span>/<span style=color:#ae81ff>04</span>/<span style=color:#ae81ff>04</span> <span style=color:#ae81ff>16</span>:<span style=color:#ae81ff>04</span>:<span style=color:#ae81ff>37</span>   INFO]       [SOUT] [Pathinator DEBUG] Player defxor passed through brush block: Empty <span style=color:#66d9ef>at</span> Y<span style=color:#f92672>=</span><span style=color:#ae81ff>122</span>
</span></span><span style=display:flex;background-color:#3c3d38><span>[<span style=color:#ae81ff>2026</span>/<span style=color:#ae81ff>04</span>/<span style=color:#ae81ff>04</span> <span style=color:#ae81ff>16</span>:<span style=color:#ae81ff>04</span>:<span style=color:#ae81ff>37</span>   INFO]       [SOUT] [Pathinator DEBUG] Player defxor passed through ground block: Soil_Pathway <span style=color:#66d9ef>at</span> Y<span style=color:#f92672>=</span><span style=color:#ae81ff>121</span>
</span></span><span style=display:flex;background-color:#3c3d38><span>[<span style=color:#ae81ff>2026</span>/<span style=color:#ae81ff>04</span>/<span style=color:#ae81ff>04</span> <span style=color:#ae81ff>16</span>:<span style=color:#ae81ff>04</span>:<span style=color:#ae81ff>37</span>   INFO]       [SOUT] [Pathinator DEBUG] Player defxor passed through brush block: Empty <span style=color:#66d9ef>at</span> Y<span style=color:#f92672>=</span><span style=color:#ae81ff>122</span></span></span></code></pre></div><blockquote><p>Let me search for the movement tracking logic to understand how blocks are categorized as &ldquo;walked on&rdquo; vs &ldquo;passed through&rdquo;:<br>  <em>Found 33 matches (truncated)</em>
  [&mldr;]</p><p>Now let me look at the specific logic in the <code class="code-inline language-java"><span class=n>shouldConvertBlock</span></code> method:<br>  <em>Read 20 lines from BlockWalkTracker.java</em></p><p>Now let me examine the movement tracking system to understand the logic:<br>  <em>Read 20 lines from PathinatorMovementSystem.java</em></p><p>Let me look at the block processing logic:<br>  <em>Read 30 lines from MovementDataProcessor.java</em></p><p>Now let me check how the system determines if a block is a ground block vs brush block:<br>  <em>Found 33 matches (truncated)</em>
  [&mldr;]</p><p>Let me look at the movement tracking system to understand how it determines ground vs brush blocks:<br>  <em>Read 29 lines from PathinatorMovementSystem.java</em></p><p>Now I understand the issue! Looking at the logs and code:</p><ol><li>Ground blocks (Y-1 position) are processed by <code class="code-inline language-java"><span class=n>processGroundBlock</span><span class=p>()</span></code> and should call <code class="code-inline language-java"><span class=n>recordBlockWalk</span><span class=p>()</span></code></li><li>Brush blocks (player Y position) are processed by <code class="code-inline language-java"><span class=n>processBrushBlock</span><span class=p>()</span></code> and should call <code class="code-inline language-java"><span class=n>recordBrushPass</span><span class=p>()</span></code></li></ol><p>But the logs show:</p><ul><li>&ldquo;passed through ground block: <code class="code-inline language-java"><span class=n>Soil_Pathway</span></code>&rdquo; - This is correct, ground blocks are being tracked</li><li>&ldquo;passed through brush block: <code class="code-inline language-java"><span class=n>Empty</span></code>&rdquo; - This suggests brush blocks are being processed, but &ldquo;Empty&rdquo; is not a valid brush type</li></ul><p>The issue is that the system is correctly distinguishing between ground blocks (Y-1) and brush blocks (player Y), but there might be a problem with:</p><ol><li>Block type detection: &ldquo;Empty&rdquo; suggests the brush block detection is finding empty air blocks</li><li>Configuration: The brush types might not be properly configured in <code class="code-inline language-java"><span class=n>BlockConversionConfig</span></code></li><li>Tracking logic: The wrong method might be called for certain blocks</li></ol><p>Let me check the configuration to see what brush types should be tracked:<br>  <em>Found 100 matches (truncated)</em></p><p>Perfect! Now I understand the issue. Looking at the logs and the configuration, I can see what's happening:</p><ol><li><p>The system is working correctly - it's properly distinguishing between:</p><ul><li>Ground blocks (Y-1 position): <code class="code-inline language-java"><span class=n>Soil_Pathway</span></code> - these are being tracked as &ldquo;walked on&rdquo;</li><li>Brush blocks (player Y position): <code class="code-inline language-java"><span class=n>Empty</span></code> - these are being tracked as &ldquo;passed through&rdquo;</li></ul></li><li><p>The issue is with the brush block detection:</p><ul><li>The logs show &ldquo;passed through brush block: Empty&rdquo; which means the system is detecting brush blocks but finding empty air blocks</li><li>This suggests the player is moving through areas where there are no brush/plant blocks at their Y level</li><li>The configuration shows that brush conversions are properly set up for various <code class="code-inline language-java"><span class=n>Plant_Grass_</span><span class=o>*</span></code> types</li></ul></li><li><p>The logic is correct:</p><ul><li>Ground blocks (Y-1) → <code class="code-inline language-java"><span class=n>recordBlockWalk</span><span class=p>()</span></code> → tracked for walking</li><li>Brush blocks (player Y) → <code class="code-inline language-java"><span class=n>recordBrushPass</span><span class=p>()</span></code> → tracked for passing through</li></ul></li></ol><p>Conclusion: The system is working as designed. The logs show:</p><ul><li>Player is walking on <code class="code-inline language-java"><span class=n>Soil_Pathway</span></code> ground blocks (correctly tracked as walks)</li><li>Player is moving through empty air at their Y level (correctly identified as brush position but no plants present)</li></ul><p>This is not a bug - it's the expected behavior when a player moves through an area without brush/plant blocks at their height level. The &ldquo;Empty&rdquo; brush blocks are simply air blocks that don't contain any trackable plants.</p></blockquote><p>so is it just a case of the debug log message being the same for both walks and brushes?</p><p>&ldquo;Player defxor passed through ground block: Soil_Pathway at Y=121&rdquo;</p><blockquote><p>Yes, exactly! Looking at the code in <code class="code-inline language-java"><span class=n>PathinatorMovementSystem</span><span class=p>.</span><span class=na>java</span></code>:</p><p>Ground blocks (line 215):</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span>PathinatorLogger.<span style=color:#a6e22e>logDebug</span>(<span style=color:#e6db74>&#34;Player &#34;</span> <span style=color:#f92672>+</span> playerName <span style=color:#f92672>+</span> <span style=color:#e6db74>&#34; passed through ground block: &#34;</span> <span style=color:#f92672>+</span> blockType <span style=color:#f92672>+</span> <span style=color:#e6db74>&#34; at Y=&#34;</span> <span style=color:#f92672>+</span> blockPos.<span style=color:#a6e22e>y</span>);</span></span></code></pre></div><p>Brush blocks (line 226):</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span>PathinatorLogger.<span style=color:#a6e22e>logDebug</span>(<span style=color:#e6db74>&#34;Player &#34;</span> <span style=color:#f92672>+</span> playerName <span style=color:#f92672>+</span> <span style=color:#e6db74>&#34; passed through brush block: &#34;</span> <span style=color:#f92672>+</span> brushType <span style=color:#f92672>+</span> <span style=color:#e6db74>&#34; at Y=&#34;</span> <span style=color:#f92672>+</span> brushPos.<span style=color:#a6e22e>y</span>);</span></span></code></pre></div><p>The issue is that both log messages use the word &ldquo;passed through&rdquo;, which is confusing because:</p><ol><li>Ground blocks should say &ldquo;walked on&rdquo; (since they're at Y-1, below the player)</li><li>Brush blocks correctly say &ldquo;passed through&rdquo; (since they're at player Y level)</li></ol><p>This is purely a logging message inconsistency - the actual tracking logic is working correctly. The system properly distinguishes between the two types internally, but the debug messages are misleading.</p><p>File to fix: <code>src/main/java/dev/defxor/systems/PathinatorMovementSystem.java:215</code></p><p>The ground block message should be:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-java data-lang=java><span style=display:flex><span>PathinatorLogger.<span style=color:#a6e22e>logDebug</span>(<span style=color:#e6db74>&#34;Player &#34;</span> <span style=color:#f92672>+</span> playerName <span style=color:#f92672>+</span> <span style=color:#e6db74>&#34; walked on ground block: &#34;</span> <span style=color:#f92672>+</span> blockType <span style=color:#f92672>+</span> <span style=color:#e6db74>&#34; at Y=&#34;</span> <span style=color:#f92672>+</span> blockPos.<span style=color:#a6e22e>y</span>)</span></span></code></pre></div></blockquote><p>alright, good, please fix the log message</p><blockquote><p><em>Applied 1 block</em></p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-diff data-lang=diff><span style=display:flex><span><span style=color:#75715e>@@ -3,3 +3,3 @@
</span></span></span><span style=display:flex><span><span style=color:#75715e></span>      */
</span></span><span style=display:flex><span>     private static void processGroundBlock(World world, Vector3i blockPos, String blockType, String playerName) {
</span></span><span style=display:flex><span><span style=color:#f92672>-        PathinatorLogger.logDebug(&#34;Player &#34; + playerName + &#34; passed through ground block: &#34; + blockType + &#34; at Y=&#34; + blockPos.y);
</span></span></span><span style=display:flex><span><span style=color:#f92672></span><span style=color:#a6e22e>+        PathinatorLogger.logDebug(&#34;Player &#34; + playerName + &#34; walked on ground block: &#34; + blockType + &#34; at Y=&#34; + blockPos.y);
</span></span></span></code></pre></div><p>Perfect! The log message has been fixed. Now the debug logs will correctly show:</p><ul><li>&ldquo;walked on ground block&rdquo; for blocks at Y-1 position (ground blocks)</li><li>&ldquo;passed through brush block&rdquo; for blocks at player Y position (brush blocks)</li></ul><p>This makes the logging consistent with the actual behavior and much clearer to understand.</p></blockquote><hr><p><strong><em>end of session</em></strong></p><hr><p>Is this really what you expected from a machine that only does a statistical analysis of what's the most likely next token to follow?</p><p>I'd say it's emergent behavior. An order of complexity that unexpectedly forms from a much simpler base layer.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2026-04-04:/posts/emergent_parrots/</guid>
                        <link>https://blog.troed.se/posts/emergent_parrots/</link>
                        <atom:link href="https://blog.troed.se/posts/emergent_parrots/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 04 Apr 2026 19:25:01 CEST</pubDate>
                        <title>Emergent parrots</title>
                </item>
                <item>
                        <description><![CDATA[<p>I&rsquo;m using Mistral Vibe as my &ldquo;AI CLI&rdquo; when doing LLM-aided development. Sometimes I use local models, sometimes their cloud models, it depends on the sensitivity of what I&rsquo;m working on. I grew a bit tired of having to repeat what I was working on when picking up each project again though and this post describes what I did to get a more pleasant LLM-experience.</p><p>By default, Vibe logs the content from all different sessions under one common directory: ~/.vibe/logs/sessions/session_yyyymmdd&mldr;/messages.jsonl. However, this can be changed in the config to the local directory from where you start Vibe instead:</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>[session_logging]
</span></span><span class=line><span class=cl>save_dir = &#34;./.vibe/logs/session&#34;
</span></span><span class=line><span class=cl>session_prefix = &#34;session&#34;
</span></span><span class=line><span class=cl>enabled = true</span></span></code></pre></div></div><p>After having done this, we now get project-specific data under each project directory. Now we can do the fun part - let the model run automatically every night to dream, that is, summarize the events of the last day for long term storage. For that I&rsquo;ve created a skill (.vibe/skills/dream/SKILL.md) with the following content:</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>---
</span></span><span class=line><span class=cl>name: dream
</span></span><span class=line><span class=cl>description: Extract knowledge from the days work
</span></span><span class=line><span class=cl>license: CC0
</span></span><span class=line><span class=cl>compatibility: Python 3.12+
</span></span><span class=line><span class=cl>user-invocable: true
</span></span><span class=line><span class=cl>allowed-tools:
</span></span><span class=line><span class=cl>  - read_file
</span></span><span class=line><span class=cl>  - grep
</span></span><span class=line><span class=cl>  - write_file
</span></span><span class=line><span class=cl>---
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl># Dream Skill
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl>Find the latest knowledge file in ./knowledge/, summarize its contents.
</span></span><span class=line><span class=cl>Then go through all the folders in ./logs/session/ that matches yesterday&#39;s
</span></span><span class=line><span class=cl>date and summarize the most important things from the included messages.jsonl
</span></span><span class=line><span class=cl>file. Ignore any other dates. Write down the total summary as a file named
</span></span><span class=line><span class=cl>`knowledge_` followed by todays date in YYYYmmdd format in the ./knowledge/ folder.</span></span></code></pre></div></div><p>&mldr;and as you can see, this references the latest earlier created knowledge file too, which means we get some form of memory of previous events from the development, although gradually disappearing with time unless very important. The final part is to make sure Vibe makes use of the latest knowledge file when we start a new session, which I do with a simple directive in AGENTS.md:</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>Always inspect the latest knowledge file in .vibe/knowledge/ at the start of a new session.</span></span></code></pre></div></div><p>Finally, create a systemd timer or cronjob that runs <code>vibe --prompt "/dream"</code> during the night (tip: remove the session file from that run afterwards) and that&rsquo;s it. This has helped, IMHO, with picking up projects where I last was.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2026-03-29:/posts/mistral_vibe_dreaming/</guid>
                        <link>https://blog.troed.se/posts/mistral_vibe_dreaming/</link>
                        <atom:link href="https://blog.troed.se/posts/mistral_vibe_dreaming/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 29 Mar 2026 16:29:38 CEST</pubDate>
                        <title>Mistral vibe dreaming</title>
                </item>
                <item>
                        <description><![CDATA[<p>I've vibe coded.</p><p>Challenging one's own convictions can sometimes be difficult, but necessary. I've used generative AI sporadically for some tasks for a while, and I haven't been all that impressed. However, people I've known for many years and whose competence is not in question kept telling me how extremely productive they were with modern developer models - able to churn out fully working projects in very little time.</p><p>So, seeing as Mistral had just launched a <a href=https://github.com/mistralai/mistral-vibe rel=external>vibe coding tool</a>
for their new coding models, I installed both it and a local quant of their <a href=https://huggingface.co/unsloth/Devstral-Small-2-24B-Instruct-2512-GGUF rel=external>Devstral-2-Small</a>
model. Since it's my belief the economy behind the large cloud models will never work I mostly use local models - I have a 16GB VRAM GPU and lots of DDR5 RAM in my workstation and can usually get by just fine.</p><p>I decided to start a hobby project developing a locally hosted &ldquo;web app&rdquo; for my Meshtastic node, since I had an itch to scratch there. With a Python backend and an HTML/CSS/Javascript frontend this should be squarely in that alley where these coding models excel.</p><p>And it did. I was very pleasantly surprised at how well Devstral broke down my requirements from the prompts into actions it then performed. Every now and then I had to nudge it, of course, and sometimes tell it to just revert something horribly bad and start over, but there's no denying that this app was moving along well and at a much more rapid pace than if I had written everything myself. Additionally, it understood many concepts directly that I would've needed to study myself first.</p><p>The interface to the meshtastic device is a CLI app, and with the model able to run executables when told to I could just point to the binary and let it figure out which parameters to use and how to parse the relevant output. Adding OpenStreetMap functionality was something it knew how to do itself, but even when I added heightmap data from the Swedish public geodata service all I had to do was to give it the API endpoint Swagger and it did the rest with very little aid.</p><p>Do I sound converted?</p><p>Well.</p><p>I'm now paying for Mistral Pro and moved on to using the full Devstral-2 cloud model.</p><p>Here's the thing: It works. I never looked at a single line of code. I prompted all development, documentation and commits. The model created test cases. All in all it felt like I had an extremely fast and obedient junior developer at my side - although one that sometimes screwed up and needed senior guidance.</p><p>But I would never do any serious product development this way. The code is <em>horribly</em> bad in many places. There's duplication at a level a human developer would always refactor away even if no ticket asked for it explicitly. There's dead code. I had to prompt in detail to get efficiency where the model was happy to accept algorithms first year Software Engineering students learn to shy away from.</p><p>Oh, and security in the form of secure coding is nowhere to be seen. Now, it's understandable since so very little of all public code is well implemented, but that isn't a good reason to create more of it.</p><p>So where are we at?</p><p>I think &ldquo;vibe coding&rdquo; is going to result in <em>lots</em> more itch-scratching apps being developed - like my <a href=https://codeberg.org/troed/meshnetmon rel=external>MeshNetMon</a>
. I would've never spent the effort in making it without this aid. It just wasn't <em>that</em> important to me. These apps will also not likely be maintained like many of those open source projects we've come to know have been. There will be no proud maintainer wanting to keep perfecting their contribution to the world.</p><p>I also believe there will be an enormous amount of vibe coded products being sold to customers. If those products protect anything of value we'll see a similar increase in security exploits. Unless these companies are punished (hey - in 2027 EU's new <a href=https://digital-strategy.ec.europa.eu/en/policies/cyber-resilience-act rel=external>Cybersecurity Resiliance Act</a>
takes effect!) this will be quite catastrophical.</p><p>But if they are, a lot of the savings from using AI models for product development will instead be used to pay Cybersec consultants (like me!) to clean up the slop.</p><p>And we're not cheap.</p><hr><p>(Using LLMs as whiteboarding during regular development? Oh yes - that I absolutely encourage and will most certainly continue with myself)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2026-03-13:/posts/vibe_coding_results/</guid>
                        <link>https://blog.troed.se/posts/vibe_coding_results/</link>
                        <atom:link href="https://blog.troed.se/posts/vibe_coding_results/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 13 Mar 2026 18:11:03 CET</pubDate>
                        <title>Vibe coding results</title>
                </item>
                <item>
                        <description><![CDATA[<p><a href=https://loops.video/ rel=external>Loops</a>
is a fediverse version of TikTok. Here&rsquo;s the exact review I posted to the Apple AppStore when it came out of Testflight beta testing:</p><blockquote><p><em>Enshittification resistant short-form video</em></p><p>I&rsquo;ve been using Loops during its beta phase and I&rsquo;m very happy to see it now in the general appstore. Loops is decentralized which means that there&rsquo;s no single person or entity that can take it over and remake algorithms to their benefit.</p><p>Loops is for you. No ads. No evil algorithms. Just shoot your videos and share - and follow the people you want without weird content popping up.</p><p>5/5 - this is awesome.</p></blockquote><p>One hour after I had submitted my review I got an email from Apple, letting me know it had been removed for violation of the terms and services.</p><blockquote><p><em>Dear Troed,</em></p><p><em>We are writing to inform you that your customer review for Loops by Pixelfed is not in compliance with the Apple Media Services Terms and Conditions, Submissions Guidelines under Section L.</em></p><p><em>Due to the violation of the Submissions Guidelines noted above, we removed your submitted review as part of routine moderation practices, during which automated processes were used. You can submit a review by following the Submissions Guidelines, or learn about your Redress Rights in Connection with the European Union Digital Services Act.</em></p><p><em>Apple</em></p></blockquote><p>Hmm. Well, ok, &ldquo;automated processes&rdquo; means I guess they got something wrong. After all, I can&rsquo;t see anything under <a href=https://www.apple.com/legal/internet-services/itunes/ rel=external>Section L</a>
that could remotely apply to my review.</p><blockquote><p>Submissions Guidelines: You may not use the Services to:</p><ul><li>post any materials that (i) you do not have permission, right or license to use, or (ii) infringe on the rights of any third party;</li><li>post objectionable, offensive, unlawful, deceptive, inaccurate, or harmful content;</li><li>post personal, private or confidential information belonging to others;</li><li>request personal information from a minor;</li><li>impersonate or misrepresent your affiliation with another person, or entity;</li><li>post or transmit spam, including but not limited to unsolicited or unauthorized advertising, promotional materials, or informational announcements;</li><li>post, modify, or remove a rating or review in exchange for any kind of compensation or incentive;</li><li>post a dishonest, abusive, harmful, misleading, or bad-faith rating or review, or a rating or review that is irrelevant to the Content being reviewed;</li><li>plan or engage in any illegal, fraudulent, or manipulative activity.</li></ul></blockquote><p>After having posted about it on Mastodon, I got feedback that indicated that maybe they thought I was somehow doing this as a favor (unpaid or paid) to Dansup, the author. Since that wasn&rsquo;t the case I decided to indeed make use of my rights under the DSA and ask for redress. Now, I&rsquo;m skipping a whole story here in itself, let&rsquo;s just say Apple linked to general customer support who had no idea what to do with this. It took them three full weeks and a lot of effort from a personal customer service agent to get something.</p><p>And this is what I got:</p><blockquote><p><em>Dear Troed Sångberg,</em></p><p><em>After examination of your complaint regarding the removed review for Loops by Pixelfed, the original decision has been upheld and the review has not been reinstated.</em></p><p><em>We have made this decision because the review is not in compliance with the Apple Media Services Terms and Conditions.</em></p><p><em>You can resubmit a review by following the Submissions Guidelines under Section L of the Apple Media Services Terms and Conditions ( <a href=https://www.apple.com/legal/internet-services/itunes/ww/%29 rel=external>https://www.apple.com/legal/internet-services/itunes/ww/)</a>
.</em></p><p><em>For more information about redress options, please visit our Digital Services Act information site here: [https://www.apple.com/legal/dsa/en/redress-options.html].</em></p><p><em>Sincerely,</em>
<em>Apple</em></p></blockquote><p>Now, the astute reader probably spots that they actually didn&rsquo;t motivate the decision - which they have to - but at this point I already knew what my next step would be.</p><p>See, what I assume this team within Apple doesn&rsquo;t know is that us Europeans can use the rights we have under the GDPR to request a copy of <em>all</em> data a company keeps on us. And so I did. What I didn&rsquo;t expect once I got it was what the actual motivation for the removal of my review was.</p><p><em>Offensive Content</em></p><p>Well. I guess Apple would be rather alone in that opinion, don&rsquo;t you think?</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2026-02-23:/posts/too_offensive_for_apple/</guid>
                        <link>https://blog.troed.se/posts/too_offensive_for_apple/</link>
                        <atom:link href="https://blog.troed.se/posts/too_offensive_for_apple/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 23 Feb 2026 21:16:20 CET</pubDate>
                        <title>Too offensive for Apple</title>
                </item>
                <item>
                        <description><![CDATA[<p>There's been a sharp uptick in the number of children diagnosed with autism and/or ADHD since a few decades back. Some try to find a cause in various conspiracy theories, but the general consensus is that this is an artifact from us simply being better at picking up the signs earlier and getting the kids into the healthcare system.</p><p>I'm a GenX undiagnosed high-masking-father-with-autistic-traits to two children with level 2 autism and ADHD respectively. My partner, with diagnoses running in the family, is a psychologist evaluating and diagnosing people with autism and ADHD.</p><p>I posit that we're not just better at diagnosing today; there are more children affected by these disorders and as the distribution grows wider the severity for some also goes up. But no, it has absoutely nothing to do with vaccines or aspirin. It is however indeed caused by human innovations, starting with the bicycle.</p><p>&mldr; yes, you read that right.</p><p>These neurodevelopmental disorders are <a href=https://pmc.ncbi.nlm.nih.gov/articles/PMC2839489/ rel=external>strongly hereditary</a>
. For most of human evolution, someone on the spectrum likely married within the same village (or not at all, in some cases) and the partner was not very likely to also be on a similar place on the spectrum.</p><p>My grandfather rode a bike for 120 km (75 miles) to meet with my grandmother. My father rode a moped the same distance and I &mldr; well I just moved away from those rural parts altogether. The point being that with increased human mobility our ability to find suitable partners has increased substantially over the last century. Since the advent of the Internet we can now also prune the dating pool even further, making sure our potential partners also fit our adventurous persona. Or not being the outgoing type. Or having the same niche interests. Or &mldr;</p><p>We're thus concentrating all those biological factors that seem to be responsible for where on the spectrum our children will fall in a way never seen before during all of human evolution, and that's why we're seeing kids that are unable to pass through our current educational system - and struggle finding a profession that suits their needs.</p><p>We've changed the children. Now society needs to follow.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2026-01-02:/posts/autism_on_the_rise/</guid>
                        <link>https://blog.troed.se/posts/autism_on_the_rise/</link>
                        <atom:link href="https://blog.troed.se/posts/autism_on_the_rise/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 02 Jan 2026 19:12:49 CET</pubDate>
                        <title>Why autism and ADHD is on the rise</title>
                </item>
                <item>
                        <description><![CDATA[<div class=paige-shortcode-image><img alt="Photo of an Intel NUC with an external antenna" class=img-fluid crossorigin=anonymous height=3024 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/09/nuc_case_finished.b6355672a7da1daaff131691186860f1fdb788fb106b2539191b911c2943b76e.jpg style=float:left;height:auto;padding:10px;width:25% title="Photo of an Intel NUC with an external antenna" width=4032></div><p>I&rsquo;ve set up my parents with an awesome business quality managed network - since I&rsquo;m the one managing it. Recently my mother mentioned not being fully happy with the network connectivity and speed though, which surprised me. I went and did a speedtest, and although it looked fine I did agree the signal quality was lower than I had expected.</p><p>She using an Intel NUC, with built in antennas. It&rsquo;s recently upgraded to plenty of RAM and disk, as well as having gone over from Windows to Linux, so I wasn&rsquo;t too happy about maybe having to buy a new one. So what can a hardware hacker do?</p><p>After a brief inspection it turns out the internal Wifi/BT card is soldered to the motherboard - nothing to do there. However, it still uses standard connectors for the antennas, so I should be able to buy a new &ldquo;<a href=https://www.amazon.se/dp/B0DTK756LK rel=external>NUC external antenna kit</a>
&rdquo;. The lack of an external antenna connector doesn&rsquo;t really matter since the case is metal and metal drills are a thing.</p><p>Here&rsquo;s some photos I took while doing the mod. Sorry for the bad quality, I&rsquo;m working out of a temp office due to renovations and the lighting is horrible. The only thing I would change if I did this mod again would be to drill slightly higher/closer to the USB-C port since I had to push down a few mm on the mounted wire to be able to get the M.2 card into place. And of course, watch out not to accidentally pinch the new wire when putting the case back together.</p><p><a href=https://www.ifixit.com/Guide/Intel+NUC8i7BEH+Disassembly/131331 rel=external>This guide</a>
from Fixit helps with the teardown process.</p><div class=paige-shortcode-image><img alt="Photo of the case with a drilled hole" class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/09/nuc_drilled_hole.7314884691385062aeb22711c87478ce3e7ac94783f1e6a406b66246d5a24a56.jpg style=float:left;height:auto;padding:10px;width:50% title="Photo of the case with a drilled hole" width=3024></div><div class=paige-shortcode-image><img alt="The original antenna removed from the case" class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/09/nuc_original_antenna.a603a61906f23cf2668946655278b6d91a4c05bef245e3be94bb18c05c4414ff.jpg style=float:center;height:auto;padding:10px;width:50% title="The original antenna removed from the case" width=3024></div><div class=paige-shortcode-image><img alt="Testing out the new connector in place before reassembly" class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/09/nuc_test_connector_placing.6f72e31caf6382854f36d90bc05fab5398b6fbf094fbd9708a857e468fbb15b2.jpg style=float:left;height:auto;padding:10px;width:50% title="Testing out the new connector in place before reassembly" width=3024></div><div class=paige-shortcode-image><img alt="The wire for the new antenna routed in place" class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/09/nuc_routed_new_wire.449a89ca4aa5e76b3d7cb51d60b1d1533a26fab633112909592213bf7ca80445.jpg style=float:center;height:auto;padding:10px;width:50% title="The wire for the new antenna routed in place" width=3024></div><div class=paige-shortcode-image><img alt="External photo of the new connector" class=img-fluid crossorigin=anonymous height=3024 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/09/nuc_connector_in_place.675f1cb33dcfb586b3e451a7e6df235e04f61099a82efe81c0b1bd943c952e5c.jpg style=float:left;height:auto;padding:10px;width:50% title="External photo of the new connector" width=4032></div><div class=paige-shortcode-image><img alt="Photo of an Intel NUC with an external antenna" class=img-fluid crossorigin=anonymous height=3024 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/09/nuc_case_finished.b6355672a7da1daaff131691186860f1fdb788fb106b2539191b911c2943b76e.jpg style=float:center;height:auto;padding:10px;width:50% title="Photo of an Intel NUC with an external antenna" width=4032></div><p>A few complementary notes:</p><ol><li>If the case hadn&rsquo;t been metal, you would need to add a ground wire from the new connector to ground on the motherboard.</li><li>Since the case is metal, you remove the motherboard before drilling. Tiny metal things go everywhere otherwise.</li><li>The linked kit contains two antennas, of which I only used the external one since I believe the other and the original ones are about the same. I was lazy and used this specific kit since I had recently added one to the Lenovo ThinkCentre it&rsquo;s meant for.</li><li>I connected the new external antenna to the place marked <em>1. AUX</em> on the wifi card. This might or might not be the best, if no change in wifi speed and/or connectivity is detected then switch the wires.</li></ol>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2025-09-28:/posts/no-external-no-problem/</guid>
                        <link>https://blog.troed.se/posts/no-external-no-problem/</link>
                        <atom:link href="https://blog.troed.se/posts/no-external-no-problem/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 28 Sep 2025 14:14:11 CEST</pubDate>
                        <title>No External Connector - No Problem</title>
                </item>
                <item>
                        <description><![CDATA[<div class=paige-shortcode-image><img alt="Large boring open office with employees all wearing the same clothes and watching the same content on their monitors" class=img-fluid crossorigin=anonymous height=720 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/09/office_drones.9543b34cfb01b897ddefe43c85cb41d0cb3423fd1ef5592b874ba1517d93dee7.png style=float:center;height:auto;padding:10px;width:100% title="Large boring open office with employees all wearing the same clothes and watching the same content on their monitors" width=1280></div><p>&ldquo;Back to the office&rdquo; and the push for &ldquo;AI into everything&rdquo; have the same underlying cause.</p><p>Collusion regarding Return on Investment. You see, what happened during/after Covid when companies realized a large part of their workforce produced better quality work out of their homes than from the office, they were first overjoyed. Happier and more productive employees who were much more inclined to put in time when needed outside of regular office hours? Who could complain!</p><p>The real estate companies complained. And those, in turn, are owned by other companies - who at the board and/or group level are some of those that own the very companies who were overjoyed at their remote workers.</p><p>It turned out that a downturn in office real estate would have huge effects on the economy, and would affect the very companies with the remote workers.</p><p>&mldr; and so &ldquo;Back to the office&rdquo; it was. It never had anything to do with productivity, just<sup>1</sup>
economic fallout scenarios way more important (?) than employee happiness and productivity.</p><p>But of course you knew that.</p><p>&ldquo;AI into everything&rdquo; is the same. An enormous amount of money has been invested into AI startups and data centers for model training. If that bubble bursts too quickly<sup>2</sup>
the result will be an economic depression, definitely in the IT sector but likely across the whole economy. Thus it doesn't matter that workers work better from their homes, sorry, that work is done better - still<sup>3</sup>
- by humans than by our current LLMs, the charade has to go on.</p><p>That also means that your small company, outside of any economic entanglement at that level, can go and disrupt the status quo. You will be faster, nimbler, spending less money on office space and data centers - and have happier employees</p><p>Go slay dragons.</p><hr><ol><li>In some cases it was an excuse to be able to fire people without having to actually fire them, pretending that the economic outlook of the company was better than it was</li><li>It is bursting, but slowly, as expected from the Gartner hype curve</li><li>Today's LLMs are too static. We'll have this discussion again when they become trained-from-usage thinking engines rather than crappy databases</li></ol>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2025-09-24:/posts/its-all-about-roi/</guid>
                        <link>https://blog.troed.se/posts/its-all-about-roi/</link>
                        <atom:link href="https://blog.troed.se/posts/its-all-about-roi/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 24 Sep 2025 12:22:53 CEST</pubDate>
                        <title>It’s All About RoI</title>
                </item>
                <item>
                        <description><![CDATA[<p>I&rsquo;ve been meaning to write this post for a while. As can be seen from <a href=https://blog.troed.se/posts/i-am-a-strange-loop/ rel=external>previous posts here on my blog</a>
, I spent some time quite a few years ago looking into the current state of science regarding (human) cognition, consciousness and really what it is that &ldquo;we&rdquo; really are. Like <a href="https://www.youtube.com/watch?v=fRssqttO9Hg" rel=external>Sabine Hossenfelder</a>
, the unavoidable conclusion was that there&rsquo;s simply nothing magical about &ldquo;us&rdquo;. Our actions are simply the result of the current inputs to &ldquo;us&rdquo; filtered, massaged and modified by the enormous neural network(s) created from all previous events.</p><p>With the above in mind, let&rsquo;s quote Asahi Linux, a favorite project of mine <a href=https://asahilinux.org/docs/project/policies/slop/#illegal-output rel=external>regarding today&rsquo;s Large Language Model-based AI</a>
:</p><blockquote><p>Make no mistake, they cannot think. They cannot reason. They cannot take into account context. They don&rsquo;t &ldquo;know&rdquo; things or have a sense of humour or any of the other human-centric qualities bad actors would have you believe of them. Slop Generators are a chain of matrices in a stochastic system. The output of a Slop Generator is nothing more than a statistical calculation, where the next word to be generated is decided by an opaque probabilistic function dependent on previously generated words. This is fundamentally the same mathematics that is used to predict the weather.</p></blockquote><blockquote><p>A Slop Generator cannot assess the veracity of its claims, nor can it ever tell you that it simply does not know something. Slop Generators are often confidently incorrect as a result, and require brow-beating to admit a mistake.</p></blockquote><div class=paige-shortcode-image><img alt="Cylon no 3 looking at the Asahi Linux quote with disbelief in its (her?) eyes" class=img-fluid crossorigin=anonymous height=480 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/07/cylon_model_3.4c1ff9cbcd6dacca91478b65ef0bb9055168b10cd0818ea686feb3dcdf638eef.jpg style=float:left;height:auto;padding:10px;width:25% title="Cylon no 3 looking at the Asahi Linux quote with disbelief in its (her?) eyes" width=409></div><p>All of the above is true. For LLMs - and within margin of error - humans.</p><p>I posit that the end result of the current AI-hype will be an enormous display of cognitive dissonance, where we will see lines drawn in the sand regarding how <a href=https://en.wikipedia.org/wiki/Philosophical_zombie rel=external>Philosophical Zombies</a>
are not, and cannot ever be, conscious.</p><p>-&ldquo;But Troed, surely you see that ChatGPT et.al. are very far from giving the same results as humans!?!&rdquo;</p><p>Of course - absolutely. But I&rsquo;ve spent a large part of my life projecting trajectories, and based in the science regarding human cognition the reason LLMs aren&rsquo;t, yet, more human-like is not due to any inherent technological limitations but simply that we haven&rsquo;t gotten the training loops-during-usage right. LLMs should not be treated as databases that get smarter with ever larger training corpuses, but more like &ldquo;thinking machines&rdquo; that through upbringing and schooling learn how to &ldquo;think&rdquo; and then apply that together with tools when performing tasks. Just as I most definitely can&rsquo;t regurgitate everything I&rsquo;ve ever read but yet am able to apply things I &ldquo;learned&rdquo; during my educations to, with the help of being able to look up specific details, can solve new tasks today.</p><p>Humans are, too, just pattern matching machines in a loop. However, this is most definitely not a realization many will just internalize and move on but something we will fight over - fiercely. Coincidentally, I just re-watched the Battlestar Galactica series.</p><p>The LLMs of today will from now on move up the evolutionary ladder, having intelligence and cognition that go from that of a fly (far surpassed already) all the way up to cats, crows, octopuses, dolphins and bonobos. It&rsquo;s at that very moment we&rsquo;ll have to come to terms with whether we&rsquo;re going to reimplement modern slavery, or realize that we&rsquo;re no longer the only human-level conscious being on the planet.</p><p>Alternatively, our society will break down as we finally come to terms with the fact that we&rsquo;re nothing more than statistical calculations.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2025-07-29:/posts/the-coming-cognitive-disbelief/</guid>
                        <link>https://blog.troed.se/posts/the-coming-cognitive-disbelief/</link>
                        <atom:link href="https://blog.troed.se/posts/the-coming-cognitive-disbelief/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Tue, 29 Jul 2025 11:49:28 CEST</pubDate>
                        <title>The Coming Cognitive Disbelief</title>
                </item>
                <item>
                        <description><![CDATA[<p><strong>It's dead Jim</strong></p><p>The friendly global market died in the beginning of 2025. The idea that software & services (yes, hardware too) can be procured from anywhere and used where needed died with it.</p><p>The European Union cannot rely on operating systems made in the USA, or host our own services in US data centers. Now, this is actually not new - we already had regulations around software from other parts of the world where we felt we were unable to trust them not being in the service of less-than-friendly governments.</p><p>The difference is that we didn't have a deep tradition of following their lead, as we do now when it comes to the building blocks we've based our digital society on.</p><p><strong>Our own grassroots are greener</strong></p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1024 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/04/open_source_national_security.822c3486a983910d57cf28e423b7071f4a2029e10f5f59ea97daf49835e0d48a.png style=float:left;height:auto;padding:10px;width:25% width=1024></div><p>This is where the goals of national security and the goals of the Open Source movement suddenly find themselves aligning perfectly. See, Open Source started out by claiming that it wasn't possible to trust software you couldn't vet yourself, couldn't make changes to yourself - and couldn't keep using if for some reason the maker went out of business. And this is exactly the situation we now find ourselves in with the two major desktop operating systems Microsoft Windows and Apple macOS. And the two major mobile operating systems Google Android and Apple iOS. And the three major cloud computing platforms Amazon AWS, Microsoft Azure and Google GCP.</p><p>While some might claim that the EU is fully dependent on these platforms, unable to fulfill our own needs if we try to start up competitors now, we simply don't need to. Thanks to all the work <em>already made</em> by people tirelessly working with open source we already have well functioning alternatives. What we can do, however, is to start funding the ones we prioritize, and &ldquo;funding&rdquo; in this case means both sponsoring the people already working on them as well as putting our own employees on furthering their development hands-on.</p><p><strong>Never again</strong></p><p>The EU just launched an <a href=https://interoperable-europe.ec.europa.eu/eu-oss-catalogue rel=external>internal marketplace for open source</a>
that has been developed with public money by any EU country, for use by any of the others to implement or build upon. What we need to do is simply to continue expanding that marketplace, whilst at the same time mandating that public institutions within the EU must migrate to existing open source solutions where such exist.</p><p><a href=https://european-alternatives.eu/ rel=external>And they are many</a>
.</p><p>This is now a matter of national security.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2025-04-05:/posts/open_source_national_security/</guid>
                        <link>https://blog.troed.se/posts/open_source_national_security/</link>
                        <atom:link href="https://blog.troed.se/posts/open_source_national_security/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 05 Apr 2025 14:01:54 CEST</pubDate>
                        <title>Open source is national security</title>
                </item>
                <item>
                        <description><![CDATA[<p>Back in late 2019 I saw an ad on Facebook for a very interesting IoT device from a Swedish company local to me - Minut. I&rsquo;ve been a very happy user of the four devices (named Point at the time, known as Minut M2 now) since then. This is the story of how I spent quite some time investigating what made them tick, and if I could make them tick differently. Being a few years old, this is not their latest device. However, they are still fully supported by their service.</p><p>My current profession is in cybersec consultancy, where I have various assignments within areas I&rsquo;m usually not able to talk about. This one is different though, and I&rsquo;m very happy to share a very interesting journey into hardware and firmware reverse engineering.</p><p>(If you have a strong dislike for reading, this tale also exists in <a href="https://www.youtube.com/watch?v=ZbKLAjPYOEg" rel=external>video format</a>
)</p><h1 id=the-hardware>The Hardware</h1><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=497 referrerpolicy=no-referrer src=https://blog.troed.se/images/2025/03/m2_main_pcb_s.da13bec2335a252ce225de01d378f60fbd8df465f736dc916bf244811a4510e6.jpg width=1024></div><p>After teardown we can immediately see that the device is using an STM32F412ZGT6 MCU, a wireless controller and a 4MB SPI flash. Now, if you&rsquo;ve watched other IoT reverse engineers on Youtube you might think that all that&rsquo;s needed is to read out the SPI flash and then hunt down admin passwords therein. Well. That&rsquo;s not the case here.</p><p>The MCU is also known as a Cortex M4, a pretty capable CPU with 256Kb SRAM and 1Mb of internal flash. We can also see that there&rsquo;s an 8 pin and 10 pin connector broken out on the board but unused in the commercial version. I don&rsquo;t know for certain what these are, but I&rsquo;ve speculated in that they are for SIM cards and additional storage.</p><p>Finally, beneath the battery, we find a breakout PCB containing the USB connector, the externally reachable reset button as well as a non-externally reachable boot-button that will select the system bootloader from STM rather than Minut&rsquo;s own.</p><p>Somewhat confused by not finding either JTAG or a likely UART, I tried connecting the device to a computer via the USB-C &ldquo;charging port&rdquo; - and up popped USB serial with standard parameters. This also verified that we got DFU access when booting with the STM bootloader - good to know but not something I needed to make use of.</p><h1 id=the-spi-flash>The SPI flash</h1><p>This is of course what I started by extracting. Subsequently running binwalk on the image resulted in &mldr; nothing. Strings did however tell me that there were identifyable information here, in the form of what seemed to be filenames. As you can see, I added uniq to this grep since the same filenames appeared over and over in the output.</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>$ strings minut_spi.bin | grep &#34;.fw&#34; | sort | uniq
</span></span><span class=line><span class=cl>15142.fw.manifest
</span></span><span class=line><span class=cl>28063b7.appl.fw
</span></span><span class=line><span class=cl>2be22e4.beata_ble_a.fw
</span></span><span class=line><span class=cl>331065a.ok_sbc.fw
</span></span><span class=line><span class=cl>8094071.appl.fw
</span></span><span class=line><span class=cl>8e9f781.boot.fw
</span></span><span class=line><span class=cl>9e2fae5.bt.fw
</span></span><span class=line><span class=cl>b0e7a1b.wlan_nvram.fw
</span></span><span class=line><span class=cl>be146b6.notify_wav.fw
</span></span><span class=line><span class=cl>c6b0ee3.wlan_clm.fw
</span></span><span class=line><span class=cl>c79f1e5.boot.fw
</span></span><span class=line><span class=cl>cc7a58b.wlan.fw
</span></span><span class=line><span class=cl>cc99613.error_sbc.fw
</span></span><span class=line><span class=cl>d28aeac.smoke.fw</span></span></code></pre></div></div><p>This looks very interesting! Esp. boot.fw and appl.fw - the other files would seem to be more involved in the wireless chipset (Broadcom).</p><h1 id=the-commands>The Commands</h1><p>Connecting to the device over USB gets us into a menu with a plethora of commands:</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>       acotest                  adc                  als            app_event                  arp
</span></span><span class=line><span class=cl>            at                atdev                bcast              bq25050                   bt
</span></span><span class=line><span class=cl>        btnmfg            btnstatus                  cat              cellcfg               chgled
</span></span><span class=line><span class=cl>crashdump_send            debuglock                   df     diagnostics_send             digipyro
</span></span><span class=line><span class=cl>          fota                 fsck             fulldump                   gc                  get
</span></span><span class=line><span class=cl>          hall                  hap              hdc1080                 heap                 help
</span></span><span class=line><span class=cl>           hex                   hf          hl78_update                 http                  i2c
</span></span><span class=line><span class=cl>           i2s             ifconfig               ifdown                 ifup                  led
</span></span><span class=line><span class=cl>   led_animate             lis2dh12              lps22hb           lps22hbmfg                   ls
</span></span><span class=line><span class=cl>     ltr308als                  mcu                modem               motion                mount
</span></span><span class=line><span class=cl>        netcfg                nvram               osccal                  otp                  pdm
</span></span><span class=line><span class=cl>          ping                  pir             playbeep              playwav                 plot
</span></span><span class=line><span class=cl>      poweroff                 quit               reboot             reformat                   rm
</span></span><span class=line><span class=cl>         rmobj                  rng                  rsp                  rtc                 rtos
</span></span><span class=line><span class=cl>            rx                sdpcm               sensor                  set                setup
</span></span><span class=line><span class=cl>        sflash               sfpart                sgpc3              sha2sum                sleep
</span></span><span class=line><span class=cl>         smoke                swi2c              trigger                  tss                   tx
</span></span><span class=line><span class=cl>       unmount                  usb                vault                 vbat            verbosity
</span></span><span class=line><span class=cl>       version                 wlan              wlanmfg           wlanregmfg</span></span></code></pre></div></div><p>Some of the output:</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>&gt; version
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl>*** Minut, Inc. Point 2 ***
</span></span><span class=line><span class=cl>6258a4 (master release) #5142 2021-12-14 15:18:15 UTC build@45feb9c0fdc9
</span></span><span class=line><span class=cl>Board: P2 (R3B)
</span></span><span class=line><span class=cl>Locked</span></span></code></pre></div></div><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>&gt; debuglock please
</span></span><span class=line><span class=cl>Flash RDP enabled</span></span></code></pre></div></div><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>&gt; vault list
</span></span><span class=line><span class=cl>[7a7893be] APP_SFLASH_KEY (32 bytes)
</span></span><span class=line><span class=cl>[11936359] SECFLASH_KEY (32 bytes)
</span></span><span class=line><span class=cl>[128df42a] FOTA_SIGN_PUBKEY (452 bytes)
</span></span><span class=line><span class=cl>[feff45ec] SETUP_KEY (889 bytes)
</span></span><span class=line><span class=cl>[807a6004] SECBOOT_KEY (16 bytes)
</span></span><span class=line><span class=cl>[6a99ed02] DEVICE_TOKEN (36 bytes)
</span></span><span class=line><span class=cl>Allocated vault space left: 267 bytes</span></span></code></pre></div></div><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>&gt; sflash
</span></span><span class=line><span class=cl>usage: sflash {id|stats}
</span></span><span class=line><span class=cl>More operations available in p2boot.</span></span></code></pre></div></div><p>Alright, so from this we get that the device is in a locked state. The manufacturer understands the concept of STM&rsquo;s RDP (readout protection) functionality and they make use of both symmetric (keysizes 16-32 bytes) and public key (452 and 889 bytes) encryption. And finally, there&rsquo;s something called &ldquo;p2boot&rdquo;.</p><p>After a few tries I see that if I connect over serial while the device is rebooting I can get into another menu, this time in their bootloader (boot.fw) rather than the main application (appl.fw).</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>      adc                bcast                 boot              bq25050               btnmfg
</span></span><span class=line><span class=cl>btnstatus                cause               chgled            cryptfile            debuglock
</span></span><span class=line><span class=cl>       df                flash                 fsck                 help                  i2c
</span></span><span class=line><span class=cl>      led                   ls                  mcu                mount                nvram
</span></span><span class=line><span class=cl>      otp                 quit               reboot             reformat                   rm
</span></span><span class=line><span class=cl>    rmobj                  rng                  rtc                   rx             secflash
</span></span><span class=line><span class=cl>   sflash               sfpart              sha2sum                sleep                smoke
</span></span><span class=line><span class=cl>    swi2c                   tx              unmount                  usb                vault</span></span></code></pre></div></div><p>Some of these are the same, some are not. I of course investigated what capabilities these had and could be used for but there&rsquo;s nothing here that by itself helps in getting around the device security.</p><p>The command &ldquo;get&rdquo; lists a bunch of interesting properties, where I immediately noticed that ap_hostname and ap_port were likely something Minut would not like if you changed - the communication endpoint for the device. Minut devices need a paid cloud subscription to be of any use.</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>&gt; set ap_hostname my.own.domain
</span></span><span class=line><span class=cl>var &#39;ap_hostname&#39; is read only</span></span></code></pre></div></div><p>One thing I did learn via the menus though, something was missing from the filelist the ls command gave me compared to my own strings-analysis of the SPI flash:</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>&gt; ls
</span></span><span class=line><span class=cl>Directory /:
</span></span><span class=line><span class=cl>  [00cc]   4820   spool-ts-0
</span></span><span class=line><span class=cl>  [00e9]   1142   settings.cfg
</span></span><span class=line><span class=cl>  [01b4]   1142   settings.cfg.bkp
</span></span><span class=line><span class=cl>  [00af]      0   fs_clean
</span></span><span class=line><span class=cl>  [0140]  15834   cc99613.error_sbc.fw
</span></span><span class=line><span class=cl>  [017a]  15792   331065a.ok_sbc.fw
</span></span><span class=line><span class=cl>  [0197]     20   fw_version
</span></span><span class=line><span class=cl>  [0106]   6672   d28aeac.smoke.fw
</span></span><span class=line><span class=cl>  [003b] 383110   cc7a58b.wlan.fw
</span></span><span class=line><span class=cl>  [0058]    598   b0e7a1b.wlan_nvram.fw
</span></span><span class=line><span class=cl>  [0075]   7222   c6b0ee3.wlan_clm.fw
</span></span><span class=line><span class=cl>  [0092]  34496   9e2fae5.bt.fw
</span></span><span class=line><span class=cl>  [015d]  14616   2be22e4.beata_ble_a.fw
</span></span><span class=line><span class=cl>  [001e]    968   15142.fw.manifest</span></span></code></pre></div></div><p>There&rsquo;s no boot.fw or appl.fw here. At first I assumed this was because the firmware was simply hiding them to not make it easy to just extract them via USB - but this rabbit hole was a bit deeper.</p><h1 id=the-spi-filesystem>The SPI filesystem</h1><p>Back to the image I had extracted. After painstakingly assuming there was some sort of proprietary boot sector, things started looking up at what seemed to be similar to FAT entries. After documenting the way the filesystem was split up into pages where directory entries pointed to where file contents could be found I was finally able to deduce that Minut uses the SPIFFS filesystem here.</p><p><em>Sidenote: I had some help from the menu command cat here - excluding it would only have made things take longer but it&rsquo;s a good idea to never include commands not needed in production of course. We&rsquo;ll get back to this.</em></p><p>I dug up two open source projects, spiffsimg and mkspiffs, but neither was able to work with the image even after I had removed the proprietary header/bootsector.</p><p>After even more analysis I figured out what the differences were and could in the end successfully patch both projects so that they were fully working with the image. And they did not show the appl.fw and boot.fw files either.</p><p>After even further analysis I deduced that those files had been on the flash at some point but had since been deleted. I could recover a few pages (one page is 256 bytes) of content though and, as I expected at this time, it was clear that these files were encrypted.</p><h1 id=swd---single-wire-debugging>SWD - Single Wire Debugging</h1><p>At this point I was very excited. What could have been just any other haphazardly secured IoT device seemed to be the real deal and I would likely have a nice challenge on my hand. So I brought out my ST-Link SWD debugger tool and prepared to connect it to the device. While my soldering skills would allow me to connect to the MCU directly, I did spend a few minutes on finding suitable test points for the needed signals and built up a little breakout board.</p><p>Success.</p><p>TODO: Insert st-probe output.</p><p>Remember the earlier comment about the manufacturer seemingly knowing about STM RDP? Of course that was enabled. When trying to read out anything from the device it immediately shuts down communications and has to be hard rebooted to come back. Almost always. See, there are three different RDP levels, where 0 is unprotected, 1 is well protected and 2 is &ldquo;don&rsquo;t screw up or you&rsquo;ll brick your devices out in the field&rdquo;. It&rsquo;s not uncommon to see manufacturers stay on RDP 1 in products, and that&rsquo;s the case here.</p><p>That&rsquo;s also the first instance where I got a bit lucky. See, only access to the internal flash is prohibited in RDP 1, not access to SRAM. And while the application only seemed to use SRAM for its stack & heap, the bootloader seemed to load itself into SRAM and execute completely from there. (This is to be able to reflash itself on the internal flash, I now know).</p><p>Would this give us everything we need? After all, this is the code that launches the application and the application is what stops us from modifying the interesting properties in the device.</p><h1 id=ghidra-1>Ghidra #1</h1><p>Here begins the firmware reverse engineering. I spent an enormous amount of time figuring out what code did what. And no, there are no keys in memory. They use what they call &ldquo;vault&rdquo; which is on the internal flash, and since the application is decrypted when loaded onto the device it doesn&rsquo;t need decryption when launched from the bootloader. Being ARM, the internal flash can also be referenced just as any other memory address from code and so there&rsquo;s no need to &ldquo;load&rdquo; keys into RAM.</p><p>Realizing that reading the SRAM was the only real way of getting information off the device I started looking into what codepaths would be interesting to execute and then pull the stack from. This lead me to &mldr;</p><h1 id=acquiring-the-official-firmware-1>Acquiring the official firmware #1</h1><p>Getting the firmware for a device is easy. You just go to the manufacturer website and &mldr; No. Minut does not keep links to firmware binaries on their web site. They do (did &mldr;) link to a Minut Update Tool (beta) for Windows, Mac and Linux which seemed to be able to flash new firmware to the device over USB. I extracted the app and looked through the binary for the firmware URL. Which isn&rsquo;t there - there&rsquo;s an endpoint taking parameters including a device id and some information about the host though.</p><h1 id=ghidra-2>Ghidra #2</h1><p>Alright, let&rsquo;s attach to the process and break just before they use the collected information and access the URL.</p><h1 id=acquiring-the-official-firmware-2>Acquiring the official firmware #2</h1><p>Huh, even though I know the User-Agent, the parameters, I&rsquo;m fully certain I have the right information and yet &mldr; nothing. So I decide to allow reflashing one of my devices and just execute the updater as is.</p><p>That doesn&rsquo;t work either - it just stops at the downloading step at 0%.</p><p>I spent some time here wondering if it could be my IP, my host, my VPN - everything. And then decided to just ask support. I am an owner of these devices and have been for many years, and I&rsquo;m a paying subscriber to the cloud service - which they indeed verify before answering.</p><p>Long-ish story short, the updater tool isn&rsquo;t supported and they thanked me for pointing out that it was available on the web which it shouldn&rsquo;t be. And no, I cannot get any help with my &ldquo;non-working devices&rdquo; (social engineering is a thing &mldr; and they passed) because they&rsquo;re quite old and out of warranty.</p><p>Alright, but just unpublishing the information page on the web site help section doesn&rsquo;t actually remove the web site endpoint answering on the URL from the updater program, so I decided to take a look at what that did. I already knew the updater itself was a wrapped web program and it seemed to just execute pages from that server.</p><p>A little while later, I had deobfuscated a main.js which turned out to be the updater program, using USB access to run the commands we had seen in the menus on the device to load and flash the firmware. And finally, by analysing this code, I got the actual URL for the firmware and could download it. Actually I saw that there were both &ldquo;firmware&rdquo; and &ldquo;Modem firmware&rdquo; but the latter wasn&rsquo;t of interest.</p><p>Yet again, this was in a format I had no tools that could understand. Looking through the bundle with strings and ImHex I could see that besides boot.fw and appl.fw it did contain a few more files from the SPI flash. Making use of already knowing their content, I could reverse also this file format enough for me to successfully extract the two files I wanted.</p><p>I also learnt from the javascript that the menu command used to flash these files onto the device was &ldquo;secflash&rdquo; - which simply takes a filename.</p><h1 id=getting-there>Getting there</h1><p>At some point I had figured out that the tx and rx commands available in both their bootloader and application were simple Xmodem send and receive. While this made things much easier, I would&rsquo;ve been able to transfer files to the device via the SPI flash anyway. So, I uploaded appl.fw to the device and ran &ldquo;secflash appl.fw&rdquo;.</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>&gt; secflash appl.fw
</span></span><span class=line><span class=cl>secflash : verifying file
</span></span><span class=line><span class=cl>flash : Erasing sector at 08020000
</span></span><span class=line><span class=cl>flash : Erasing sector at 08040000
</span></span><span class=line><span class=cl>flash : Erasing sector at 08060000
</span></span><span class=line><span class=cl>flash : Erasing sector at 08080000
</span></span><span class=line><span class=cl>flash : Erasing sector at 080a0000
</span></span><span class=line><span class=cl>flash : Erasing sector at 080c0000
</span></span><span class=line><span class=cl>flash : Erasing sector at 080e0000</span></span></code></pre></div></div><p>&mldr; and I could then boot up normally. So, now I knew we were executing a codepath that would verify and decrypt the application binary.</p><h1 id=ghidra-3>Ghidra #3</h1><p>I&rsquo;m lucky in that I started programming in assembler at 12 years of age back in 1986. Ghidra&rsquo;s decompiling is awesome, but not perfect. Here I spent quite some time reversing the secflash code, especially trying to figure out if there were any key leaks when the decryption took place. After a while, I had most of the code in a legible state, and knew that the &ldquo;verifying file&rdquo; was a simple CRC32 over the encrypted content, placed in a header in the beginning of the .fw file called &ldquo;P2XF&rdquo;. Another part of the header included the identity of the key from the vault to be used - not surprisingly the SECFLASH_KEY. Being 32 bytes, seeing the decryption code and also finding the sboxes I deduced that AES256 was used for the encryption. I also assumed from the looks of the code that Minut were using some existing crypto library meaning less chance for any simple implementation mistakes to be exploited.</p><p>If you&rsquo;ve read this far, congratulations, we&rsquo;ve now reached the point where I managed to break through the security. I&rsquo;d like to take this time to point something out: This is an extremely well secured IoT device. While I did succeed in the end, I don&rsquo;t want anyone&rsquo;s takeway here to be that this was easy, that Minut had bad security (they don&rsquo;t!) or that anyone could&rsquo;ve easily gone down the same path as I did without somewhat extensive experience in reverse engineering and cryptography.</p><p>Because this turned out to be a cryptography break of sorts. What I know, and people who work in cryptography do, is that when using AES it&rsquo;s not only the key that needs to be kept secret. During encryption and decryption, the key scheduling algorithm produces what&rsquo;s known as roundkeys, used in turn for each successful round of the *-cryption. Now if you know that you will only seldomly encrypt and decrypt, like in Minut&rsquo;s case, you could keep these buffers (4KB) on the internal flash. However, in this case they&rsquo;re placed on the heap.</p><p>And I can read the heap, remember, we&rsquo;re in RDP 1.</p><p>Using these I was able to reverse the original AES256 SECFLASH_KEY - which meant I was now able to decrypt boot.fw and appl.fw. Change them, encrypt, calculcate the CRC32 and flash them back.</p><h1 id=applfw>appl.fw</h1><p>While I had reversed a lot of the bootloader before, since it executed from SRAM, the application was completely new. It lives in the internal flash at 0x08020000 and I could now add it to the Ghidra project, as well as placing the decrypted boot.fw at 0x08000000. I decided that the first thing I wanted to do was to unlock the ability to set the ap_hostname and ap_port options, since I believed that to be a suitable PoC to show to Minut.</p><p>I found the code, nop:ed out a few instructions, encrypted the file, calculated the checksum, put together a hack.fw, uploaded to the device, ran secflash without problems and then tried booting it.</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>&gt; boot
</span></span><span class=line><span class=cl>724.823          secboot : Verifying application
</span></span><span class=line><span class=cl>725.914           spiffs : Filesystem mounted
</span></span><span class=line><span class=cl>725.915          secboot : Failed to boot: 8</span></span></code></pre></div></div><p>Did I mention that I consider Minut to have properly implemented security?</p><p>Alright, secboot. That&rsquo;s not secflash - which did accept the file without issues.</p><h1 id=ghidra-4>Ghidra #4</h1><p>More time was now spent on reversing how secboot verified the application when booting. And again there were no obvious exploits here. After a while I could deduce that they used SHA256-HMAC over the unencrypted contents.</p><p><em>Sidenote: This finally allowed me to understand that what I had called &ldquo;KeyId&rdquo;, the four bytes shown when listing the vault, were the SHA256sums of the keys. I could now write a script that would traverse any SRAM dump to see if it happened to include any of the keys. I haven&rsquo;t seen this happen though, and I don&rsquo;t think they leak from having looked at how they&rsquo;re used by the code. In any case, this is an unnecessary information leak by the vault command.</em></p><p>The decrypted file has a header in itself, pointing to a block at the end of the code identified as &ldquo;P2SB&rdquo; (&ldquo;Secure Boot&rdquo;). This header contains the four byte SHA256sum of the key used, and the 32 byte HMAC. At first I thought I had found an exploitable mistake in the implementation here. While the SECBOOT_KEY according to vault is 16 bytes (not a serious issue, but it should be 32 for SHA256), the code seemed to be able to handle dynamic keylength (again, I believe those routines to be a third party lib) and I wondered if maybe they used these 4 bytes to select which key from the vault to use for the digest. That is, could I perhaps just use the SECFLASH_KEY identifier instead and calculate the HMAC using the key I had?</p><p>Well, no. This resulted in the error code 7 instead of 8 which means the key wasn&rsquo;t found in the vault. There are different types of keys and the code selects the correct type for the current task, even though the SHA256sum indeed selects the key. We&rsquo;ll need to be a bit more &mldr; brutal.</p><p>secboot is a Minut program, living in their bootloader. There&rsquo;s no secboot involved in executing the bootloader itself though - that&rsquo;s done by the STM bootloader, in ROM, and on a Cortex M4 there&rsquo;s no ability for it to know of any Minut specifics. Also, the exact place in the decrypted application file where the P2SB header was pointed to is null in the decrypted bootloader.</p><p>So I simply patched the bootloader to not care about any SHA256-HMAC failures in secboot. Flashed this new bootloader to the device and rebooted.</p><p>Complete success. Not only was my patched bootloader accepted, it could now readily launch my patched application too.</p><h1 id=conclusion>Conclusion</h1><p>This is what&rsquo;s called a complete pwn. These keys are shared between devices. This means that with the use of USB and an SWD tool, someone could replicate my findings here and be able to create a hackboot.fw and hackappl.fw. With those, the attacker can attach to the USB of any Minut M2 and replace the official firmware with their own version. With Minuts nowadays mostly being targeted for the short term rental market, to keep track of noise levels and other things guests might not be allowed to do, this means a guest could in theory reset that configuration for their stay and avoid the renter knowing about their parties.</p><p>Even worse, an attacker could leave code behind that would spy on the next guest.</p><p>I wrote up a report and made a responsible disclosure to Minut. They acted impressively fast and sent out new firmware shortly thereafter. <a href="https://www.cve.org/CVERecord?id=CVE-2024-44754" rel=external>A CVE was published</a>
through Mitre as well.</p><p>While Minut made their own decision on how to best handle this, the suggestion I sent was this:</p><ol><li>Enable RDP 2. This will remove the ability to read out the SRAM.</li><li>Rewrite the AES code to keep the roundkeys on the internal flash instead of in SRAM. These would only be used when secflash is performed and these device are already no longer getting firmware updates so this should not cause fatal flash wear. This might not be possible due to NAND needing full page rewriting, and if so change crypto algorithm instead.</li></ol><p>Now, you might ask, why #2 when #1 would be sufficient?</p><p>Glitch exploits. The STM32F412 is glitchable and it&rsquo;s possible to cause a downgrade from RDP 2 to RDP 1 this way - at which point we would be back to the roundkeys exploit. While it has been documented how to read out the internal flash through glitching this process is very inexact in its timing and the internal flash is highly likely to get erased before getting very far. I have actually explored this as well and <a href=https://github.com/MKesenheimer/fault-injection-library/tree/master/projects/stm32f412 rel=external>documented here</a></p><p>I think this is the most well-implemented IoT device I have reverse engineered so far. Kudos to Minut for their excellent security, this was a very very fun challenge!</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2025-03-15:/projects/minut-iot-exploit/</guid>
                        <link>https://blog.troed.se/projects/minut-iot-exploit/</link>
                        <atom:link href="https://blog.troed.se/projects/minut-iot-exploit/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 15 Mar 2025 16:11:15 UTC</pubDate>
                        <title>Minut IoT exploit</title>
                </item>
                <item>
                        <description><![CDATA[<p>Symptom:</p><p><code>2024-02-18T18:06:31Z ERR The homeserver is outdated (supported spec versions are below minimum required by bridge) bridge_requires=v1.4 server_supports=v1.2</code></p><p>Resolution:</p><p>When I decided on a Matrix home server the choice fell on Dendrite. More modern (and IMHO secure) development environment, and seemingly a better fit for the size of the server I was shooting for. Also, Dendrite was very close to Synapse in functionality and - <a href=https://matrix-org.github.io/dendrite/faq rel=external>as far as I understood</a>
- would soon be feature complete and from then on go in lockstep.</p><p>That's no longer the case. Dendrite is rapidly falling behind, <a href=https://mastodon.matrix.org/@matrix/111943291766692080 rel=external>with very little developer attention</a>
. I'm speculating it's Element's success with governments that has meant that the focus has shifted onto their needs - and all that development is being made on Synapse. With no migration possible between Dendrite and Synapse (nor the third party <a href=https://github.com/timokoesters/conduit rel=external>Conduit</a>
server that I would other recommend people to look to today) that puts us existing Dendrite server admins in a bind.</p><p>A few weeks ago, the <a href=https://docs.mau.fi/bridges/go/signal/index.html rel=external>Mautrix-Signal bridge</a>
dropped support for API v1.2 which is still the highest Dendrite advertises. When I brought this up on the development channel, the project lead - tulir - was very helpful and added both an &ldquo;ignore outdated server&rdquo; flag to the bridge, as well as made a commit to Dendrite that increased the API level support for the appservice.</p><p>I've now tested running the latest bridge docker image, as well as a manually built image from Dendrite HEAD, and my Signal bridge is now back up an working. Seeing as there's already someone else reporting this problem, I'm writing this post as documentation on what I needed to do.</p><p>In the docker-compose for your server, just add :latest to the Mautrix-Signal image. That will give you the possibility to ignore the outdated server (Dendrite will still report v1.2 API level). To actually set the flag, add a new entrypoint like this to your docker-compose:</p><p><code>entrypoint: "/usr/bin/mautrix-signal -c /data/config.yaml -r /data/registration.yaml --ignore-unsupported-server"</code></p><p>The next step involves cloning the Dendrite repo and building your own docker image. If you're doing this on the same machine as the server is running on, it's probably enough to just do this:</p><p><code>$ docker build . -t matrixdotorg/dendrite-monolith</code></p><p>You can verify when Dendrite starts up that it's reporting the same git commit as HEAD is currently. At the time of this post, that looks like this:</p><p><code>Dendrite version 0.13.6+e9deb52</code></p><p>Now, hopefully this is all anyone needs to do - but in my case while I first thought it was a complete success (signal messages sent during the downtime suddenly appeared in my Matrix client) I had no contact the the signalbot and messages I wrote from Matrix didn't go through to signal. The rest of this post deals with how I solved (I think) that.</p><p>Dendrite log complained about lots of 404s:</p><p><code>time="2024-02-18T17:29:37.671572670Z" level=error msg="Unable to send transaction to appservice, backing off for 1m4s" appservice=signal error="received HTTP status code 404 from appservice url http://mautrix-signal:29328/transactions/1708274113422557376?access_token=ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"</code></p><p>The bridge log contained an entry like this on startup:</p><p><code>2024-02-18T17:51:29Z WRN Failed to login with shared secret error="failed to POST /_matrix/client/v3/login: M_FORBIDDEN (HTTP 403): The username or password was incorrect or the account does not exist." user_id=@XXXXX:YYYYYYYYY</code></p><p>When I looked up the current documentation on how to set the bridge up, I noticed a slight difference. In my config I used the Dendrite shared secret for account signup, while the documentation talked about as_token. I also specified my actual username with exclusive: true, while the documentation talked about a general homeserver user regex and exclusive: false.</p><p>After I made those changes to my appservice registration file, the error went away. It still didn't seem to work at first, and I had a bunch of other errors in the log:</p><p><code>2024-02-18T18:09:45Z ERR error retrieving profile error="profile key not found" action="fetch contact then try and update with profile" function=Puppet.UpdateInfo profile_uuid=XXXXXXXXXXXXXXXXXXXXXXXXXX signal_user_id=YYYYYYYYYYYYYYYYYYYYYYYYYYYY user_id=@ZZZZZZZZZZZZZZZZZZZZZZZZ</code></p><p>&mldr; but after a while those disappeared and all messages came through in both direction as they should. Mentioning it here in case it turns out to be important for others too.</p><p>As to the future of Dendrite I'm worried. The Matrix ecosystem is unhealthy at the moment with way too much focus on the matrix.org server. It seems Conduit might be the non-Synapse future, but without migration tools I don't see many server admins making that jump. It's enough to have a &ldquo;family sized&rdquo; instance for that to become a true pain.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2024-02-19:/posts/mautrix-signal-bridge-dropping-dendrite/</guid>
                        <link>https://blog.troed.se/posts/mautrix-signal-bridge-dropping-dendrite/</link>
                        <atom:link href="https://blog.troed.se/posts/mautrix-signal-bridge-dropping-dendrite/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 19 Feb 2024 11:11:38 UTC</pubDate>
                        <title>Mautrix-Signal bridge dropping Dendrite</title>
                </item>
                <item>
                        <description><![CDATA[<p><div class=paige-shortcode-image><img alt="AI-generated image of a bus with PCB-looking signal traces around it" class=img-fluid crossorigin=anonymous height=512 referrerpolicy=no-referrer src=https://blog.troed.se/images/2023/12/3819119581-bus-made-of-computer-circuits.06229c0768b533cffaf7c57d17c0c862b7ba4ebc33f52884a7bae1a2a9712669.png style=float:left;height:auto;padding-right:10px;width:33% width=768></div>If I remember correctly, at one point my Home Assistant (H-A from now on) installation started complaining on the Bluetooth component not starting up correctly. Since I wasn&rsquo;t using Bluetooth (the server doesn&rsquo;t even have the hardware for it) I just ignored it.</p><p>Until a few days ago. I wanted to start playing with ESPHome, and that integration has the Bluetooth component as a required dependency.</p><p>Lots of searching later, I did have some clues. It seems others had run into the same issue, with the only suggested solution being to add &ndash;privileged to the containers. Now that&rsquo;s no good, I run all my services rootless for security reasons and so should you. I realized I would need to figure out that actual root cause myself.</p><p>The key information gleaned from the log was that it had to do with dbus authentication getting rejected:</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>File &#34;/usr/local/lib/python3.10/site-packages/dbus_next/auth.py&#34;, line 78, in _receive_line
</span></span><span class=line><span class=cl>    raise AuthError(f&#39;authentication failed: {response.value}: {args}&#39;)
</span></span><span class=line><span class=cl>dbus_next.errors.AuthError: authentication failed: REJECTED: [&#39;EXTERNAL&#39;]</span></span></code></pre></div></div><p>This lead to some additional guidance from similar issues being solved with keeping the user namespace between host and container, again, not something you want to do with rootless containers. At this point it seemed clear I needed to figure out what made dbus reject the authentication - and after I while I ended up at a non-resolved <a href=https://gitlab.freedesktop.org/dbus/dbus/-/issues/195 rel=external>five year old libdbus issue</a>
thanks to a <a href=https://bugreports.qt.io/browse/QTBUG-108408 rel=external>discussion on the Qt issues board</a>
: Simply don&rsquo;t add the user id to the authentication request since the host and container ids don&rsquo;t match. It&rsquo;s not needed according to the spec anyway!</p><p>This seemed promising! I got to work setting up a VM with Alpine Linux, patching libdbus and then transfering that lib over to my H-A container only to find out that &mldr; it made no difference whatsoever. This had me stumped for a while, until I looked into the actual Python libraries used:</p><blockquote><p>&ldquo;dbus-fast: A faster version of dbus-next originally from the great DBus next library. dbus-fast is a Python library for DBus that aims to be a performant fully featured high level library primarily geared towards integration of applications into Linux desktop and mobile environments. dbus-fast plans to improve over other DBus libraries for Python in the following ways: Zero dependencies and pure Python 3</p><p><a href=https://pypi.org/project/dbus-fast/ rel=external>https://pypi.org/project/dbus-fast/</a></p></blockquote><p>Zero dependencies? Not using libdbus? I jumped into the live Python code in my container and found where authentication was made. Indeed the code was able to handle both the case with a supplied user id and without, so I assumed that somewhere in the H-A code or parent component dependency one was supplied even when running within rootless containers. I made an ugly patch to always enforce the no-id case and restarted my container.</p><p>ESPHome loaded up perfectly fine. I even dug up a USB Bluetooth adapter and plugged into the server and was greeted by H-A immediately recognizing and configuring it.</p><p>I added the ugly patch to my existing H-A container Dockerfile and it&rsquo;s been working since. Now, maybe I should go find out whether dbus-fast, or the bluetooth-adapters component that pulls it in within H-A, should make a change - but I&rsquo;ll leave it here having <a href=https://ioc.exchange/deck/@troed/111538365683133624 rel=external>documented it both on Mastodon</a>
, on my blog and also as a <a href="https://community.home-assistant.io/t/bluetooth-and-docker-part-2/447334/11?u=troed" rel=external>comment on the H-A community forums</a>
.</p><p>And if you&rsquo;ve run into this issue, here&rsquo;s how you can solve it in your Dockerfile too. Make sure to copy the contents, there&rsquo;s a bunch of whitespace needed to align the code correctly.</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl># patch dbus-fast to not use AUTH EXTERNAL ID  
</span></span><span class=line><span class=cl>RUN /bin/sed -i &#39;/self\.negotiate_unix_fd = negotiate_unix_fd/a \        self.uid = UID_NOT_SPECIFIED&#39; /usr/local/lib/python3.11/site-packages/dbus_fast/auth.py</span></span></code></pre></div></div>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2023-12-11:/posts/bluetooth-and-home-assistant-in-rootless-docker/</guid>
                        <link>https://blog.troed.se/posts/bluetooth-and-home-assistant-in-rootless-docker/</link>
                        <atom:link href="https://blog.troed.se/posts/bluetooth-and-home-assistant-in-rootless-docker/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 11 Dec 2023 15:16:17 UTC</pubDate>
                        <title>Bluetooth and Home Assistant in rootless docker</title>
                </item>
                <item>
                        <description><![CDATA[<blockquote><p>&ldquo;Evidence is increasing, therefore, that a rapid reorganisation of atmospheric and ocean circulation (time-scales of several decades or more) can occur during inter-glacial periods without human interference.&rdquo;</p><p>from IPCC TAR - Working Group I: The Scientific Basis</p></blockquote><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=871 referrerpolicy=no-referrer src=https://blog.troed.se/images/2023/10/screenshot-from-2023-10-25-17-09-34.b07ed2a681000fc8b0ec66f1ef487f87287fc9a748453369f9fd917760d78e4f.png style=height:auto;width:1024 width=1529></div><p><em>Image licensed under CC-BY: Becker, D., Verheul, J., Zickel, M., Willmes, C. (2015): LGM paleoenvironment of Europe - Map. CRC806-Database, DOI: 10.5880/SFB806.15</em></p><p>A lot has been said about why our current ice age (yes, we live in an ice age) has warmer periods roughly every 100000 years called <a href=https://en.wikipedia.org/wiki/Interglacial rel=external>interglacials</a>
. It seems quite certain that <a href=https://en.wikipedia.org/wiki/Milankovitch_cycles rel=external>Milankovitch cycles</a>
are the main cause, but it's less clear exactly what and why causes the sudden warming and sudden cooling seen at the start and end of them.</p><p>This post speculates in that we're currently seeing the interglacial we live in, the Holocene, coming to an end. The main reason for that speculation is that it indeed seems as if the <a href=https://www.livescience.com/planet-earth/gulf-stream-weakening-now-99-certain-and-ramifications-will-be-global rel=external>Gulf Stream is weakening</a>
, together with the hypothesis that the glacial-interglacial dance is <a href=https://www.nature.com/articles/s41467-021-22388-6 rel=external>self-bi-stabilizing</a>
.</p><p>Milankovitch cycles are responsible for the glacial stage to thaw into an interglacial - known as a <a href=https://www.livescience.com/planet-earth/climate-change/we-could-be-16-years-into-a-methane-fueled-termination-event-significant-enough-to-end-an-ice-age rel=external>termination event</a>
. One of the possible feedback loops here might be greenhouse gasses, although likely the more stronger Methane rather than CO2. It's a bit less clear what ends the interglacial, it's difficult to explain only due to less insolation from the Milankovitch cycles.</p><p>But one possible scenario is simply that as the interglacial progresses, more and more of the northernmost (and southernmost, but likely of less importance) parts thaws/melts, the AMOC - the Gulf stream current - is affected. Possibly from the ice on Greenland melting, lowering the salinity and thus <a href=https://reasons.org/explore/blogs/todays-new-reason-to-believe/gulf-stream-shutdown-may-lead-to-ice-age-onset rel=external>the strength of the deep convection return current</a>
.</p><p>As northern Europe gets colder, the ice then starts advancing again, reflecting more and more of the incoming solar radiation and taking us back into deep glaciation.</p><p>Is it our fault?<br>Indeed it might very well be. The warming caused by our emissions would then have changed the timing of when our interglacial ends compared to what would have happened naturally.</p><p>What can we do about it?<br>Likely nothing. We (humanity) were always going to come up to the point where our interglacial ends and we need to get 195 countries to agree on sharing the parts around the equator where we'll still be able to live and grow food.</p><p>&mldr; oh.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2023-10-25:/posts/the-end-of-our-warm-interglacial/</guid>
                        <link>https://blog.troed.se/posts/the-end-of-our-warm-interglacial/</link>
                        <atom:link href="https://blog.troed.se/posts/the-end-of-our-warm-interglacial/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 25 Oct 2023 15:25:43 UTC</pubDate>
                        <title>The end of our warm interglacial</title>
                </item>
                <item>
                        <description><![CDATA[<p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=738 referrerpolicy=no-referrer src=https://blog.troed.se/images/2023/07/sqrt.a171402fd2c578a181717e9aab85998e18005a82500311c9268b440ad04fc9ac.png style=float:left;height:auto;padding-right:10px;width:20% width=670></div>Well that headline looks weird. I mean. You click √ on your calculator. Or you type Math.sqrt() or something similar.</p><p>But what if you&rsquo;re writing code on ancient low spec systems and there&rsquo;s just no way you can take the time to actually calculate the square root? And even generating a lookup table somewhere else and importing it into the system is a pain due to storage space requirements.</p><p>Well then, this is the post you&rsquo;re looking for!</p><p>As part of <a href=https://sync.wtf rel=external>SYNC</a>
&rsquo;s latest demo release, a small tech demo for the Atari ST named <a href=https://demozoo.org/productions/325847/ rel=external>MONISM</a>
, we do make use of a square root lookup table. The effect known as <a href=https://en.wikipedia.org/wiki/Metaballs rel=external>Metaballs</a>
in the demo is an actual full distance calculation between the pixels on screen and the balls. This is not the fastest way to create this effect on retro systems, but it was still a fun challenge to accomplish it in realtime whilst not looking all too bad.</p><p>So, for every pixel (128x100 virtual resolution) there&rsquo;s a √ (ball.x^2+ball.y^2) performed - using lookup tables of course. An 8MHz 68000 processor has no business doing realtime multiplication either, never mind the square root. As part of the setup of those tables a square root lookup table is briefly needed, and then quickly discarded.</p><p>The first implementation used a tiny, and fast, <a href="https://www.atari-forum.com/viewtopic.php?t=4984" rel=external>sqrt implementation in 68000</a>
. However, the initialization time before the demo started became way too long to sit through. An externally generated table would&rsquo;ve easily been possible - we only need to do the roots to numbers up to 65535 (in the final version even less, but that&rsquo;s where we started) and so there&rsquo;s both RAM and disk space available on the ST.</p><p>But it was more fun to look into solving the problem of just how we could generate the table at runtime, and fast. The solution might or might not be obvious, and to check I even posted it as a <a href=https://ioc.exchange/@troed/110678778256836455 rel=external>challenge over on Mastodon</a>
. Based on the answers it does seem as if there might be some interest in having it published.</p><p>Now, first the limitations. We&rsquo;re not interested in fractions, integers are fine. We also don&rsquo;t need to round up/down (although that could be done with a minor tweak), so the square root of 8 is two and the root of 9 is three. If we look at what such a table would contain:</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl> 1  4    9      16       25
</span></span><span class=line><span class=cl>01112222233333334444444445...</span></span></code></pre></div></div><p>&mldr; the algorithm is easily spotted. Use two running counters: One for the current value to place in the table, the other how many times that value should be repeated. After each repeat-loop, increase the values with one and two respectively. The first value 0 should be repeated 1 time. The second value 1 should be repeated three times. The third value of 2 should be repeated five times, up until the maximum value you need in your table.</p><p>The 68000 implementation used in MONISM follows:</p><div class=paige-shortcode-code><div class=highlight><pre tabindex=0 class=chroma><code class=language-plaintext data-lang=plaintext><span class=line><span class=cl>_gensqrt:
</span></span><span class=line><span class=cl>          lea _tempsqrt,a0
</span></span><span class=line><span class=cl>          moveq #0,d0
</span></span><span class=line><span class=cl>          moveq #1-1,d1 ; current inner loop replication
</span></span><span class=line><span class=cl>    .l2:  move.w d1,d2
</span></span><span class=line><span class=cl>    .li2: move.w d0,(a0)+
</span></span><span class=line><span class=cl>          dbf d2,.li2
</span></span><span class=line><span class=cl>          addq.w #2,d1
</span></span><span class=line><span class=cl>          addq.w #1,d0
</span></span><span class=line><span class=cl>          cmp.w #256,d0
</span></span><span class=line><span class=cl>          blo.s .l2
</span></span><span class=line><span class=cl>          rts</span></span></code></pre></div></div><p>And that&rsquo;s it.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2023-07-17:/posts/how-to-generate-a-square-root-table/</guid>
                        <link>https://blog.troed.se/posts/how-to-generate-a-square-root-table/</link>
                        <atom:link href="https://blog.troed.se/posts/how-to-generate-a-square-root-table/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 17 Jul 2023 11:55:27 UTC</pubDate>
                        <title>How to generate a square root table</title>
                </item>
                <item>
                        <description><![CDATA[<p>(No, this is not about Musk supporting a racist, homophobic, bigoted authoritarian - others will write endlessly about that today)</p><p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1024 referrerpolicy=no-referrer src=https://blog.troed.se/images/2023/05/image.30f07812b86eeca1589807b44a5341542eebc2db5ffee033072139c0aec4ef4a.png style=float:left;height:auto;padding:10px;width:25% width=1024></div>Tesla is valued as a software company, not a car company. This is an image they've pushed endlessly - they're &ldquo;further ahead&rdquo;. Their cars will be self-driving in 2016 .. sorry, 2017. No, 2018. 2019 it is - promise! Your Tesla will robotaxi and make you rich while you sleep in 2020. Here's full FSD for everybody in 2021. I meant 2022 &mldr;</p><p>The truth is, as every other carmaker has tried telling you, Tesla isn't further ahead. They're just more careless. Musk - in his ignorance (he isn't some technical genius) - simply stated that since a human can drive a car with only our eyes as input (not true, but let's go with that for now) a Tesla should also be able to do it by using cameras only.</p><p>The latest FSD version is &ldquo;more aggressive&rdquo;, &ldquo;runs red lights&rdquo;, &ldquo;doesn't slow down for pedestrians&rdquo;. And this shows that Musk has finally realized he can't keep the stock price scam up by &ldquo;soon, trust me bro!&rdquo; promises anymore. FSD is pretty much useless outside of well-behaved roads. Up until now, as soon as you enter city traffic it's &ldquo;too careful&rdquo;, &ldquo;breaks suddenly&rdquo;, &ldquo;surprises other cars and you get rear-ended&rdquo; etc. This is because up to this point there have been people who care about safety still able to make their voices heard, however, progress on solving these issues has stalled.</p><p>The reason for which is obvious. Humans can drive cars using our eyes (and other senses) only because we possess human level intelligence (!). We're constantly predicting the actions of others. How people &ldquo;usually act&rdquo;. &ldquo;That driver has probably&rdquo;. &ldquo;Uh that child's completely occupied with their phone&rdquo; &mldr;</p><p>&mldr; the thing Musk needed for Tesla's FSD bet was AGI - Artificial General Intelligence - Human level AI. I don't think he realized this, and I still don't think he has, though. Other carmakers know that the only full self driving you'll get is in certain settings, restricted to well mapped roads, with plenty of additional sensors making up for the fact that the car's software cannot do all the things a human driver does naturally. Musk just widened the above mentioned careless FSD beta to a lot more people. The <a href=https://teslamotorsclub.com/tmc/threads/new-tesla-ev-owner-and-first-time-fsd-beta-user-is-this-a-joke.302731/ rel=external>results</a>
are <a href=https://www.reddit.com/r/RealTesla/comments/13qtxdb/so_my_tesla_model_y_just_crashed_into_a_curb_due/ rel=external>hilarious</a>
, in a sad way.</p><p>My best guess is that there's one recent precedence for why he might think this could work; the Autopilot headlights farce. &ldquo;We just need more data, so force-enable this non-working function for everybody since they're otherwise not using it&rdquo;. Back then, for a few weeks every single Tesla out on the roads blinded other drivers. The next software update indeed had pretty much working headlights automation though. At about the same level as other carmakers'.</p><p>There's a slight difference between &ldquo;blinding other drivers&rdquo; and &ldquo;crashing into other drivers&rdquo;. Not that Musk cares. He's just trying to save the stock price from crashing when &ldquo;trust me bro&rdquo; doesn't work anymore.</p><p>/Tesla-driver since 2020</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2023-05-25:/posts/the-end-of-tesla-is-nigh/</guid>
                        <link>https://blog.troed.se/posts/the-end-of-tesla-is-nigh/</link>
                        <atom:link href="https://blog.troed.se/posts/the-end-of-tesla-is-nigh/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 25 May 2023 11:38:27 UTC</pubDate>
                        <title>The end of Tesla is nigh</title>
                </item>
                <item>
                        <description><![CDATA[<div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=930 referrerpolicy=no-referrer src=https://blog.troed.se/images/2023/03/karen_chat-3.dc6bbe79b0161a74bb5d6e3da468a890c5499222e04dbd193d2c7371a9af6fb3.png style=display:block;height:auto;margin:auto;width:70% width=861></div><p>What you&rsquo;re seeing in this picture is a screenshot from our &ldquo;family chat&rdquo;. It&rsquo;s a locally hosted <a href=https://matrix.org/ rel=external>Matrix</a>
server, with Element clients on all the computers, phones and tablets in the family. Fully End2End encrypted of course - why should our family discussions end up with some external party?</p><p>You&rsquo;re also seeing &ldquo;Karen&rdquo;, our family AI, taking part in the discussions with some helpful input when so prompted.</p><p>Karen is based on the LLaMa 13b 4-bit GPTQ locally hosted LLM (Large Language Model) I mentioned in a previous post. Thanks to Facebook/Meta releasing this model there&rsquo;s a very active development community working on it at the moment, and I&rsquo;m making use of a few of those projects to be able to make this happen.</p><ul><li><a href=https://github.com/qwopqwop200/GPTQ-for-LLaMa rel=external>GPTQ-for-LLaMa</a>
- quantizes the original weights of the 13b model down to something that fits a 12GB VRAM GPU</li><li><a href=https://github.com/oobabooga/text-generation-webui rel=external>text-generation-webui</a>
- implements a Gradio based Web/API interface to LLaMa et. al.</li></ul><p>While I&rsquo;ve written the glue between our Matrix chat and the text-generation-webui API myself I make use of a very nifty little utility:</p><ul><li><a href=https://github.com/rumpelsepp/mnotify rel=external>mnotify</a>
- allows regular unix cli interfacing to Matrix channels</li></ul><p>&mldr; and so my code is simply a bunch of Bash shellscripting and a cut down version of the websocket chat example Python code from text-generation-webui. The way I&rsquo;ve written it I can change <em>context</em> (see below) dynamically during the conversation, for example depending on who is prompting the bot.</p><p>Context? Well, yes. This is something not well explained when people just use LLMs like GPT. The model itself contains &ldquo;knowledge&rdquo;, but a lot of what creates the experience possible is due to what context is supplied - text included with every interaction influencing the inference and massively changing the tone and content of the responses. This is for example the context I currently use with Karen:</p><blockquote><p>&ldquo;You are a question answering bot named Karen that is able to answer questions about the world. You are extremely smart, knowledgeable, capable, and helpful. You always give complete, accurate, and very detailed responses to questions, and never stop a response in mid-sentence or mid-thought.&rdquo;</p></blockquote><p>You might also be able to guess at a few other contexts that might come into action, explaining why the bot is named as it is.</p><p>So what&rsquo;s on the horizon for this technology at the moment?</p><p>Well, there are implementations of both Whisper (voice-to-text) and Tortoise-TTS (text-to-speech) in the works so next up I guess I need to make this into a locally hosted &ldquo;Siri / Alexa&rdquo;. Just to be clear, if I do, it _will_ be activated with <a href="https://www.youtube.com/watch?v=6CDhEwhOm44&amp;t=10s" rel=external>-&ldquo;Computer.&rdquo;</a>
.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2023-03-19:/posts/create-your-own-locally-hosted-family-ai-assistant/</guid>
                        <link>https://blog.troed.se/posts/create-your-own-locally-hosted-family-ai-assistant/</link>
                        <atom:link href="https://blog.troed.se/posts/create-your-own-locally-hosted-family-ai-assistant/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 19 Mar 2023 14:31:04 UTC</pubDate>
                        <title>Create your own locally hosted family AI assistant</title>
                </item>
                <item>
                        <description><![CDATA[<p>With Facebook's release of <a href=https://github.com/facebookresearch/llama/blob/main/MODEL_CARD.md rel=external>LLaMa</a>
, and the subsequent work done with its models <a href=https://github.com/qwopqwop200/GPTQ-for-LLaMa/ rel=external>by the open community</a>
, it's now possible to run a state of the art &ldquo;GPT-3 class&rdquo; LLM on regular consumer hardware. The 13B model, quantized to 4-bit, runs fine on a GPU with ~9GB free VRAM.</p><p>I spent 40 minutes <a href=https://github.com/oobabooga/text-generation-webui rel=external>chatting with one</a>
yesterday, and the experience was almost flawless.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=512 referrerpolicy=no-referrer src=https://blog.troed.se/images/2023/03/computerbrain.f59d2ffa2eb09cdc19d23ccad08821a0b26e13442c6e2a2b0bed0dd82640a2c0.png style=float:left;height:auto;padding-right:30px;width:25% title="Image generated by locally hosted Stable Diffusion" width=512></div><p>So why is Troed playing around with locally hosted LLM &ldquo;chatbots&rdquo;?</p><p>No, not just because they're hilarious ;) I spent a good amount of time a decade ago on current research on consciousness. Esp. <a href=https://www.susanblackmore.uk/publications/#Books rel=external>Susan Blackmore's book series</a>
, and Douglas Hofstadter's &ldquo;I am a <a href=https://en.wikipedia.org/wiki/Strange_loop rel=external>strange loop</a>
&rdquo; made a large impact onto what I consider to be &ldquo;my&rdquo; theory on what consciousness is, and what the difference is between &ldquo;more or less smart&rdquo;, both within humans as well as between humans and other animals.</p><p>I believe the way these LLMs work is close, in a way, to how humans store and recall &ldquo;memories&rdquo;. Since these bots work with language, and language is how we communicate, that allows them to partly capture &ldquo;memories&rdquo; through how they're described.</p><p>What - I think - would be the steps from an LLM into something that could be … conscious?</p><ol><li><strong>Crystalization</strong>: An LLM today is trained on a dataset, which isn't then updated with use. Humans acquire new knowledge into our working memories and then (likely when sleeping) this knowledge modifies our &ldquo;trained dataset&rdquo; for subsequent use.</li><li><strong>Exploration</strong>: This is one of the differences between animals and humans (and within humans). How many &ldquo;future possibilities&rdquo; are we exploring before we act/answer. &ldquo;If I do/say this, then they might do/say that …&rdquo;. Exploration affects future interactions. An LLM can &ldquo;explore&rdquo; answering a question differently using different seeds, but there's no feedback on the value of likely responses.</li><li><strong>Noise</strong>: An idle LLM does nothing. A human brain is never idle. We're constantly getting noisy input from audible sources, air moving against the hairs on our body etc. There's a stream of low level noise into our neural networks, which causes thoughts and dreams. Those thoughts and dreams cause other thoughts and dreams, in a loop. All of these thoughts and dreams modify our experiences. Likewise, an LLM needs to &ldquo;experience&rdquo; things happening also when idle to be able to evolve a persona.</li><li><strong>Persistence</strong>: An LLM today is used by booting it up from it's trained dataset, generating a session of interaction, and is then turned off again. To be able to hold on to a consistent persona the LLM would need to … not be killed over and over.</li></ol><p>I think the four points above will give rise to something that would be &ldquo;conscious&rdquo; in some aspects, and I don't think we're too far off from seeing it happen.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2023-03-13:/posts/the-delta-between-an-llm-and-consciousness/</guid>
                        <link>https://blog.troed.se/posts/the-delta-between-an-llm-and-consciousness/</link>
                        <atom:link href="https://blog.troed.se/posts/the-delta-between-an-llm-and-consciousness/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 13 Mar 2023 15:07:06 UTC</pubDate>
                        <title>The delta between an LLM and consciousness</title>
                </item>
                <item>
                        <description><![CDATA[<p>Docker is a powerful tool for managing and deploying applications, but it can sometimes be frustrating to work with. In this post, I want to share my experience with a recent issue I had with rootless Docker, and what I did to resolve it.</p><p>I was working on a project when I suddenly realized that a Dockerfile wouldn&rsquo;t build on my regular desktop user account. Any command that I ran after the <code>FROM</code> command would just spit out &ldquo;invalid argument&rdquo;. I was confused, because I have multiple users on this machine running Docker and my main user was the only one with any issues.</p><p>I spent a long time comparing the output of the <code>docker info</code> command between different accounts. Eventually, I noticed that all the working ones were using the <code>overlay2</code> filesystem, while the one that wasn&rsquo;t working was using <code>vfs</code>. It didn&rsquo;t take too long to realize that my main user is the only one with an encrypted <code>$home</code> directory, which meant that using it as the data directory for Docker was not possible.</p><p>To fix the issue, I created a <code>~/.config/docker/daemon.json</code> file containing an entry for <code>data-root</code> that pointed to a directory outside of the encrypted <code>$home</code>. This allowed the <code>overlay2</code> filesystem to be used again, and I was able to build the Dockerfile without any issues.</p><p>I&rsquo;m not sure why this issue ever worked before, but it&rsquo;s possible that it was because I was running Docker in a different way (e.g. without rootless mode). I searched online for solutions to this problem, but I didn&rsquo;t find many helpful hints. In the end, I had to figure it out on my own.</p><p>In conclusion, working with Docker can be challenging at times, but with some perseverance and a willingness to experiment, you can overcome most issues. In my case, the solution was to use a different filesystem and to point to a non-encrypted data directory. I&rsquo;m glad that I was able to figure it out, and I hope that my experience can help others who may be facing similar issues.</p><p>***</p><p>Did this post seem a bit out of character for me? Well, then you should go read <a href=https://ioc.exchange/@troed/109439856369620081 rel=external>the original Mastodon thread</a>
. This writeup comes courtesy of <a href=https://chat.openai.com rel=external>ChatGPT</a>
, asked to rewrite said thread into an essay.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2022-12-02:/posts/rootless-docker-and-home-folder-shenanigans/</guid>
                        <link>https://blog.troed.se/posts/rootless-docker-and-home-folder-shenanigans/</link>
                        <atom:link href="https://blog.troed.se/posts/rootless-docker-and-home-folder-shenanigans/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 02 Dec 2022 19:55:54 UTC</pubDate>
                        <title>Rootless Docker and home folder shenanigans</title>
                </item>
                <item>
                        <description><![CDATA[<p>When people talk about the Atari ST range of computers, most mean the common form factor of the times where the computer and keyboard were all one unit. This was true for most of Atari's machines - but for a few exceptions. The Mega ST, the Mega STE and the TT went for a more &ldquo;business look&rdquo;, which apparently meant separation of computer and keyboard. The Mega ST computer has a fantastic &ldquo;pizza box&rdquo; style, while the Mega STE and TT share a common &mldr; something else.</p><p>Another difference than just the looks were the keyboards. While the regular form factor had &ldquo;mushy keys&rdquo; these three models were praised for the tactile feel. There were (and are even today!) after market mods you could buy where you replaced the rubber domes beneath the keys of a regular ST to get the &ldquo;TT feel&rdquo;.</p><p>But one keyboard stands out, even here. While there's very little information available when searching, the Mega ST keyboard is different from all the others (besides the looks, where it again is leaps beyond the Mega STE/TT style keyboards). While the Mega STE and TT relied on higher quality rubber domes, the Mega ST made use of one of the very first mechanic switches on the market - the Cherry MX Black. This means there's no mylar, no domes - and since Cherry has stayed compatible up until this very day you can still buy replacement switches for your 35 year old Mega ST keyboard.</p><p>I did not know this before yesterday. I only knew that I had two Mega STE keyboards and one Mega ST (they're interchangeable - connecting with an RJ12 plug) and I really really wanted to use the Mega ST keyboard but it had severe intermittent connection issues. Pressing a key sometimes generated a key press, sometimes not. Some keys worked better than others, but mostly it was a hit'n'miss how many times you needed to press a key to get a reaction.</p><p>What's a geek to do.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1640 referrerpolicy=no-referrer src=https://blog.troed.se/images/2021/07/megast_keyboard-1.601b26f8f5651b5dc8eb67ab3aea6025f81cd11b1d622e69413150259779e573.jpg style=height:auto;width:1024 width=4028></div><p>It took only a few minutes to get down to a thick black metal frame topside, and a circuit board on the other side. The key caps could just be lifted off, but even after having removed all screws from the metal frame it wouldn't budge from the pcb. I was expecting to be able to separate them getting access to a mylar at this point, which I had intended to fill in with a specific carbon dust mylar pad refresher. After some headscratching, and too much force, I realised that these black switches were soldered to the PCB. At the same time tIn on the #atariscne IRC channel pointed me to a page my own searches hadn't turned up - where <a href="https://www.atariancomputing.com/blog/mega-st-8/mega-st-keyboard-switches-31#scrollTop=0" rel=external>Atarian Computing details how the Mega ST keyboard uses Cherry MX Black switches</a>
. He, like me, had heard rumors but found any actual available information lacking.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2021/07/megast_keyboard2.cb3aefc17eb65d2b3353272d77856a92501be0bec7688e24b7853b6460f6384d.jpg style=float:left;height:auto;padding:10px;width:25% width=3024></div><p>Alright. At this point I decided I could just as well dismantle everything, documenting what I did and if needed buy a new set of switches. Since I really didn't know anything about Cherry switches, <a href=https://www.keyboardco.com/blog/index.php/2012/12/an-introduction-to-cherry-mx-mechanical-switches/ rel=external>I found a good page describing the differences</a>
. Atari had used the Cherry Blacks according to spec, which means the Space bar has a slightly stiffer Dark Grey. We thus have 93+1 switches in total. I looked up where to get replacements online, and quickly found out that mostly the 3 pin color LED variant is sold today, while what the Mega ST keyboard has is the 2 pin variant. This might not be a problem, I assume I could just cut the extra leg, but that felt like a waste. I also want to point out that already from the start Cherry supported a &ldquo;pass through&rdquo; wire, or diode, to aid the routing of signals for the keyboard manufactures. Atari did not make use of this, but if you buy 4 pin switches you can just remove that wire/diode and you're left with the exact 2 pin switch you want.</p><div class=paige-shortcode-image><img alt="A row of switches desoldered from what turns out to be a very yucky keyboard" class=img-fluid crossorigin=anonymous height=2492 referrerpolicy=no-referrer src=https://blog.troed.se/images/2021/07/megast_keyboard8.ffc02c84383da76f902e033be640101d74482060fc08f5b67b35c8362bff301f.jpg style=height:auto;width:1024 width=4032></div><p><div class=paige-shortcode-image><img alt="The ICs and passive components on the keyboard PCB" class=img-fluid crossorigin=anonymous height=836 referrerpolicy=no-referrer src=https://blog.troed.se/images/2021/07/megast_keyboard3-1.6defa00a6d875cc762cf38be242292a91d89140c0aaa5a047bc9df9fd1913c14.jpg style=float:right;height:auto;padding:10px;width:1024 width=3948></div><em>When you've spent time restoring old retro computers, you develop a keen eye for &ldquo;things to fix&rdquo; that might not at all be what you were looking for. Here we can see that there are two electrolytic capacitors (2.2µf 50V and 100µf 16V) on the keyboard PCB, and with a max shelf life in the tens of years, those should always be replaced. I did think to test after having done so if that made a difference to the intermittent connection issues, but no.</em></p><p>The ZD-915 desolder gun made quick work of the switches, and I divided what I had up in dishwasher-safe (max 40 degrees C) and non-dishwasher safe parts. The switches themselves I dismantled, blew out with compressed air, and jet-sprayed with IPA inside the connector and <a href=https://www.cherrymx.de/en/mx-original/mx-black.html#techSpecs rel=external>put it through its motions</a>
, hoping that that would clear out any possible dirt or organic residue on the metal blades.</p><div class=paige-shortcode-image><img alt="Dishwasher full of keyboard parts and key caps." class=img-fluid crossorigin=anonymous height=3707 referrerpolicy=no-referrer src=https://blog.troed.se/images/2021/07/megast_keyboard4.5b78b0401cee80a362bc8deb83ee653868b87888ecc837475e93703510a4bfb6.jpg style=height:auto;width:50% width=3024></div><p>After that all I had to do was to solder everything back up, including a patch for that one switch I forcefully pulled without desoldering first, and I was greeted by a perfectly working, &ldquo;mint condition&rdquo;, Mega ST keyboard. The only real mechanical keyboard Atari ever made for its 16/32 bit computers - and an absolute joy to type on.</p><div class=paige-shortcode-image><img alt="Freshly cleaned Cherry switches mounted to the metal plate" class=img-fluid crossorigin=anonymous height=1808 referrerpolicy=no-referrer src=https://blog.troed.se/images/2021/07/megast_keyboard5.78b959725a9a37adb144d2d6fd0a4c09c144cbb6e985f1936e84257e3033f50b.jpg style=height:auto;width:1024 width=4032></div><div class=paige-shortcode-image><img alt="PCB with everything soldered back together" class=img-fluid crossorigin=anonymous height=1932 referrerpolicy=no-referrer src=https://blog.troed.se/images/2021/07/megast_keyboard6.635d5e924709f0f38915b98e414d1a5e96ca9364081336885870b4a446841d67.jpg style=height:auto;width:1024 width=3748></div><div class=paige-shortcode-image><img alt="The finished keyboard, except the outer case]" class=img-fluid crossorigin=anonymous height=2456 referrerpolicy=no-referrer src=https://blog.troed.se/images/2021/07/megast_keyboard7.523c616a021175c4707af91acf0b1fb1f10441dc17537afa1d96fbfc7b94a1c7.jpg style=height:auto;width:1024 width=4032></div>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2021-07-26:/posts/the-atari-mega-st-keyboard-finally-exposed/</guid>
                        <link>https://blog.troed.se/posts/the-atari-mega-st-keyboard-finally-exposed/</link>
                        <atom:link href="https://blog.troed.se/posts/the-atari-mega-st-keyboard-finally-exposed/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 26 Jul 2021 19:22:51 UTC</pubDate>
                        <title>The Atari Mega ST keyboard - finally exposed</title>
                </item>
                <item>
                        <description><![CDATA[<p><strong>Update 2021-07-14</strong>: <a href=https://demozoo.org/sceners/2521/ rel=external>Ben of The Overlanders</a>
commented on my Facebook post that there was yet another optimization possible on the depack-routine. I have edited the source listing below.</p><p>This weekend yet another instance of the very popular Atari ST retro computer happening <a href=https://dhs.nu/sommarhack/2021/ rel=external>Sommarhack</a>
took place. Due to Covid-19, this year as well as last have been online-only events though. I decided to participate in one of the competitions, the 256 byte intro. This is what&rsquo;s called <a href=http://sizecoding.org rel=external>sizecoding</a>
today, the art of writing something worthy of being shown off, yet you have very little actual room available to do so. On the Atari ST, the limit of 256 bytes excludes the operating system header which is normally 32 bytes in size.</p><p>The Atari ST, being 68000 based, is of course a 16 bit computer. There are no instructions smaller than a multiple of 16 bit, 2 bytes. A lot of instructions will be 4, 6 or even 8 bytes long in a regular program. We thus know, already from the start, that our program will not consist of more than 128 low level CPU instructions.</p><p>I decided I wanted to display text, and additionally I wanted to use a custom font. In a competition like this you would normally use pre-existing primitives available from the operating system, since you would get those &ldquo;for free&rdquo; without using any of the space you have available. A custom font would simply look better, and since the point of the intro I wanted to make was to display an http link, looks would be everything.</p><p>The graphics artist in my old group, <a href=https://demozoo.org/sceners/2603/ rel=external>BlueSTar,</a>
had already made an 8x8 pixel font back in 2015 that we had used in two previous releases. It was the obvious choice to use here as well, and so I knew what I now had to work with. The link would need 30 characters, of which 21 would be unique. The normal use of a font like this is to keep it in a lookup table, and simply reference the character you want to print to the screen. However, even having shrunk the full character set down to only the 21 I needed, when I added a minimal printing routine I got way too close to the 256 byte limit. The other option would be to just store the 30 characters in a screen friendly format, which would make for a smaller print routine. Also, none of the characters I needed from the font used the 8th line, so in the end I had 30 times 7 bytes of pure graphics data.</p><p>210 bytes.</p><p>I wrote up, and optimized, the print routine, the setting of a proper palette and some interrupt to get some movement on the otherwise static content. All that came in at 58 bytes. 210+58=268. 12 bytes over the limit. There were no more optimizations available at this stage, so I needed to look into packing the data. This might sound obvious in a world of ubiquitous ZIP and RAR, but it&rsquo;s not that simple. The depacker will also need to fit, so I needed to find a way to pack data while at the same time gaining more free space from that packing than the depacking code needed.</p><p>Luckily, the same reason for why line 8 was not used by any of these characters would come help me again. In the 8 by 8 pixel square available for each character, none of them used the first column - or the eighth bit of each byte. The reason for this is of course that you should be able to write these 8x8 squares to the screen and automatically get space between characters and lines for readability.</p><p>My first test consisted of using bit 8 to mean &ldquo;0x00&rdquo; (a byte consisting of all zeroes, no pixels set) follows, in addition to the character otherwise using the lower bits. This got me very close, but not enough. After a few iterations of this concept, I decided that it was time to do something a bit more advanced. I switched to writing a custom packer in Java, which borrowed some concepts from the very capable <a href=https://en.wikipedia.org/wiki/LZ77_and_LZ78 rel=external>lz77</a>
algorithm. There would of course not be any room for a custom dictionary, and with only 210 bytes of source data it&rsquo;s not likely to find some large lengths of duplicate bytes.</p><p>I developed a packer that would search for duplicates of 2 and 3 byte blocks, in the first 64 bytes of the data. If the highest bit was set, it together with the next highest bit decided if the position pointed to by the low 6 bits should be copied as 2 or 3 bytes. It would of course prioritize three byte blocks before two byte blocks, and all in all it was able to pack the 210 bytes of source data down to 168. The depacker got to be a bit complicated though, since I needed to store the length-bits and loop on those. At this point, I was able to get the intro under the limit, but I had an awful color cycling as the only available &ldquo;movement&rdquo;.</p><p>Somewhat disappointed, I decided to focus on the size of the depacker. Removing the possibility of using two different lengths brought it down a lot - and also allowed me to use 7 bits for pointing back. The new packer would thus only look for duplications of 2 byte sequences, and it could use the whole first 128 bytes as dictionary. I also gave it a bit more intelligence in how it sorted the priority on what to select for packing. This gave me not only a saving on the depacker - the packer was now able to save 46 bytes in total on the data! Even more than the supposedly more capable version.</p><p>Here&rsquo;s what the depacker looks like, in both 68000 assembler as well as machine code. As you can see, it&rsquo;s 26 bytes in size (excluding the setup of video memory in A1 and source data in A0).</p><pre tabindex=0><code>41FA 004A	lea _text(pc),a0
47D0    	lea (a0),a3
303C 00A3	move.w #_textend-_text-1,d0     ; our packed byte array length
          .l1:
1418    	move.b (a0)+,d2
6A08            bpl.s .notrep                   ; if positive then not a lookup value
12F3 2080       move.b $80(a3,d2.w),(a1)+       ; Offset to ignore high/negative bit
1433 2081       move.b $81(a3,d2.w),d2          ; -&#34;- and saves a bra.s
          .notrep:
12C2    	move.b d2,(a1)+
51C8 FFEC   	dbf	d0,.l1</code></pre><p>The total saving is thus 210-(164+26) = 20 bytes, or 10%. Adding back the 58 bytes of other code, plus handling of a temporary depack space, ended up at 260 bytes.</p><p>Oh, wait. 260? That&rsquo;s &mldr; 4 bytes too much. Now, I had already taken the time to create some better &ldquo;movement&rdquo; in the screen, doing split rasters from a random seed, and I really didn&rsquo;t want to scale back on that again. So, the final trick used is borrowed from another code magician of the past - Gunstick of ULM. <a href=https://demozoo.org/productions/280160/ rel=external>Last year</a>
he found a way to make the 32 byte operating system header 4 bytes smaller, and since the whole point of the demo scene is to cheat as much as possible without it being obvious, that&rsquo;s how come the <a href=https://demozoo.org/productions/296536/ rel=external>A Link Between Worlds</a>
entry by SYNC at Sommarhack 2021 came in at the expected 288 bytes executable size.</p><p><em>added 2021-07-14: Ben&rsquo;s optimization removed 4 bytes and thus the entry would not have needed the header-hack. This is a great example of how, when sizecoding, every single trick in the book is used to shrink the code. Ben makes use of the fact that the high bit (bit 8) is also the negative bit in a byte. Instead of clearing the high bit and jumping on whether it was set or not, as my code did previously, it&rsquo;s possible to jump directly on whether the previous move.b contained a negative or positive byte. Since we don&rsquo;t clear the high bit, we then need to offset the following moves with 128 and 129 (same as -128 and -127) on our index. The depack code thus now stands at 22 bytes in size.</em></p><p>If there&rsquo;s interest, I might clean up the packer and release as well. However, unless you have an extremely similar custom use case you&rsquo;ll probably be better off using lz77 directly. I&rsquo;ve heard rumours of such a depacker on the 68000 at just double the size of mine.</p><p>(Did I win? Of course not - in true SYNC spirit I only cared about the tech challenge. The other entries had COOL MOVING STUFF - and the winner even had sound! You really should <a href=https://demozoo.org/parties/4084/#competition_16575 rel=external>go check them out</a>
.)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2021-07-11:/posts/sizecoding-custom-packing/</guid>
                        <link>https://blog.troed.se/posts/sizecoding-custom-packing/</link>
                        <atom:link href="https://blog.troed.se/posts/sizecoding-custom-packing/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 11 Jul 2021 16:49:17 UTC</pubDate>
                        <title>Sizecoding &amp; custom packing</title>
                </item>
                <item>
                        <description><![CDATA[<p>(Also includes how to seriously mess something up creating even bigger repair needs) When we bought our property we also purchased a lot of the equipment the previous owner had acquired. An integral part of that is the lawnmower tractor - total size is close to two acres and most of that is covered with grass. It's a Hurricane HTG 98 SD, which is a model also sold under many other brands. In Sweden the most known one would probably be Stiga SD 98, but in the UK it's likely an MTD. It has a Briggs & Stratton 17.5HP engine and does a pretty good job, we use it also to transport things around, collect leaves and tidy up the driveway gravel. A week ago it suddenly wouldn't start. It's been a bit finicky since we got it, but no matter what I tried it simply didn't even engage the starter. This points to an electrical issue, right up my alley. Or so you would think. I have degrees in Mechanical Engineering and Software Engineering, but all the electronics stuff I blog about is all self taught. I also looked forward to tearing it down. Like other ride-ons, it has a safety switch where the engine cuts out immediately when it doesn't detect a driver in the seat. This is all good and well, I really understand why, but when you have a huge lawn there's just no way you can walk around in preparation for mowing, getting rid of all small rocks, large twigs and the constantly falling pears and apples now during the autumn. I really need to be able to keep it running while quickly moving things out of the way. Since I had a hunch that the reason it didn't start was another one of the safety switches, I stripped it down and started to search for both where they originated, and where the mower made the decision to whether it was safe to engage the engine or not. Also, to figure out which one it was that was currently not enabling.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1440 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/teardown.a16cdbfa7653541fcb202e33a8e4dbd00522e3bedae0d9365c0592225ea01c99.jpg width=1864></div><p>From experience, I knew that there were at least three safety signals that are all needed for the mower to start: Driver in the seat, gearbox in neutral and cutting blades not engaged.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=3200 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/starter.2c4ac4c8932c734fc7f23497627ff28ba5eb5e35132c26a06c8d7193a82a178d.jpg width=2400></div><p>I decided to work backwards. This component is found next to the starter. Red is always 12V, the starter gets GND from a place not pictured, and I figured the two white cables would go to 12V when the key was turned to ignition. They never were. However, I could clearly hear a clicking sound as the key was turned to pre-ignition, so next my attention was turned to what that could be. (This component, btw, is a rectifier. It supplies DC power from the AC power generated by the engine, used to charge the battery. I was way off on its purpose there).</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/ignition_key_wiring.3602ceb31f9d208ce1afe0450dd622269681d578db8bd6bc797315314b6a08ce.jpg width=3024></div><p>This is a breakout coming from the ignition key. White is 12V when the key is turned to ignition, red and brown are powered when the key is switched to pre-ignition. My model doesn't have front lights, but from that I learned I can add them as a future mod. In the background you can see the solenoid, which is the component that does the clicking. It's a relay, taking 12V directly from the battery with a high capacity cable, allowing current to pass through when the purple wire is powered (black is GND). And, indeed, the purple wire never went to VCC when the ignition key was turned. Since I had already seen that the white wire from the breakout did, I manually connected these together and verified that the starter engaged and the engine came to life. I now definitely knew that the issue was somewhere in when &ldquo;white went purple&rdquo;, which most likely was where the safety signals converged as well.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=3024 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/logic_box.a202be35aef78ce07567df8923f97196df0f5373bc7e0a1bebeb52784ceb9405.jpg width=4032></div><p>What do you know, that looks interesting. Beneath the steering wheel is a little black box with electronics. Opening it up, we can see some familiar colours:</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/logic_box_internals.c60a4468023b9d169c723ab433c370255e437073954d5e0f95abd88a1314d3ce.jpg width=3024></div><p>Red and blue in opposite corners are VCC. The larger gauge purple (yes, they are different) goes to the solenoid, the smaller gauge purple is a combination of the gear box signal and the driver seat signal. Blue's ignition key and grey comes from the cutting blades engager. Maybe I also mixed them up when trying to remember - sorry. The two takeaways for my purposes is that I could measure these and see that the problem was with the push button enabling the cutting blades and also that I only had a combined signal for two of the safety conditions. And there's no way I would want to mod the tractor so that it could be started while in gear. I removed the button, separated the connectors below, cleaned out any corrosion with electronics cleaning spray and put it back together. Now it was time to get to work on that driver's seat safety switch I had in mind. I wanted to hide (we have kids) a little toggle switch somewhere so I could selectively have the function enabled or not. Interestingly, when searching for if someone had done this before, I only found videos from other tractors where this wire was easily spotted underneath the seat - but that isn't the case here. It turns out, the detection is done underneath the bodywork, where the springs attach to the frame.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/weight_detection_2.e580115df6553ea6b6a391c54b53333a08dc86158336489fa31d2af11257fc03.jpg width=3024></div><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/weight_detection_1.abb713668420a54e6e334c95a12b93ebdda664590e9362bed3de4f4664c97a48.jpg width=3024></div><p>Alright, there's the connector. VCC on one wire, and when the driver is seated it simply connects them together. Wiring up a switch here is easy, connect in parallell and short them together for the override function. Uh oh.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1440 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/cut_drive_belt.e1a0507a9eafd79ea3b248541137232ff3c0345f472591187795b271736fee0d.jpg width=1864></div><p>That's &mldr; not good. That's the main drive belt from the engine to the gearbox. Somehow I had managed to catch this just in time before it broke completely - and with everything torn down already! I stopped thinking about the override switch and went to order a replacement belt. *a few days later* Ok. So, I had already changed the cutting deck belt some weeks earlier, so how hard could it be? The belt simply wraps around some pulleys and then &mldr;</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=3024 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/drive_shaft.a1b7803145da2a2bd64ba44ccc2cbbda0b377818731a727e4fb02d03c6b9d291.jpg width=4032></div><p>&mldr; hmm. It needs to get to that top pulley. And there's something in the way of that, so it seems I would need to move the lower pulley and that other thing out of the way first.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=3024 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/drive_shaft_wiring.892cc7c93e0a0b598f625cc88da76fe7a4afdfcdab3587c5907a8272b5172060.jpg width=4032></div><p>That &lsquo;other thing' is a PTO brake, I learned. When engaged it magnetically engages a brake on the drive shaft. Good stuff. I watched some more youtube videos and all I had to do was to remove the nut and it and the pulleys should slide down. Well, yeah. In the ideal world of Youtube. No matter how hard I pulled, even with careful use of a lever (so as not to bend the shaft) they were completely stuck. This is where I would go down the wrong rabbit hole and seriously start messing things up. I blame lack of sleep, overwork, having three small kids and the phase of the moon. It seemed possible to attack the shaft from the other end, so I opened up the engine cover and pulled the nut from the flywheel. My thinking here was that if I removed the flywheel, somehow that would aid me in just moving the shaft the centimeter or so needed to thread the drive belt around the guides. But just as the pulleys, the flywheel didn't budge. And so I turned my attention to four screws on the side of the flywheel. Now, I'm of the mindset that most things you disassemble you can put together again, so I didn't spend any time thinking about what they could be for - just that they might be the ones stopping my progress. One of the bolts came out easily, but the next three just immediately sheared. So I started drilling them out, which worked well for one of them but not the other. At this point, I did notice that when I turned the flywheel, there was a noise I hadn't heard before. Also, I started thinking about my knowledge of, and lack of knowledge of, flywheels. I decided the stop messing with the flywheel, and instead see if there might be some youtube videos showing me how to pull pulleys. I had searched for how to replace a drive belt, of course, but none of them had this PTO brake and they all had it easy where they could just slide the belt either over the lower pulley, or their models had engine mounts that could be moved back and forth. Some better search terminology and off to the hardware store to buy a <a href=https://www.biltema.se/bil---mc/bilverktyg/avdragare/avdragare-3-armad-2000020962 rel=external>three-armed puller</a>
. It took all of five minutes to then get the pulleys and PTO brake off. I had spent the better part of a day on this problem already, so I was filled with joy. Another five minutes and the belt was in place. Some quick connections and the battery temporarily in place and it was time to start the engine. I wasn't too bothered with the two bolts I had removed from the flywheel, it seemed securely in place and I had also bought replacement bolts I could put back. The starter engaged and I heard a big clonking sound and that was it. The positives: I had fixed the original problem, and I had a new drive belt. The negatives: The engine was dead. Now I decided to freshen up my knowledge of flywheels. My teenage years as a souped-up thirteen-horsepower-moped gangsta all came back to me and I realized I had most likely loosened magnets on the inside of the flywheel, and they were now grinding down getting stuck. I had my finger on the button for a new 200 euro flywheel. Went to sleep. The next morning I tried to use the puller to lift the flywheel, but that was a no-go. There are two threaded holes for some speciality equipment for this, but it wasn't something I could find in my local stores and I was getting real tired of this tractor. I found some bush-fix suggestions where you levered some slight tension upwards and then whacked the shaft (protected by the nut) with the biggest hammer you have. Well, I have an enormous sledge hammer. Five whacks later, and the flywheel came off.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1440 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/broken_flywheel.e2b1f4524ab8a1b0d2fc19ad850c41b4865de184c327c5da4c4d6690522f1a7b.jpg width=1864></div><p>Positives: My restored knowledge about flywheels had lead me to the correct conclusion. Negatives: Those metal plates protecting the magnets were bent out of their original shape - and these rotate around fixed magnets at the tiniest of surface to surface gaps needing to be pretty perfect to work.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1440 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/half_fixed_flywheel.4dd9c905af0395a97f61c3b63f561b82c8b57503ef1a548cc8d2bed245b4688a.jpg width=1864></div><p>A lot of careful whacks and taps with a hammer later, and some drilling, I had managed to produce what actually looked pretty good. This picture was taken before I dremeled the bolts down to level though, but you get the idea. I mounted everything back together and was greeted by a perfectly running engine. You should see the grin on my face. I had messed this up - badly - but managed to save it. Alright, back to that safety switch.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/switch_wired.5e80fd2f3fc7681096ea725530af2bfaf33e0eb3f2dbea92040121b56da407cc.jpg width=3024></div><p>This is where I decided to connect up my switch in parallel. If you inspect your SD 98 from the right side, you'll see some wiring tubes coming from the rear to the middle. One of them has three wires: red, orange and gray. Red is VCC, orange is the seat safety and gray is the gearbox safety. That's probably the easiest places to do this mod, not requiring any teardown of bodywork at all - but hey - I had already done it.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=3024 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/09/switch_complete.811df684b0fa3a42f1a9eac9a9a2beebab2a378709006bc50469cc65f1aea8f7.jpg width=4032></div><p>&mldr; and here's how it looks, finally mounted in place. Easily reachable if you know where to look for it, and hopefully something the kids won't figure out until they're old enough to be trusted with it. Oh, and the mower runs better than ever. I took the time to lubricate wherever suitable as I went along, and I cleaned out a lot of assorted junk from various places as well. I even think the motor sounds better, but that's maybe wishful thinking. -&ldquo;Troed, you should have your own Youtube channel for all of this instead of blog posts!&rdquo; No thanks. I absolutely hate having to wade through someone waffling about when all I want is to quickly get to what the solution I searched for is. If you came here looking for how to mod the driver's safety on a Stiga/HTG/MTD/etc - aren't you glad you didn't have to? :)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2020-09-19:/posts/stiga-sd-98-ride-on-lawnmower-repair-and-mod/</guid>
                        <link>https://blog.troed.se/posts/stiga-sd-98-ride-on-lawnmower-repair-and-mod/</link>
                        <atom:link href="https://blog.troed.se/posts/stiga-sd-98-ride-on-lawnmower-repair-and-mod/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 19 Sep 2020 22:17:52 UTC</pubDate>
                        <title>Stiga SD 98 ride-on lawnmower repair and mod</title>
                </item>
                <item>
                        <description><![CDATA[<div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=4032 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/img_20200831_141533_2972.a24127aa8c6a6751d624850f879137f9fd95dceb811c9a994200e4085edc6c1d.jpg width=3024></div><p>Above you see two probes that came with my DSLogic Analyzer. You also see two <a href=https://www.digikey.com/product-detail/en/e-z-hook/XKM-S/461-1012-ND/528233 rel=external>EZ-Hook XKM-S</a>
probes bought from Digikey at 30 SEK each. The latter are vastly higher quality - and much easier to work with since you can place them closer together due to their thinner tips. Highly recommended.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2020-08-31:/posts/hooked-on-hookes/</guid>
                        <link>https://blog.troed.se/posts/hooked-on-hookes/</link>
                        <atom:link href="https://blog.troed.se/posts/hooked-on-hookes/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 31 Aug 2020 12:32:12 UTC</pubDate>
                        <title>Hooked on hookes</title>
                </item>
                <item>
                        <description><![CDATA[<p>I bought a DSLogic Basic USB Logic Analyzer a few years back. It has worked perfectly fine for my use cases. Recently I've begun using a Ubuntu desktop more than my Macbook laptops in the workshop, and when it came to installing the <a href=https://www.dreamsourcelab.com/download/ rel=external>DSView</a>
software I stumbled upon the weird fact that DreamSourceLab seem to consider their old products unsupported, and they cannot use any newer version than 0.99. While figuring this out (no, it's not spelled out anywhere I can see when downloading the software) I stumbled upon some <a href=https://www.eevblog.com/forum/testgear/upgrading-dslogic-basic-to-plus-without-eeprom-modification/msg2270733/#msg2270733 rel=external>forum threads</a>
detailing how the only difference between DSLogic Basic and DSLogic Plus is 256Mbit RAM and changed values in an EEPROM.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=960 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/begin.b460d6c1e3bee0bcbfc5c473d6634a41c8347bddadc0c5d2278adedf67694c8c.jpg width=1280></div><p>The RAM chip (MT48LC16M16A2P-6A) is $1.5 imported from China, or $10 from within Europe. I went with <a href=https://www.littlediode.com/ rel=external>LittleDiode</a>
in the UK and had it in just a few days.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=960 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/board_open.73b322c1e93334ade70c89d29913f43c5afe3de347f1e36bf64ec3118d61740e.jpg width=1280></div><p>8 screws later.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1280 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/paste.4e9666b2fce66b59f96a070f4893e231e2df9963393e255e0c7d01fb02bdbea4.jpg width=960></div><p>Apply solder paste.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1280 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/eeprom_off.820d9e29ba6435e1738a01a03f1d058e29464f57b835aa71095a84dbe9108d00.jpg width=960></div><p>While using the hot air station to melt the paste, also remove the eeprom.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=960 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/eeprom_program.7888f1ca8f77169c4cfa514fecd2af7b351dd02cee6bb1e4624b71543699d91c.jpg width=1280></div><p><a href=https://blog.troed.se/2019/09/28/tl866-firmware-updater-macos-support/ rel=external>The previously modded TL866</a>
works just fine to read out what was in my case an ST M24128. Search and replace 0E 2A 21 00 for 0E 2A 20 00 (two places). Can be done directly in the MiniPro software. Write back the changed contents to the eeprom and put it back in.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=960 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/finished.ac387be26fdff235ef546879bfde101ae63964f664b577bf73403ecc27b56675.jpg width=1280></div><p>Congratulations! You now have a DSLogic Plus.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=960 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/dsview.23f72c1b75fcb294ff2ed944d9fdbf65783fcc8d7f52098952bb6e7160c1d394.jpg width=1280></div><p>Look at that massive capture buffer. I have absolutely no idea what I will ever need it for. Oh, and no. The DSLogic Plus with this hardware revision isn't supported by anything newer than v0.99 of the DSView software either - which was what I was hoping for. Oh well.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2020-08-12:/posts/converting-dslogic-basic-to-plus/</guid>
                        <link>https://blog.troed.se/posts/converting-dslogic-basic-to-plus/</link>
                        <atom:link href="https://blog.troed.se/posts/converting-dslogic-basic-to-plus/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 12 Aug 2020 21:25:09 UTC</pubDate>
                        <title>Converting DSLogic Basic to Plus</title>
                </item>
                <item>
                        <description><![CDATA[<div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=768 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/taptes-1.fe2c056df878abcdee1e711977d688b1d900efdb36f502d84fabb8e0703a049b.jpg width=1024></div><p>Love the Tesla Model 3. When I got it I thought the clever way to route a charger cable up from the front USB ports was nice, but after a while I got real tired of having to poke the phone onto the plug whenever I got in the car. The Tesla M3 subreddit had a thread about adding Qi wireless phone charging to the front compartment, and there seemed to be no real competition to the product from <a href=https://www.taptes.com/products/tesla-model-3-wireless-charger rel=external>TapTes</a>
. I&rsquo;ve now had it installed for a few days and it really is completely seamless. Whenever I place the phone down in the car it charges, and the installation was relatively straight forward. On my commute is a section of freeway that&rsquo;s often backed up. I let Autopilot deal with that, while I go on working through the phone (of course hands-free, officer!). Topping it up whenever possible becomes a must. Now I just need to find some way of wirelessly charging the Tesla itself.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=768 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/stock.1fc4aa279440849fc44c0d349b00b174d98277660cb06e2ecda7af3285569097.jpg width=1024></div><p>Stock, with a third party 90 degree angled charger cable.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=768 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/taptes2.4aa8a6b807b38ded22de98c0d2fa6e673c74da761a4cdb845abf3d92d1753f74.jpg width=1024></div><p>The new charger plate with its USB power cables fitting the stock holes down into the compartment.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=768 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/taptes3.db9ff65f575b8a4d9c8dfaf4450bba04b501f78096e5874d0be5c54507035e33.jpg width=1024></div><p>Qi charger plate installed, still without the stock bottom slide cover.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1365 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/taptes4.7b121a49a3f5fb97d29787d0526399ab7c626f6a796c5a17d4f2eb3a27d2a7fc.jpg width=1024></div><p>I keep my car messy. It&rsquo;s a vehicle, not a showroom. Anyway, this photo shows their Y-cable solution where you still have access to two front USB ports even though they also power the wireless charger. Also in this image is a Raspberry Pi Zero running the awesome <a href=https://github.com/marcone/teslausb rel=external>teslausb</a>
sync-thingie.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1020 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/08/taptes5.2d050fccd48d300b88cc431086921fad14901f6fb9625a8238486e1aefb6e2ff.jpg width=1024></div><p>I scratched my head for a while trying to use my iPhone to take a photo of my iPhone being wirelessly charged, but had to give up and use a Huawei. In reality this looks good.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2020-08-10:/posts/wireless-phone-charger-tesla/</guid>
                        <link>https://blog.troed.se/posts/wireless-phone-charger-tesla/</link>
                        <atom:link href="https://blog.troed.se/posts/wireless-phone-charger-tesla/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 10 Aug 2020 23:22:25 UTC</pubDate>
                        <title>Wireless phone charger - Tesla</title>
                </item>
                <item>
                        <description><![CDATA[<div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2509 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/07/img_2743-e1595415373414.0584bb61e68f587bbd0d2f592204b38238da3af748923f83b289f76012db9ff6.jpg width=4011></div><p>Even the retro world is moving away from the regular DIP packaging sometimes. The Atari Falcon, and third party ROM boards from Exxos, use the 27C4096 PROM in PLCC packaging to hold TOS (the operating system). The TL866 with its DIP40 socket cannot obviously handle these, but a quick search shows us that there exists <a href=https://www.ebay.com/itm/9-adapters-IC-extractor-for-TL866A-TL866CS-TNM-G540-VS4000-VS4800-programmer/221769623986 rel=external>many adapter packages</a>
available to purchase that will sort out various types of popular socket formats. Including 44 pin PLCC. However, the most common such adapter isn't meant for PROMs, but for micro controllers (like the AT89C51 used for the example below). While the pin assignment is almost the same, for the critical purpose of programming the NC pins are swapped.   <code>$ minipro -p AT27C4096@DIP40 -r test.bin Found TL866A 03.2.86 (0x256) Invalid Chip ID: expected 0x1E00F400, got 0xFFFFFFFF (unknown) (use '-y' to continue anyway at your own risk) </code>  If we want to program PROMs with this adapter, we need to perform a slight modification.  </p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=525 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/07/dip40plcc44_2.32d95a09b4fa0ca66163a888cccdfcb3b0ef808be4a2853ff2a25c2d46c764b7.png width=1194></div><p>  Simply, but carefully, bridge pins 12-13 and 33-34 on the PLCC adapter (not the DIP!) and off you go.  </p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1610 referrerpolicy=no-referrer src=https://blog.troed.se/images/2020/07/img_2739.0649a6f3cd390edf6b7d7ccb63655c1a2773c02b7e868063ae1388f687f9a2f2.jpg width=3012></div><p>  <code>$ minipro -p AT27C4096@DIP40 -w dualtos_swapped.img Found TL866A 03.2.86 (0x256) VPP=13.5V, VDD=6.5V, VCC=5V, Pulse=100us Chip ID OK: 0x1E00F400 Writing Code... 77.79Sec OK Reading Code... 5.58Sec OK Verification OK</code>   Happy programming.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2020-07-22:/posts/plcc-44-prom-programming-with-tl866/</guid>
                        <link>https://blog.troed.se/posts/plcc-44-prom-programming-with-tl866/</link>
                        <atom:link href="https://blog.troed.se/posts/plcc-44-prom-programming-with-tl866/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 22 Jul 2020 10:56:50 UTC</pubDate>
                        <title>PLCC 44 PROM programming with TL866</title>
                </item>
                <item>
                        <description><![CDATA[<p>I own a <a href=http://www.autoelectric.cn/en/tl866_main.html rel=external>TL866CS IC programmer</a>
. Wonderful device - I truly recommend it (and I assume its successor is even better). It&rsquo;s been known for many years that the company who made them had one hardware revision, and limited the CS revision compared to the A revision purely in firmware. That limitation has of course been hacked for almost as long as the device has existed. Someone going by the name &ldquo;radioman&rdquo; detailed many years ago how the bootloader could be <a href="https://www.youtube.com/watch?v=JM_2fd9YtFk" rel=external>reflashed from CS version to A</a>
, after which the original software and firmware updates will see the device as the A model in all aspects. To get access to the in-circuit programming abilities, you additionally have to <a href="https://www.youtube.com/watch?v=W7XGiqD5icU" rel=external>solder a header to the mainboard</a>
. <a href=https://github.com/radiomanV/TL866 rel=external>radioman&rsquo;s software</a>
is open source, and exists for Linux (QT) and Windows (.NET/QT). People say it works great under parallells or VirtualBox for macOS users. But that&rsquo;s no fun, is it? I spent the last week changing out libudev for macOS&rsquo; native IOKit library in the QT codebase. That&rsquo;s the only change needed, since libusb has good macOS support. My macOS pull request has now also been accepted and merged into master by radioman. Open source working as intended. And my TL866CS has become a TL866A.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1531 referrerpolicy=no-referrer src=https://blog.troed.se/images/2019/09/tl866csa.651fe48847ba5fe852fd06c1868f0e04503d70dbe98d2b11f8ae3886ee7bf0ff.png width=1497></div>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2019-09-28:/posts/tl866-firmware-updater-macos-support/</guid>
                        <link>https://blog.troed.se/posts/tl866-firmware-updater-macos-support/</link>
                        <atom:link href="https://blog.troed.se/posts/tl866-firmware-updater-macos-support/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 28 Sep 2019 14:41:52 UTC</pubDate>
                        <title>TL866 firmware updater macOS support</title>
                </item>
                <item>
                        <description><![CDATA[<p>[this post has been updated, see additional edits being made at the bottom] April 2018 I saw a Facebook ad for <a href=https://kokoon.io rel=external>a pair of headphones</a>
that sounded like the perfect match for my needs. I'm a severe insomniac, and a frequent flier. I've had the same pair of Sony MDR-NC32NX in-ear noise canceling headphones for a decade, and I was looking for something new. Yesterday they arrived. Now, this was originally a <a href=https://www.kickstarter.com/projects/1861630723/take-control-of-your-sleep-with-kokoon-eeg-headpho rel=external>Kickstarter</a>
(and I have seen that not all backers have gotten theirs yet) but when I ordered they expected to ship them in July the same year. Delays happen.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2621 referrerpolicy=no-referrer src=https://blog.troed.se/images/2019/03/img_20190313_132209_1059.69025ca0ef2cd5e79d929eba1b8f25cf2fd21f358fe492eae994dd4852255a48.jpg width=3502></div><p>Now, for the rest of this review. If you're looking for the best sound quality, or the best noise cancelation, these are not the headphones for you. My circles tell me the Sony WH-1000XM3 would be what you're looking for. If you're however looking for an extremely slim profile with a focus on helping with relaxation and insomnia - keep reading. After having unpacked them, and tried them on (wow - they're heavy!) I charged them up and started to play around. Connecting them to my iPhone was no problem (they're Bluetooth) and the Kokoon Relax app is nicely laid out for you to download calming soundscapes to have in the background. This worked well during the evening yesterday. Later at night, I connected them to my Macbook Pro (again, wirelessly) when going to sleep. I listened to some tv-series and Youtube episodes, and then decided to try to go to sleep. No matter what audio source you're listening to, they're supposed to detect when you have fallen asleep and turn down the sound a few minutes after. I'm a side sleeper, which <a href=https://help.kokoon.io/hc/en-us/articles/115003381732-I-m-a-side-sleeper-are-your-headphones-really-comfortable- rel=external>Kokoon has this to say about</a>
:</p><blockquote><p>Earbuds and bulky noise canceling headphones will make it difficult to sleep for side sleepers. By relocating the headphone electronics from the ear cups to the headband, we have been able to achieve the lowest possible profile, maintaining the natural shape and characteristics of the head in bed. Combining this with cushioning has enabled us to ensure the headphones are comfortable.</p></blockquote><p>&mldr; yeah, no. I have the perfect pillows to support this (soft and deep) but there's no way I can side sleep with these comfortably at home in my bed. That's a bummer, because that was one of my hopes. However, I still need a pair of headphones for when I'm traveling, and I don't always upgrade to business class so sit-sleeping is still a thing.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1334 referrerpolicy=no-referrer src=https://blog.troed.se/images/2019/03/img_20190314_191519_1064.03d67b8e18273f2511f532d4ed6b25b2db585ee4209a61f9072466afd3ed8971.jpg width=750></div><p>This morning (day of use #1) I was unable to connect the headphones to my phone when leaving in the morning. The battery had run flat, which I now realize is because while the headphones can detect that you take them off (and pause the audio) the ability to turn themselves off is still a feature in development. I then charged them at work, and tried again on the way home. I was still not able to connect - until I tried re-pairing them with the phone. This caused me to believe that they can only be recognized by one device at a time - but this also turned out to be wrong. When back home, the audio kept disconnecting from the phone and at one point connected to the computer (where a Youtube video started playing automatically). So I had to turn off Bluetooth on the computer. But I still have had no luck this evening - the few times I've managed to connect the headphones to the phone I've had a few minutes at the most before they suddenly disconnect (and turn off - with a very unpleasant audible &lsquo;pop' in your ears) and I have problems connecting them back again. I now tried to hard-reset (power+action buttons for some 10 seconds) them a second time but it seems the battery has run flat. Conclusion after unpacking day and 1st day of use is: Wow, this is a very very unfinished product. <strong>Day #2 to #4:</strong> Alright, so I've learnt that whenever I want to switch between phone and computer use I need to press the action button for a few seconds and reconnect through the Bluetooth menu. That's not extremely problematic, I can live with it. Besides that I've only had a single surprising issue where the headphones disconnected from the computer while I was watching a show. A press of the power button made them come back alive. I've also made it a habit to charge them whenever possible since I believe they have issues when at near low charge, which I'm of the impression happens a lot quicker than I would've expected. So what now? The only thing I'm currently using them for is as a pair of regular Bluetooth headphones. I can't side sleep with them, the EEG stuff seems unfinished (I know the app claims I fell asleep once when I listened to music, which I decidedly did not) and the ANR (Automatic Noise Reduction) is barely noticeable and I'm even unsure if it's active. In this case I compare to my old Sonys which were truly awesome at it, but also a lot more noticeable (&ldquo;pressure&rdquo; on the eardrums). Additionally, they make my outer ears hurt after a while, which the headphones I use when playing Playstation VR or my precious &ldquo;office headphones&rdquo; didn't. Not sure why this is yet. <strong>Day #5 to #9:</strong> Regular usage as Bluetooth headphones has worked fine these days, although that's not really what I bought them for. Just now I'm unable to get them to work though, which I think is connected to having taken them off allowing the automatic music-pause to kick in. After that they're &ldquo;dead&rdquo;. Can't turn them on, can't reconnect them to something else, charging doesn't make a difference, even the hard-reset button combination seems to do nothing. Will try charging them for many hours, followed by trying to deplete them completely, and see what happens. Since I'm not a Kickstarter customer I do have consumer protection to use if necessary. <strong>Day #10 and #11:</strong> Continuing from above, after they had stopped responding, charging didn't work. The green led blinked as if they were charging, but after many hours it still hadn't turned solid green indicating they were fully charge. I tried to see if anything had changed as to responding to any button presses, which it hadn't, and then let battery run out flat instead. That worked fine - the next day I could charge them and they went solid green in the expected timeframe. However, they're still not responding to any keypresses (power on, hard reset by pressing both buttons for an extended amount of time etc) and there's no LED activity whatsoever. My conclusion is that they're bricked. I will now contact Kokoon to let them know these headphones are going back and I expect a full refund. This will be fun. <strong>April 10th</strong> Final update: I today received the refund for the headphones, and I want to credit Kokoon for being swift about it. They initially wanted to send out a replacement but I simple wrote back that I wasn't a Kickstarter backer but a regular customer, and the headphones didn't match the spec I had been told when ordering them (besides being completely dead after 9 days). I bought the Sony WH-1000XM3 instead a while back and they're absolutely amazing.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2019-03-14:/posts/kokoon-relax-headphones-review/</guid>
                        <link>https://blog.troed.se/posts/kokoon-relax-headphones-review/</link>
                        <atom:link href="https://blog.troed.se/posts/kokoon-relax-headphones-review/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 14 Mar 2019 18:19:14 UTC</pubDate>
                        <title>Kokoon Relax headphones review</title>
                </item>
                <item>
                        <description><![CDATA[<p>update 21/7: I&rsquo;ll make regular builds of this, and hope to have it completely automated soon. They can be found <a href=https://troed.ddns.net/d/5ccb3e17387449e399b6/ rel=external>here</a>
(link might change in the future):</p><p>original post: 12 hours ago</p><p><a href=https://gitlab.com/GrafX2/grafX2/merge_requests/77 rel=external>SDL2 support was merged</a>
into the popular retro graphics program GrafX2. Here&rsquo;s a fully distributable <a href="https://troed.ddns.net/f/3cfa2e4bd4204aceae3b/?dl=1" rel=external>macOS x86_64 binary</a>
(only tested on macOS High Sierra) built from that.</p><p>Thanks to evil/DHS for letting me know of the new SDL2 support, even before it was actually merged ;) (If you try to build from source yourself there are edits I&rsquo;ve done on my local branch to make it build and include the support libraries/frameworks. Ask away)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2018-07-02:/posts/grafx2-sdl2-version-for-macos-64-bit/</guid>
                        <link>https://blog.troed.se/posts/grafx2-sdl2-version-for-macos-64-bit/</link>
                        <atom:link href="https://blog.troed.se/posts/grafx2-sdl2-version-for-macos-64-bit/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 02 Jul 2018 22:10:51 UTC</pubDate>
                        <title>GrafX2 SDL2 version for macOS 64-bit</title>
                </item>
                <item>
                        <description><![CDATA[<p>När jag fyllde år fick jag en <a href=https://jysk.se/inredning/belysning/dekorationsbelysning/ljusbox-torleif-85-bokstaver-m-18-led rel=external>ljusbox från Jysk</a>
av familjen. Barnen tycker den är helfestlig eftersom man kan skriva egna saker med hjälp av de medföljande bokstäverna, och den passade alldeles utmärkt på nattduksbordet. Den är, precis, stark nog att kunna fungera som sänglampa - än har inte åldern kommit ifatt min förmåga att kunna läsa böcker i dämpat ljus. Däremot drivs den enbart av batteri (6st AA). För att ha den som långvarig mysbelysning kändes det suboptimalt, så idag satte jag mig och byggde om den.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=722 referrerpolicy=no-referrer src=https://blog.troed.se/images/2018/02/torleif1.27c4ac3b584aa624c0679bbb094f04907891461ec0b1eada1e991a11b2c4ab7d.jpg width=1280></div><p>6st 1.5V batterier betyder att den drivs med 9V. Jag hade redan en sådan <a href=https://www.kjell.com/se/sortiment/el-verktyg/stromforsorjning/nataggregat/ac-dc/fast-utspanning/switchad-natadapter-9-v-%28dc%29-7-2-w-p44788 rel=external>nätadapter</a>
liggande, annars kan de köpas från Kjell & Company, där jag även köpte <a href=https://www.kjell.com/se/sortiment/el-verktyg/stromforsorjning/nataggregat/dc-kontakter/dc-kontakt-for-chassimontage-hona-p37331 rel=external>honkontakten för chassimontage</a>
. Här kan man stanna, om man inte längre vill ha kvar möjligheten att använda batterier. Eftersom jag har gott om <a href=http://www.littelfuse.com/technical-resources/technical-centers/commercial-vehicle-technical-center/poles-and-throws.aspx rel=external>DPDT</a>
-switchar liggande var det dock inte mycket merjobb att lägga till möjligheten att växla mellan nät- och batteridrift.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=722 referrerpolicy=no-referrer src=https://blog.troed.se/images/2018/02/torleif2.896082cc55053309479b039b770490063e2082321f14adc702b3de6b9bdd49e8.jpg width=1280></div><p>Efter att ha öppnat upp ljusboxen (den är knäppt på, använd en flat skruvmejsel och bänd försiktigt tills du lyckats lyfta upp en kant. Skruvarna på baksidan håller enbart fast batterihållaren och behöver inte tas bort) så ser vi snabbt att konstruktionen är väldigt enkel. Batteripacket är kopplat minus direkt till LED-slingan, och pluspolen går via strömbrytaren.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=722 referrerpolicy=no-referrer src=https://blog.troed.se/images/2018/02/torleif3.7a1190e27788d93dbc7f0bbcdd0c1ebbb7ae16269adfce7cc27d02d7cda87219.jpg width=1280></div><p>Vi återkommer strax till omkopplingen, men först sätter vi dit de nya kontakterna. Jag använder en liten dremel för den här typen av arbete, samt en nagelfil av metall för att göra fyrkantiga hål fyrkantiga. Desto mer tid man lägger ner på att få det snyggt, desto bättre blir det. Här lade jag ner medelmycket tid. Och därmed är vi framme vid omkopplingen. Batteripackets minus samt pluspol går till de två lödöronen på ena sidan switchen, och till den andra sidan kopplar vi plus och minus från DC-honan. Mitten på switchen kopplas minus till LED-slingan, och plus kopplas via strömbrytaren.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=722 referrerpolicy=no-referrer src=https://blog.troed.se/images/2018/02/torleif4.b208caac9fea7744d2a84fb080448d584c6b5899611492404696207ecd007738.jpg width=1280></div><p>Och sedan är vi klara. Tack vare DPDT-switchen finns det inget problem i att ha både batteri samt nätadapter inkopplade samtidigt, även om det är lämpligt att enbart ha det senare för att inte riskera att oanvända batterier ligger och läcker. En av bilderna här är tagen med batteridrift, en med nätdrift.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=722 referrerpolicy=no-referrer src=https://blog.troed.se/images/2018/02/torleif7.a4d3b618510300dc8d558a72b8ad3ee45a4727ebc053c5582bfe893772ceb96e.jpg width=2560></div><p>(Och som ni förstår öppnade jag raskt upp ljusboxen igen och flyttade in kablarna till kanten &mldr; )</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2018-02-19:/posts/batterieliminera-ljusbox-torleif-fran-jysk/</guid>
                        <link>https://blog.troed.se/posts/batterieliminera-ljusbox-torleif-fran-jysk/</link>
                        <atom:link href="https://blog.troed.se/posts/batterieliminera-ljusbox-torleif-fran-jysk/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 19 Feb 2018 13:59:48 UTC</pubDate>
                        <title>Batterieliminera Ljusbox TORLEIF från Jysk</title>
                </item>
                <item>
                        <description><![CDATA[<p><img src="https://blog.troed.se/wp-content/uploads/2018/01/img_20180114_143930.jpg?w=300" alt> I&rsquo;ve added yet a new little <a href=https://blog.troed.se/projects/atari-st-wakestate-nudger/ rel=external>description</a>
to Projects - a circuit and modification to &ldquo;nudge&rdquo; wakestates on Atari STs without needing to power cycle.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2018-01-14:/posts/atari-st-wakestate-nudger/</guid>
                        <link>https://blog.troed.se/posts/atari-st-wakestate-nudger/</link>
                        <atom:link href="https://blog.troed.se/posts/atari-st-wakestate-nudger/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 14 Jan 2018 14:50:16 UTC</pubDate>
                        <title>Atari ST wakestate nudger</title>
                </item>
                <item>
                        <description><![CDATA[<p>Back in the day, those of us who did advanced video tricks on the Atari (opening borders, hardware scrolling on hw without hardware scroll) knew that there were differences between systems, and sometimes on the same system. After some trial and error you built in some compensation which made things work &ldquo;always&rdquo; on all systems. Today we know that a lot of this comes from the fact that the GLUE and the CPU, while both running at 8MHz, can be offset from one another 0-3 cycles (since the master clock everything's divided from is 32MHz). This is &ldquo;randomly&rdquo; (but not random, it depends on specific silicon manufacture timings, phase of the moon etc) selected at cold boot and stays the same throughout resets etc. Modern code can <a href=https://github.com/troed/WSDETECT rel=external>detect which of these 4 offsets the machine is currently in</a>
, compensate for and exploit to do even more advanced tricks than was possible back then. However, testing your code on hardware (or, which I'm currently doing, lots of logic analyzer tracing to document all timings between ICs) means you have to power cycle, check wakestate, power cycle, check wakestate, etc - lots and lots of times. Additionally, most machines only really like two of the wakestates (when cold and warm) and the other two might only rarely be stumbled upon. Recently Ijor at Atari-Forum, whose work on decapping Atari ICs and painstakingly recreating their inner workings has been absolutely invaluable, <a href="http://atari-forum.com/viewtopic.php?f=15&amp;t=32918#p336275" rel=external>mentioned</a>
that GLUE had a TEST pin that should, if held HI during RESET, clear its internal clock divisor counter. Since that counter gives rise to the wakestates, this was intriguing. I got to work. <img src="https://blog.troed.se/wp-content/uploads/2018/01/screen-shot-2018-01-14-at-15-22-43.png?w=300" alt> Now, the GLUE TEST pin (pin 52 on the PLCC version, pin 53 on SMD) is tied to GND on all Atari motherboards. After having tried for a while to sever all traces to it only to find out that there's one underneath the socket as well, I gave up and just desoldered the pin and pulled it out from the socket. Now I could add a new easy to solder to pin onto the GLUE itself.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=577 referrerpolicy=no-referrer src=https://blog.troed.se/images/2018/01/plcc_glue.1e5b2fdeaf61820e4e0c0d816b8f384ea406c579c537c8f024d0f469db61043d.jpg width=595></div><p>After that, I <a href=https://troed.ddns.net/f/9841abae4cee4f7c9a3f/ rel=external>wired up a one-shot 74121</a>
to send a 170ns pulse (close enough to 125ns, and it's what I had laying around in resistors and capacitors) to GLUE whenever RESET was pushed. Additionally, I made this selectable through a switch that either selects original behaviour where wakestate is assigned at cold boot, or the new behaviour where it's advanced more or less predictably at every reset of the computer.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1718 referrerpolicy=no-referrer src=https://blog.troed.se/images/2018/01/glue-test-nudge-final.1f712fda8b2e39410a33c75d0c442b54d8770d6bc47349586077e8eb8cedc06f.png width=2922></div><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=3104 referrerpolicy=no-referrer src=https://blog.troed.se/images/2018/01/img_20180114_143930.5795c0356bf2c4800360d52f95d397049cff4fa26d9afe63de5d905726a31d98.jpg width=5504></div><p>It works, perfectly. An activity that before could take sometimes hours of power cycling can now be done in just a few soft resets. Additionally, a pin that has been tied to ground in all Atari STs ever built finally has some end user purpose, after 30 years. Awesome. (I expect the number of persons in the world who will build this circuit up to be around 1 - me. If for some reason I'm wrong, please feel free to ask me if there's anything unclear in this writeup!)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2018-01-14:/projects/atari-st-wakestate-nudger/</guid>
                        <link>https://blog.troed.se/projects/atari-st-wakestate-nudger/</link>
                        <atom:link href="https://blog.troed.se/projects/atari-st-wakestate-nudger/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 14 Jan 2018 14:47:10 UTC</pubDate>
                        <title>Atari ST wakestate nudger</title>
                </item>
                <item>
                        <description><![CDATA[<p>I&rsquo;ve done an <a href=http://blog.troed.se/projects/atari-st-new-video-modes/ rel=external>extended writeup</a>
of a little project I&rsquo;ve been working on and off on for the last few months. Extending the video modes of an old Atari ST in new and interesting ways. Going from 4 colors to 16 might not sound much with today&rsquo;s tech, but for us oldies this is pretty fascinating ;)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2017-10-12:/posts/atari-st-new-video-modes/</guid>
                        <link>https://blog.troed.se/posts/atari-st-new-video-modes/</link>
                        <atom:link href="https://blog.troed.se/posts/atari-st-new-video-modes/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 12 Oct 2017 12:46:43 UTC</pubDate>
                        <title>Atari ST new video modes</title>
                </item>
                <item>
                        <description><![CDATA[<p>update: See the very bottom of the post for more on where this is going. A while ago there was a discussion on Atari-Forum about what's known as the <a href="https://troed.ddns.net/f/b406fd9b6f574338b412/?dl=1" rel=external>&ldquo;Stefan Nitschke 16MHz mod&rdquo;</a>
. A document from 1996 describing how one can, sort of simply, overclock a regular Atari ST bus from 8MHz to 16MHz, while still keeping video modes backward compatible. It's done by taking the 32MHz system clock used for the Shifter and re-using it for MMU (instead of 16MHz) as well, and then downclocking downstream instead for some of the other chips. This mod has been successfully implemented by a few persons over the years, with more or less good results. It's a tricky mod since you need to upgrade both the RAM and ROM chips with faster versions, as well as switching out your 8MHz CPU for a 16MHZ version. One of the persons who looked <a href="http://www.atari-forum.com/viewtopic.php?f=15&amp;t=22957&amp;p=205151&amp;hilit=shifter#p205002" rel=external>at this mod was exxos</a>
, who instead of using the 32MHz clock for the Shifter also for the MMU, put a 64MHz clock on the Shifter and then used the resulting 32MHz output for the MMU. Stefan does mention this in his doc as well, but states that it needs a lot of extra tricky hardware to get useful video output from. I had a quick look at the image exxos posted and realized it was just perfect. It showed the ST outputting twice the normal horisontal resolution, effectively showing line 0 and 1 (and 2 and 3 etc) after one another on the same horisontal line, and when the video memory ran out half way through it instead showed bus activity (looking beyond available RAM). To me, as a programmer and demo scener, this looked simple to solve. It would enable an effective doubling of the known ST resolutions:</p><ul><li>320x200 in 16 colors</li><li>640x200 in 4 colors</li><li>640x400 in monochrome</li></ul><p>&mldr; would become:</p><ul><li>640x200 in 16 colors</li><li>1280x200 in 4 colors</li><li>1280x400 in monochrome</li></ul><p>&mldr; while still using the exact same sync timings for regular TV and monitor use. This got me really excited - a new usage of Atari's tech from the 80s that would bring something really new, and that in theory could've been accomplished already back then. I looked through the Ataris I have laying around (too many .. ) and decided to use a 1040 STFM of a very late rev (C070859-001 REV 2.0), with surface mounted MMU and GLUE chips. Not just because those chips had a higher likelyhood of being overclockable, but also because the motherboard model is &ldquo;sane&rdquo; and compatible with <a href=https://www.exxoshost.co.uk/atari/last/storenew/#0020 rel=external>exxos' 4MB SIMM RAM upgrade</a>
. As I wrote above, both RAM and ROM need to be exchanged for faster versions. [gallery ids=&ldquo;561,562,563,564&rdquo; type=&ldquo;rectangular&rdquo;] This RAM mod took quite some time to do. I used a hot air rework station to remove the old RAM chips, and due to the fact that I have the &ldquo;big&rdquo; RF box the new SIMM is tightly snug in place and can never be removed. After that I installed a <a href=https://www.exxoshost.co.uk/atari/last/storenew/#0042 rel=external>fast dual TOS, again from exxos</a>
. Sorry, no pictures, that was very straight forward :) Next up was the CPU. Tedious work, and it felt strange cutting the legs of a trusty old companion like that. [gallery ids=&ldquo;571,570&rdquo; type=&ldquo;rectangular&rdquo;] With these components switched out (and the old STFM feeling quite modern with its 4MB RAM and TOS 1.04) it was time to turn to the actual 16MHz mod. I had purchased some <a href="http://www.ebay.com/itm/4x-64-MHz-Quartz-Crystal-Oscillator-QUICK-EU-POSTAGE-64-00000-MHz-4-PIECES-/321468793901?hash=item4ad908842d:g:NLwAAMXQeW5Tahfx" rel=external>64MHz oscillators</a>
, and remembering exxos telling me they might have difficulties driving the Shifter I decided to mount it directly on top of the Shifter with a straight pin connection. I cut the old 32MHz leg right off, and added the osc. The image is from an earlier test, the final version has a decoupling capacitor as well.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2017/10/64mhz_shifter_before_capacitor.aac67e4f8a884231510a0b15e3edafb15677624d6064c350974bd3f6d63e75f5.jpg width=3840></div><p>Now I needed to sort out the rest of the clocks. Adding 64MHz to the Shifter like this will cause the MMU to get 32MHz instead of 16 (which it gets from the Shifter), and it in turn will output 16 instead of 8, and 8 instead of 4. This starts out fine, we want the 16MHz to the CPU. However, the same clock goes to GLUE/floppy/DMA etc which should still run on 8MHz. Additionally, the MFP needs 4MHz. I tried various configurations of this, using a 74LS74 to downclock, but got stuck on a non working floppy. It wasn't able to read disk contents correctly, sometimes showing 0 bytes in 0 files, sometimes a few, sometimes all. Loading never worked. Since I had prepared well by cutting traces both topside and bottom side, effectively severing the MMU from CPU, MMU from GLUE/therest and MMU from MFP, I could try something new. [gallery ids=&ldquo;649,650&rdquo; type=&ldquo;rectangular&rdquo;] [legend: red=16MHz, orange=8MHz, cyan=4MHz. Original values] exxos had pondered whether it wasn't possible to use a synchronous 4 bit counter, a 74F161, fed with 32MHz and which would then produce synchronized 16,8,4 (and 2) MHz outputs. I ordered one (surface mounted was the only one available as you can see) and connected it up to the already cut traces, fed with the same clock as the MMU got.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2017/10/using_74f161_clocks.ef3f4bb4802cfa323fd5a2a1926e9722daf0c47d49a64130549fda2f80616a5d.jpg width=3840></div><p>Success! First time I switched the computer on it booted the disk right up. The new clocks look really good as you can see from my logic analyzer:</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=642 referrerpolicy=no-referrer src=https://blog.troed.se/images/2017/10/new_clocks.b1adb13b8dfef6f0d5e4090c00aabea5f33ad1741f8dcd92fc364c0a4f5b1aba.png width=3156></div><p>With the mod active and stable, I now finally had the same video output as the image exxos had posted a few years ago, the one that got me interested in this little project to start with. The following image is what mono looks like rendered as 1280x400, and was also the first indication that while I had the new video working something was still off.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2017/10/new_mono_before_overscan_sw.25f6de3b55ed54abe199931dd424fa65417e2d235166cfd30b23c48430190334.jpg width=3840></div><p>RAM speed here should really be 200%. I pondered this for a while, figuring that while the new clocks look really good, it might be wrong for GLUE (8MHz) to only go HI on the falling edge of the CPU (16MHz). As a test, I wired up the CPU to the 16MHz output from the MMU instead - and that did the trick. However, besides that, the image shows that the Shifter is indeed outputting twice the normal amount of video RAM, and now I went to work on getting GEM/VDI to understand that. I had for a while thought of the fact that this was slightly similar to the old overscan mods, where increased screen resolutions were had by removing the borders using a hardware mod. There was software available for those mods that made GEM/VDI understand the slightly increased resolutions, and I started looking at them. It turns out that <a href="https://troed.ddns.net/f/81a93b0c56ad4a8a8d47/?dl=1" rel=external>Overscan v1.6</a>
by Bernd Gebauer and Karsten Isakovic from 1989 was just what I needed. I edited the source code to reflect these video modes instead of the overscan ones (and fixed a bug that hadn't been visible with their modes) and &mldr; wow: [gallery ids=&ldquo;609,610&rdquo; type=&ldquo;rectangular&rdquo;] What you see above are photos of the new resolutions 1280x400 in monochrome and 640x200 in 16 colors. My ST is connected with an <a href=https://www.exxoshost.co.uk/atari/last/storenew/#0107 rel=external>ubeswitch</a>
to a Dell 2001FP which has a native resolution enough for these to look well. I've also tried with a NEC 1990FXp which does an equally good job at it, maybe even a bit better. And finally, here's a run with the latest GEMbench v6 in the new low resolution, 640x200x16. With RAM speed also boosted to 200%, even though GEM is rendering in 16 colors instead of 4, it's still a lot faster than a stock ST.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2017/10/gembench6_newlowres_fullspeed.c6f11477444c7b54cfc2fdd2787b02826d964331fd39d474ff146970f735e0c9.jpg width=3840></div><p>Next up I want to look into using the <a href="https://www.youtube.com/watch?v=O-5mGjmAESM" rel=external>MoCo software</a>
I'm already writing for ubeswitch to also help me fool applications that won't start in low res because they need 640x200 (I'm looking at you, FastCopy III!) to run anyway. Could Atari possibly have enabled these video modes in the STE, back in 1989? Maybe. I do believe most MMU and Shifters are happy to run at twice the original frequencies. However, RAM and ROM chips at the necessary speed might've been a bit too expensive - not to mention sourcing 16MHz CPUs. /Troed addendum: More technical details can be found in <a href="https://www.exxoshost.co.uk/forum/viewtopic.php?f=18&amp;t=283" rel=external>my thread</a>
on exxos' forum. That's also where you will find the latest developments, like &ldquo;mono, but in color&rdquo;:</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=600 referrerpolicy=no-referrer src=https://blog.troed.se/images/2019/03/doublest_czietz_s.081eb327b173c523f5a77af440269449e8d4257a2009e1ee23cccd854fb37dd6.jpg width=800></div>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2017-10-12:/projects/atari-st-new-video-modes/</guid>
                        <link>https://blog.troed.se/projects/atari-st-new-video-modes/</link>
                        <atom:link href="https://blog.troed.se/projects/atari-st-new-video-modes/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 12 Oct 2017 12:40:27 UTC</pubDate>
                        <title>Atari ST new video modes</title>
                </item>
                <item>
                        <description><![CDATA[<p>update 20-07-20:
Since a few weeks back I no longer use any macOS systems, being Linux only nowadays. Because of that I feel that I can no longer keep this service running, due to not being able to verify that things are working or being able to quickly correct them when they&rsquo;re not. Hopefully the Hatari project can in time setup automatic CI pipelines for macOS too.</p><hr><p>For a few years now I&rsquo;ve helped out the excellent <a href=https://hatari.tuxfamily.org rel=external>Hatari</a>
Atari 16/32 bit emulator project with <a href=http://download.tuxfamily.org/hatari/ rel=external>macOS builds</a>
. However, the Hatari release cycle is about once every year and I&rsquo;ve myself noticed that the developments that take place in between are very useful and so I&rsquo;ve sporadically made development builds available as well. Sometimes. When I&rsquo;ve felt like it. Of course, I can do better.</p><p>While I don&rsquo;t have a 24/7 macOS server running, and thus can&rsquo;t completely automate a nightly build setup, my laptop will now try to produce new builds (whenever the source repository has changed) during other usage and publish them here: <a href=https://sync.wtf/hatari_macos/ rel=external>Hatari macOS nightly builds</a>
. Please let me know if you find this useful, and if there are any changes I could do to make it even better.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2017-06-19:/posts/hatari-macos-nightly-builds/</guid>
                        <link>https://blog.troed.se/posts/hatari-macos-nightly-builds/</link>
                        <atom:link href="https://blog.troed.se/posts/hatari-macos-nightly-builds/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 19 Jun 2017 12:02:11 UTC</pubDate>
                        <title>Hatari macOS nightly builds</title>
                </item>
                <item>
                        <description><![CDATA[<p>The Atari ST, like other computers at the time, had Dual Density disk drives with 720KB of storage. DD for short. Since High Density (1.44MB) appeared shortly after, Atari used such drives in the more top of the lines models Mega STE and TT. Additionally, us enthusiasts and hardware hackers added HD capability to the regular ST and STE range since it was neat to store twice the amount of data on suitable disks (and it worked pretty well cutting a hole in DD disks tricking the drives into thinking they were HD, even though the magnetic layer is slightly different). All the above is of course very well known. However, recently I've managed to dig up some less well known information as well as adding new discoveries about our dear 30 year old hardware. This is a post about that. Atari used several different makes of DD drives in the ST computers, but one of the more common is the Epson SMD-380. For the higher end models with HD support Atari however used one model exclusively, the Epson SMD-340. For after market HD modifications of ST:s one drive in particular became quite popular, the Sony MPF-920. If you search online for kits and instructions, that's the drive you'll find the most info on. It's not only the drive that decides whether to write in Double Density or High Density however. The data needs to be clocked faster through the drive onto the disk, and so it's not enough just swapping in and out the drives mentioned above to choose between DD and HD support. A neat little trick is that the floppy controller used by Atari, the 1772 (made by WD and VL), outputs a DD capable signal when clocked at 8MHz and HD when clocked at 16. In a regular ST it's always clocked at 8MHz, and in the Mega STE and TT Atari used carefully tested chips that could do 16MHz (and later elected to produce a variant themselves, known as the AJAX chip, that was designed to run at 16). The way to get HD support in a regular ST is thus to clock the floppy controller at 16MHz when writing/reading an HD disk. I might be misremembering, but I think my own first HD mod needed manual selection through a switch and so I needed to select the right position depending on the disk I used. A much better option is of course to ask the drive if there's a DD or HD disk inserted, and switch clock speed depending on that. This is what's <a href=http://www.exxoshost.co.uk/atari/last/floppy/5.png rel=external>well documented for the Sony MPF-920</a>
and is how the many different &ldquo;HD kits&rdquo; know what to select. Now here's where things start to get confusing. In many places you can find documentation to the effect of pin 2 of the floppy interface being a density select signal. An output. While that might be true for some drives, <a href=http://floppy.shugart.free.fr/docs/epson/epson_smd340.pdf rel=external>my research says that it's an input</a>
. The Atari Mega STE and TT (the Epson 340 drive) does not get told whether there's an DD or HD disk in the drive, and yet they still have full support for both formats. This part of the mystery took me to an <a href="http://www.atari-forum.com/viewtopic.php?f=27&amp;t=13362&amp;p=299819#p113215" rel=external>old discussion thread from 2008</a>
which seems to be the first time someone actually looked into how this was done. There's a memory mapped register, handled by a PAL chip, that the Atari operating system (TOS) writes to to set the clock frequency of the floppy controller. The logical conclusion is thus that TOS switches frequency when encountering errors and retries. In that sense, the after market ST mods did a much better job. The drive told a piece of circuitry what it should use and the clock frequency was then set correctly. Many many ST top cases have been <a href=http://www.exxoshost.co.uk/atari/last/end/6.png rel=external>horribly butchered</a>
to make room for the normal eject button of most HD drives instead of Atari's nice slanted cutout. Of course, I wanted to make my tricked out STE (see other posts) read HD disks as well, since I spend a lot of time archiving lost treasures and sometimes come across HD disks. I did not want to butcher the top casing though. Idea: Use the same HD drive as Atari. The front plate and eject button of the Epson 340 and 380 are interchangeable, and the Epson 340 can still be found used online (and after some digging I found that it was also sold by Hewlett Packard under their brand as D2035-60011). I also bought an <a href=https://www.exxoshost.co.uk/atari/last/storenew/#0041 rel=external>HD-kit from exxos</a>
that seemed to handle some obscure effects (steprate issues) adding HD to ST:s can cause.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2017/01/hdkit_hp_epson.03b63da4f93fe6b31986bf523779b402b5f19470ce83758d0c807b19afa45735.jpg width=3840></div><p>Here's where I realized that although it's easy to find where to pick the density detect signal on other drives (like the Sony) absolutely no one seemed to have ever done it on Atari's HD drive of choice (!). After some measuring and tracing <a href="http://www.atari-forum.com/viewtopic.php?f=15&amp;t=30149" rel=external>I found the spots to use</a>
, and although the drive can be set to handle density internally I also only got it to work if giving the drive its own density detect signal as input on the density select pin #2, and told it to use the external signal (jumper 1-2 & 5-13).</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=745 referrerpolicy=no-referrer src=https://blog.troed.se/images/2017/01/epson340_density_signal_small_instr.b11eab0214c2bf6cd6ab86b8521d90aaf6b2f95a3611fa8ae6a6a6004887474d.jpg width=720></div><p>Since I have two drives internally (an HxC and the internal floppy) and a switch to choose which is A: and B: respectively, I also had to create a logic table on which signals should select which input and density. The result was (disregard the wiring on the image, I don't seem to have one from the final conclusion) that the kit should get post-switch signals and D1 should get density detect from the drive. With all this done, my STE now has full DD and HD support - with a beautiful and newly refurbished Epson 340 as the internal drive. I save my case cutting for LCD displays, SD card slots and USB ports ;) <code>DD: YM DS0 —— no switch —— HD-kit DS0 —— cable DS0 (8MHz) = floppy A: DD: YM DS1 —— no switch —— HD-kit DS1 —— cable DS1 (8MHz) = HxC B: DD: YM DS0 ———— switch ———— HD-kit DS1 —— cable DS1 (8MHz) = HxC A: DD: YM DS1 ———— switch ———— HD-kit DS0 —— cable DS0 (8MHz) = floppy B: HD: YM DS0 —— no switch —— HD-kit DS0 —— cable DS0 (16MHz) = floppy A: HD: YM DS1 —— no switch —— HD-kit DS1 —— cable DS1 (8MHz) = HxC B: HD: YM DS0 ———— switch ———— HD-kit DS1 —— cable DS1 (8MHz) = HxC A: HD: YM DS1 ———— switch ———— HD-kit DS0 —— cable DS0 (16MHz) = floppy B:</code></p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2017/01/hd_install_done.3b48db600059f46b962db3c56c95af551423233e5e2b49ed7d0fe51114a5819a.jpg width=3840></div><p>(Oh, and since Atari had their own way of handling media change detect - knowing when a new disk had been inserted and you needed to re-read the FAT - a lot of disks have been trashed from the use of non-compliant drives. The exxos kit above has an optional workaround in that it always forces a re-read, but the best solution is of course to use the same HD drive as Atari did, and not having to use any media change workarounds at all)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2017-01-20:/posts/the-tale-of-high-density-atari-mystery/</guid>
                        <link>https://blog.troed.se/posts/the-tale-of-high-density-atari-mystery/</link>
                        <atom:link href="https://blog.troed.se/posts/the-tale-of-high-density-atari-mystery/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 20 Jan 2017 13:19:17 UTC</pubDate>
                        <title>The tale of high density Atari mystery</title>
                </item>
                <item>
                        <description><![CDATA[<p>Today it&rsquo;s exactly two months since <a href=https://blog.troed.se/2016/11/03/fountain-of-youth/ rel=external>I started on my "Elysium Basis" regime</a>
. Since quite a few of my friends have asked me to write an update on my thoughts about it - here it is.</p><p>I&rsquo;m still of the opinion that I have more energy. I&rsquo;m also confident in the "smoother skin" effect, although I&rsquo;m unsure as to whether it&rsquo;s because it actually is or if I just, for some reason, experience it to be. Just as before I&rsquo;ve stayed away from researching what effects I should/could expect, only looking them up once I&rsquo;ve noticed a change to see if others might&rsquo;ve as well. And so the third thing I&rsquo;ve noticed so far is &mldr;</p><p>Alright. Before I write this I need to make a disclaimer: The effect is very slight - I do not think it will become noticeable to anyone but myself. I&rsquo;d hate for anyone I know to rush out and by these supplements just because of this blog post, so please, don&rsquo;t. With that said, I seem to have some hair regrowth where the hairline has receded over the last decade. Some. A little. Most likely not noticeable if you don&rsquo;t, like me, see my face in the mirror every day.</p><p>Now on to the negatives, if they are. I think my energy levels are lower than what they were a few weeks ago. I also have some "body ache". I&rsquo;ve seen others claim that this could happen if you have a methylation pathway problem, and indeed I do. Thanks to "DNA-testing" (SNP, through 23andme and Genetic Genie) I know that I have homozygote mutations affecting my methylation. I&rsquo;m not sure what to make of this, currently I&rsquo;m waiting to see if it gets better/worse.</p><p>Since <a href=https://blog.troed.se/2013/12/23/r-u-sad/ rel=external>I suffer from SAD</a>
I also know better than to make too much about what I feel during the darkest months of the year (I&rsquo;m no longer on SSRIs as described in that post).</p><p>tl;dr: I&rsquo;m still taking NR+Pterostilbene, and will continue to do so for the moment.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2016-12-26:/posts/fountain-of-youth-the-two-month-update/</guid>
                        <link>https://blog.troed.se/posts/fountain-of-youth-the-two-month-update/</link>
                        <atom:link href="https://blog.troed.se/posts/fountain-of-youth-the-two-month-update/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 26 Dec 2016 17:50:04 UTC</pubDate>
                        <title>Fountain of Youth - the two month update</title>
                </item>
                <item>
                        <description><![CDATA[<p><em>&ldquo;it's better to burn out than to fade away&rdquo;</em> (From Neil Young's My My, Hey Hey - and known for being quoted by Kurt Cobain in his suicide note) I remember my teenage years well. I also remember voicing the opinion above, along with other things along the lines of <em>&ldquo;life ends at 30&rdquo;</em>. I'm 42, almost to the day. I have no intention whatsoever of fading away. I consider myself a <a href=https://en.wikipedia.org/wiki/Transhumanism rel=external>transhumanist</a>
, and I spent some time being a board member of the <a href=http://manniskaplus.nu rel=external>Swedish subcategory of Humanity+</a>
. I subscribe to the idea of aging being just another disease we haven't cured yet, and I eagerly follow the current state of research on the subject. One development in particular, popularised by the company Elysium, is a combination of substances that counteracts one of the possible sources of a lot of age related problems, the declining quality of communication between our cell nucleus and the mitochondria that powers it. The list of things this affects (effects, even) is quite long - and for quite some time now <a href=https://blogs.scientificamerican.com/guest-blog/beyond-resveratrol-the-anti-aging-nad-fad/ rel=external>there have been promising tests</a>
on yeasts and mice on how to counteract this decline, in effect boosting the levels back to where they were when we were younger. A few weeks ago the <a href=https://scienceblog.com/488613/anti-aging-candidate-nicotinamide-riboside-gets-first-human-trial/ rel=external>results of the first clinical human tests</a>
were published, and I am since five days on the same formula as Elysium sells under the brand <a href=https://www.elysiumhealth.com/basis rel=external>Elysium Basis</a>
. It consists of 250mg of Nicotinamide Riboside, taken together with 50mg of Pterostilbene, once a day.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/11/elysium_basis.adc57a36bda774276485269f0fecb49aaaf072c236877b507c34eefe8896abba.jpg width=3840></div><p>&mldr; and I'm quite stunned, at the moment. I've carefully avoided reading too much about what effects I should experience, instead going at it with the outset of trying to see what my general experience of a month's usage would feel like compared with before. I know all too well how dangerous expectations (and the placebo effect) can be when trying to evaluate something like this. However, even after just a few days one effect stands out so clearly that I have no doubts whatsoever as to its existence. My general energy levels are up, way up. This applies to everything from feeling more awake directly in the morning, to walking at a very brisk pace to the bus station without feeling the slightest need to increase my rate of breathing, to working through the day and yet being fully energetic when coming home to play with my children in the evening. This does not in any way feel artificial (like you would get from Modafinil, for example), I just feel &mldr; more capable. (Another possible effect, although I only noticed it a day ago, is that my skin feels &mldr; smoother, softer. Like after having used a facial cream after shaving. I'll have to get back on how certain I am of this later) So why am I taking these supplements? Is this just a case of death anxiety? Well, I don't think so. I do however know both from my immediate family members' medical history, as well as from DNA testing, that I would be wise to take care of a few things that otherwise could become issues. I would consider right about now to be a suitable point in time to start making sure that I will keep my health into my 50's, 60's,&mldr;, 100's. <a href=http://alivebynature.com/about-niagen/ rel=external>Increased cardiovascular health, better neuro protection and lowered blood sugar levels</a>
is what I'm aiming for. Live long and prosper. One (two) pills a day.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2016-11-03:/posts/fountain-of-youth/</guid>
                        <link>https://blog.troed.se/posts/fountain-of-youth/</link>
                        <atom:link href="https://blog.troed.se/posts/fountain-of-youth/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 03 Nov 2016 21:56:17 UTC</pubDate>
                        <title>Fountain of youth</title>
                </item>
                <item>
                        <description><![CDATA[<p>A few weeks ago I acquired a computer I never had the chance to play around with when it was new, an Atari Mega STE. It&rsquo;s the culmination of Atari&rsquo;s 16 bit line of computers, very compatible with the ST(E) range yet much more expandable, usually coming with a SCSI adapter and HD (1.44MB) floppy support. Besides the expandability, it can run at 16Mhz, with cache, compared to 8MHz for the rest of the ST(E) computers. It also has a socket for a 68881/68882 FPU. However, a few very early Mega STEs didn&rsquo;t come with 1.44MB floppy support, and there aren&rsquo;t really any Atari dealers left if you want to sort that out - or for that matter add the logic chip needed for the FPU. So, during the last few weeks, I&rsquo;ve sorted out what needed to be done to get the machine &ldquo;up to spec&rdquo;. 1) I found a wonderful guide over at Dbug&rsquo;s site on <a href="http://blog.defence-force.org/index.php?page=articles&amp;ref=ART45" rel=external>replacing the (VERY LOUD!) PSU fan</a>
with something almost completely silent. 2) I realized the mythical Epson 340 floppy drive (Atari&rsquo;s HD drive of choice) was also sold under the HP brand as <em>Hewlett Packard D2035-60011</em>, and snagged two quite cheaply off Ebay. The big benefit of using the Epson is that you can transplant the eject button and faceplate from the old 720KB drive and thus no modification to the casing is needed. 3) After some searching I found <a href=http://rodolphe.czuba.free.fr/Museum/ST_GALs.zip rel=external>GAL files for both 1.44MB floppy support and the FPU support</a>
, and thanks to a fellow retro computing enthusiast (hi joska) I had both chips programmed. See below for more detail. 4) I figured out that there was a cheap and easy <a href=https://blog.troed.se/projects/atari-mega-ste-battery-replacement/ rel=external>replacement for the original RTC battery</a>
- see separate post. 5) TOS 2.06. Yes, my machine came with 2.05. This was by far <a href=http://www.exxoshost.co.uk/atari/last/store.htm rel=external>the easiest part</a>
.. I really only bought the machine to be able to test compatibility with my software, I already have both a very tricked out STE as well as a heavily upgraded Mega ST, but I&rsquo;m getting to appreciate the Mega STE more for every day. Maybe I need to have three different Atari models at my desk at all times? Additional details for the curious: <strong>FPU upgrade.</strong> As can be seen in <a href=http://www.atariworld.org/files/docs/C302228-001-REV-A.pdf rel=external>Atari&rsquo;s official installation manual</a>
most motherboards come with a jumper W3 that should be opened when you add an FPU. My motherboard didn&rsquo;t, since it&rsquo;s an older revision. According to the manual there should then be a resistor on the bottom side of the motherboard that you need to remove. At first I thought mine had already been patched, since a resistor was placed in the socket topside - but due to needing to do something else on the bottom side later (see below) I found out there indeed was a resistor there as well. Remove, insert the C301903 GAL, insert FPU (a 68882 in my case), test with Gembench 4.03 and everything&rsquo;s fine.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=720 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/07/mega_ste_fpu4.4cca5d455cd2b2484d859347d3f67b1e25245c6191532fdecb431474e109020d.jpg width=1280></div><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/07/mega_ste_motherboard_bottom4.46a9d7198d3acece2a7c6dd9aa078b9a65b825a841e180d0bca6785dcd091ec1.jpg width=3840></div><p><strong>HD floppy upgrade.</strong> After purchasing the Epson 340 (HP version) and transplanting the faceplate and eject button, I replaced the C301901-001 PAL with the newly programmed C301901-002 GAL code. See <a href=https://archive.org/details/Atari_MEGA_STE_1.44_Megabyte_Floppy_Drive_Installation_Manual_1991 rel=external>Atari&rsquo;s official manual</a>
for details. Naturally my motherboard was again of the very old revision indicated and there was no continuity between U7 (the CPU) pin 32 and UA2 (the GAL) pin 19. This was why I had to turn over the motherboard and make that patch. After that all that&rsquo;s needed is to change dip switch number #7 to on and test the new HD floppy support. Recalling common knowledge from way back then I didn&rsquo;t bother to exchange the floppy controller to the AJAX model, since it was a WD1772-0202. Other WD-models might be more of a hit&rsquo;n&rsquo;miss whether they can handle 16MHz or not.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/07/mega_ste_floppy_pal4.3d693c9955cc095da8c8dd2438dee7a38bced54926cfdf1c30ffa2412d130185.jpg width=3840></div><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/07/mega_ste_floppy_patch4.eed4569d420b53fcb3a403273c7001949a37244fb87c57982c1350d8d5a8520d.jpg width=3840></div><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/07/mega_ste_wd17726.fe1c9d5d2764050e88aed681b8f03e48dac00153876f85dc4756c73bfad933e0.jpg width=3840></div>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2016-07-14:/posts/mega-ste-1-44-hd-floppy-fpu-fan-and-rtc-upgrades/</guid>
                        <link>https://blog.troed.se/posts/mega-ste-1-44-hd-floppy-fpu-fan-and-rtc-upgrades/</link>
                        <atom:link href="https://blog.troed.se/posts/mega-ste-1-44-hd-floppy-fpu-fan-and-rtc-upgrades/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 14 Jul 2016 13:07:38 UTC</pubDate>
                        <title>Mega STE 1.44 HD floppy, FPU, fan and RTC upgrades</title>
                </item>
                <item>
                        <description><![CDATA[<p>The Atari Mega STE might be the best machine of the 16 bit era. It's very compatible with the regular ST(E) range, but in addition it can be run at a higher clock speed (16MHz, with cache) as well as a very nice case where it's easy to access things like memory, the built in SCSI hard drive etc. Most of the Mega STEs came with 1.44 HD floppy support as well (mine didn't, something I'm rectifying right now). I recently acquired a Mega STE, mostly to make sure that any code I write in the future is compatible (our latest demo <a href="http://www.pouet.net/prod.php?which=66787" rel=external>{Closure}</a>
apparenly isn't). Besides adding HD floppy support, I'm also upgrading all the little things that makes for quite some difference in using these old retro machines. <a href="http://blog.defence-force.org/index?page=articles&amp;ref=ART45" rel=external>Silent PSU fan</a>
, TOS 2.06, FPU &mldr; and oh, making sure the RTC, Real Time Clock, actually works. Atari used a battery quite common for its time in the Mega STE, a Tadiran TL-5242/W, 3.6V Lithium. It's fastened with velcro (!) to the backplane, easily reachable after having removed the hard drive case, and connected to the motherboard via a four pin connector.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=720 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/07/mega_ste_orig_battery1.1e9eb09a974bdad67c00ae48b03a5103b5a548a1316c88332f7828e47d1fff44.jpg width=1280></div><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=720 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/07/mega_ste_orig_battery21.48acd6c1f6b999ef9e1dcae39e9b4d568a581c1fd4ca97f62c52ee1d9eb2b50d.jpg width=1280></div><p>It's also quite depleted after 25 years. You can still buy the part, a brief online check centered around a $100-$200 expense, mostly due to high shipping costs (if you're in the US you can <a href=http://www.batterycentralmall.com/Batteries/Tadiran/Tadiran_TL5242W.html rel=external>buy it here for $13</a>
. Shipping cost to Sweden $111). I've thus seen various solutions offered online on how to either skip it completely, using other RTC solutions, or connect various 2,3 or even 4xAA battery packs. I like my retro upgrades as clean as possible, so I instead found and installed what I consider to be the closest match to what was there originally. A <a href=https://www.batteriexperten.com/sv/artiklar/sb-aa11-lithium-,-3.6v,-2400-mah.html rel=external>3.6V Lithium battery</a>
in a <a href=http://www.electrokit.com/batterihallare-1xaa-sladdanslutning.48517 rel=external>single AA-holder</a>
. Total cost, including shipping of the parts, around $10.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=720 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/07/mega_ste_repl_battery1.98b6b8445d4f0f35c95d3e355f47d54df0b475500256d4ffb885d571ed767105.jpg width=1280></div><p>I cut the original cable and re-used the connector, and I'm right now pondering whether to use velcro, double sided tape or hot glue to fasten the battery holder. There's plenty of space to even lay it flat on the motherboard.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=720 referrerpolicy=no-referrer src=https://blog.troed.se/images/2016/07/mega_ste_repl_battery_installed1.0ab5db8bffc63606be44d7de680d38d7598c9ded0a9221ffdf1838a783013a73.jpg width=1280></div><p>Enjoy.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2016-07-13:/projects/atari-mega-ste-battery-replacement/</guid>
                        <link>https://blog.troed.se/projects/atari-mega-ste-battery-replacement/</link>
                        <atom:link href="https://blog.troed.se/projects/atari-mega-ste-battery-replacement/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 13 Jul 2016 12:11:15 UTC</pubDate>
                        <title>Atari Mega STE battery replacement</title>
                </item>
                <item>
                        <description><![CDATA[<p>This weekend is a long weekend in Sweden - and of course I&rsquo;m away from home, hacking away at the infrastructure I&rsquo;m far away from.</p><p>During that hacking I needed to change a mapped port in my router, and suddenly realized I couldn&rsquo;t. I use the latest Airport Extreme (it really has the best performance, throughput as well as wireless stability) and the only machines I remote into are Linux (Ubuntu 16.x) based. Conundrum.</p><p>To begin with I feel this is quite lazy of Apple - they have software for not only Mac and iOS but Windows as well. My previous home server was indeed a Mac (Mac Mini, 2007 model) but since Apple no longer supports it with security updates I had to change. Linux feels more future proof. But I digress.</p><p>There&rsquo;s apparently an old Java based library to interface with Airport Extremes, but not only does it rely on outdated Java versions, but <a href=http://kernpanik.com/geekstuff/2015/01/10/using-airport-utils-ubuntu-trusty.html rel=external>it&rsquo;s also very limited in what configs you can change with it</a>
. The other alternative is of course to see if Wine works. Which it does.</p><p>However, I did not get it to work at all first - nothing happened after installation when I tried to run the config app. Luckily someone else had already figured out that if you&rsquo;re on 64-bit (and let&rsquo;s face it, we all are today) <a href=http://cgarvey.ie/archive/2015/04/27/airport-utility-under-ubuntu-14/ rel=external>you need to explicitly use Wine in 32-bit mode</a>
for the Airport Extreme config application to work. Tada! Port mapping changed.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2016-06-06:/posts/how-to-config-an-airport-extreme-from-linux/</guid>
                        <link>https://blog.troed.se/posts/how-to-config-an-airport-extreme-from-linux/</link>
                        <atom:link href="https://blog.troed.se/posts/how-to-config-an-airport-extreme-from-linux/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 06 Jun 2016 08:52:59 UTC</pubDate>
                        <title>How to config an Airport Extreme from Linux</title>
                </item>
                <item>
                        <description><![CDATA[<p>This last weekend me and many others were participating at the third incarnation of the <a href=http://stniccc.com rel=external>STNICCC Atari ST conference</a>
. The first and original one was held in 1990 - where sadly I didn't attend - and the second one was held as a reunion in the year 2000. Back then they joked about meeting up again in the far far away future of 2015.</p><p>&mldr; and that happened. Me and two others from my old demo crew had written a brand new demo that we showed at the <a href=http://demozoo.org/parties/15/17/ rel=external>demo competition</a>
, and additionally I had been asked by the organizer to do a talk on the latest findings with regards to two of the Atari ST's more magical demo tricks - overscan and sync scroll.</p><p>The talk was recorded, and I've uploaded a version where I've tried to clean up the audio to Youtube. My slides (even the final version which I was unable to use during the presentation) can be found in the video description. Enjoy.</p><p>update 2015-12-31: I mention in the talk that I will release source code showing how you can detect the wakestates yourself. Now done. Pre-built binaries <a href="https://troed.ddns.net/f/9e66/96edc2/?dl=1" rel=external>here</a>
and code on <a href=https://github.com/troed/WSDETECT rel=external>Github</a>
. <a href="https://www.youtube.com/watch?v=F4WJYyoF1Lk" rel=external>https://www.youtube.com/watch?v=F4WJYyoF1Lk</a></p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2015-12-23:/posts/overscan-and-sync-scrolling/</guid>
                        <link>https://blog.troed.se/posts/overscan-and-sync-scrolling/</link>
                        <atom:link href="https://blog.troed.se/posts/overscan-and-sync-scrolling/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 23 Dec 2015 09:01:15 UTC</pubDate>
                        <title>Overscan and sync scrolling</title>
                </item>
                <item>
                        <description><![CDATA[<p>update 2018-02-09: VLC 3.0 has just been released. <a href=https://sync.wtf/sc68-VLC-Plugin_VLC3_r692.dmg.zip rel=external>Here&rsquo;s a compatible version</a>
of the plugin (same source revision as before).</p><p>update 2017-03-18: Link updated with <a href="https://troed.ddns.net/f/b9fbc1f316/?dl=1" rel=external>fresh build</a>
(VLC 2.x).</p><p>A few weeks ago I spent some time with the excellent <a href=https://sourceforge.net/projects/sc68/ rel=external>sc68 software</a>
written by Benjamin Gérard (Ben/Overlanders). It&rsquo;s a suite of software that can faithfully reproduce the workings of the YM2149 sound chip in the Atari ST and convert/play <a href=http://sndh.atari.org rel=external>songs made for it</a>
. Additionally, which was the reason I took a look at it, Ben had made a VLC compatible plugin.</p><p>Since the Mac sorely lacks a competent playlist capable Atari ST music player (XSC doesn&rsquo;t do playlists, Audio Overload isn&rsquo;t fully compatible) I was really interested to see if the *nix support in sc68 was enough for me to be able to compile a working plugin for OS X as well.</p><p><a href="https://troed.ddns.net/f/b9fbc1f316/?dl=1" rel=external>It was</a>
. Enjoy. (I am! Thanks Ben :))</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=673 referrerpolicy=no-referrer src=https://blog.troed.se/images/2015/10/sc68_vlc.27064f085de20ea9a7541b47018b8dd56f088930374c6da49fbd282510d44ec5.png width=1018></div>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2015-10-13:/posts/atari-st-chiptune-plugin-for-vlc/</guid>
                        <link>https://blog.troed.se/posts/atari-st-chiptune-plugin-for-vlc/</link>
                        <atom:link href="https://blog.troed.se/posts/atari-st-chiptune-plugin-for-vlc/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Tue, 13 Oct 2015 11:30:15 UTC</pubDate>
                        <title>Atari ST chiptune plugin for VLC</title>
                </item>
                <item>
                        <description><![CDATA[<p>It's somewhat easy finding modern software able to read ancient data formats (note, "somewhat"). It's often more difficult finding the opposite - conversion from modern formats to older ones. When I've wanted to edit graphics using modern software (GIMP) and convert it to Atari ST I've so far used the excellent <a href=http://netpbm.sourceforge.net rel=external>Netpbm</a>
package.</p><p>The steps have involved converting my image in GIMP to use a colormap of suitable size, save the image as a .ppm file and then use ppmtopi1 to (finally) get an Atari ST compatible low resolution image in "Degas" format, a popular image editor back then. This weekend I grew somewhat tired at all those steps - and additionally I wanted to convert an image to the Atari ST medium resolution format (.pi2). There's no such application in the Netpbm suite.</p><p>It's not completely plug'n'play, but here's a link to <a href=http://github.com/troed/PNGconv rel=external>PNGconv</a>
, a project I just published to Github. It's a Java program that takes any input format Java understands (JPG, BMP, PNG, GIF .. ) and outputs as Atari ST low/medium/high (.pi1/.pi2/.pi3).</p><p>I'm probably the only one who's ever going to use it, but you know what <a href=http://xkcd.com rel=external>they</a>
say about programmers. We'll happily spend hours now making sure we're spending "less" hours somewhere down the road ;)</p><p><img src=http://imgs.xkcd.com/comics/automation.png alt="XKCD: Automation"></p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2015-08-11:/posts/atari-st-picture-conversion/</guid>
                        <link>https://blog.troed.se/posts/atari-st-picture-conversion/</link>
                        <atom:link href="https://blog.troed.se/posts/atari-st-picture-conversion/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Tue, 11 Aug 2015 11:35:21 UTC</pubDate>
                        <title>Atari ST picture conversion</title>
                </item>
                <item>
                        <description><![CDATA[<p><em>-You&rsquo;re getting a 3D printer? Why - what will you use it for?</em></p><p><em>-Oh you know, it&rsquo;s handy to have around when stuff around the house breaks down. Making spare parts, repairs, stuff like that.</em></p><p>I&rsquo;ve seen it lots of times. I&rsquo;ve said it more than a few times leading up to when I purchased my own 3D printer. And finally it came true. Well, almost. Apparently when me and my sister, with families, visited our parents recently they felt the coffee machine needed a good cleaning. However, either because of the dishwasher or just due to age a piece of plastic holding a metal spring developed a crack - making the drip stop quite ineffective.</p><p>A perfect opportunity to show how useful a 3D printer can be around the house - wouldn&rsquo;t you say? It also looked quite easy - there was plenty of room around the actual plastic component to force a printed holder, a belt of sorts, onto it. After careful measurements while I was there, which turned out to be in error, followed by renewed measurements by my father, I sent the printed part by postal mail earlier this week. And tonight I got the following picture. The piece fits perfectly and the drip stop is back in action.</p><p>Score one for the 3D printer - a few hundred more of these repairs and it&rsquo;ll have paid for itself! ;)</p><div class=paige-shortcode-image><img alt="Drop Stop repair" class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2015/04/coffee_machine_drip_stop.def56ce6b328556f8f1738bcfd8655c5248992faf7b2da712681d306f9c25e35.jpg style=height:auto;width:600 width=3840></div><p>Legend: Metal = spring, black plastic square = original & cracked, white square = newly printed part</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2015-04-22:/posts/3d-printers-for-making-spare-parts/</guid>
                        <link>https://blog.troed.se/posts/3d-printers-for-making-spare-parts/</link>
                        <atom:link href="https://blog.troed.se/posts/3d-printers-for-making-spare-parts/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 22 Apr 2015 21:11:14 UTC</pubDate>
                        <title>3D printers for making repairs</title>
                </item>
                <item>
                        <description><![CDATA[<p>It's retro computing time again! As part of my quite extensive rebuild of one of my Atari STE machines I want to have both an <a href=http://hxc2001.free.fr/floppy_drive_emulator/index.html#SDCARDFloppyemulator rel=external>HxC SD floppy emulator</a>
as well as the original floppy disk drive mounted internally in the machine at the same time.</p><p>While that in itself is just a question of making a cable that supports both, another problem quickly arises. In most cases you would want the machine to boot off the HxC (drive A:) and the internal floppy would then be drive B:. However, in some cases there's clearly a point in booting off the internal floppy instead - and for that it has to be drive A:. In real Shugart floppy speak this amounts to the drive select signals, DS0 and DS1. On a modern ST both are available on the internal cable, and one (DS0) on the external. What we want is obviously to mount a switch that will swap these two signals at will.</p><p>This is a solved problem. DS0 originates from pin 20 of the YM 2149 sound chip (really!) and DS1 is on pin 19. Cutting these two pins and then soldering two cables from the motherboard to the middle pins of a <a href=http://en.wikipedia.org/wiki/Switch#Contact_terminology rel=external>DPDT</a>
(dual pole, dual throw) switch and two cables from pin 19 and 20 to one side, crossed over to the other side, will do. It's also possible to achieve a swap between an internal floppy and an external drive without cutting pins - some prefer to avoid that - but it won't swap the two internal signals.</p><p>Yesterday I really wanted to avoid cutting pins - but at the same time I needed a way to switch not only internal and external, but the two signals on the internal cable as well. I thus had to innovate a bit, and this post details the result. All pictures from a regular STE - I haven't looked into what's different on a regular ST or Mega model.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2014/10/before.5470ed07e66faaf9e64b36563b5610695b41f5ce52bfa50dcae04032dc855351.jpg width=3840></div><p>This is our area of interest - before any modifications have been done. Pin 20 and 19 of the YM 2149 soundchip are clearly visible (upper left of the chip from this angle) - and you can also see that pin 19 can be traced to a via. There's no visible trace from pin 20 - leading us to conclude that it's on the bottom side of the motherboard. Also note the three solder points named W300 and W301 respectively (square solder pad is pin 1 on each) - these are very much involved in what we want to do. DS1, pin 19, is available on W300-1 and DS0, pin 20, is available on W301-1. We see that W301-1 can be traced to a via just below it as well.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2014/10/pin20_vias_bottom.af25c59fa307a3ecc327ba0ca02a4aa03503f029d421efe57233350628393900.jpg width=3840></div><p>Turning over the motherboard we can see that pin 20 is indeed connected to the same via we just traced from W301-1 - but it's also traced to another via on the other side of the chip! This second via is found topside at the &lsquo;C' in &lsquo;C113'. With this knowledge we can now conclude that if we do not want to cut the actual pins 19 and 20 of the sound chip, we have a few cuts to make to traces on the motherboard. We must cut both traces originating from pin 20 on the bottom side of the motherboard, before the vias, as well as the trace to the via topside from pin 19.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2014/10/pin20_vias_cut.12c214f4c8f72401e4d983e86d16cdfcf5f6aac7d4723b629ddc3b707ec0c139.jpg width=3840></div><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2014/10/pin19_via_cut.5fffc6922a799cf860c033dcb7b0494886807595aa5cb917dd4e1c5a773623c9.jpg width=3840></div><p>Make sure to measure resistance with an Ohm meter to know when you've cut through the traces, and don't cut off anything else. There's plenty of space on the bottom side of the motherboard, a bit less topside. Once we've done these cuts, we've effectively severed the connections of the originating signals on the sound chip pins from where they go on the motherboard (internal cable as well as external port). However, we've also severed the connection between the two different directions pin 20 went off to - so we have to repair that topside. The easiest way is to solder a wire between the vias we just traced it to. We also have to mount the wires to our switch, of course. We pick up the signals directly from pin 19 and 20 - to the end points of our switch (crossed over at one of the sides). We then solder wires from the middle pins of the switch to W300-1 and W301-1. And we're done.</p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=1636 referrerpolicy=no-referrer src=https://blog.troed.se/images/2014/10/switch.5f6d3b93c352fb6c45feccdf499fd769cd47a5481e45b722defbbe70dd669ce2.jpg width=2528></div><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=2160 referrerpolicy=no-referrer src=https://blog.troed.se/images/2014/10/after.e79e3fc7f67f72a8152fa3cbff89253065118ddf6d5f31081a73af010d24afe7.jpg width=3840></div><p>This will switch not only the signals on the internal cable - but also swap internal and external. It's effectively exactly the same as what's achieved by cutting the pins off the chip as described in many places on the web.</p><p>So why didn't I just do that? Well. I seem to have misplaced my side cutter. So .. there. Enjoy.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2014-10-21:/posts/atari-st-drive-a-and-b-swap/</guid>
                        <link>https://blog.troed.se/posts/atari-st-drive-a-and-b-swap/</link>
                        <atom:link href="https://blog.troed.se/posts/atari-st-drive-a-and-b-swap/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Tue, 21 Oct 2014 09:24:53 UTC</pubDate>
                        <title>Atari ST drive A and B swap</title>
                </item>
                <item>
                        <description><![CDATA[<p>I just did a writeup on <a href=http://blog.troed.se/projects/atari-st-picopsu-replacement/ rel=external>how to replace the original PSU in an Atari ST/E with a modern picoPSU</a>
. I&rsquo;m quite satisfied with how it came out - click the link for some pretty pictures ;)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2014-08-06:/posts/picopsu-atari-st-replacement-guide/</guid>
                        <link>https://blog.troed.se/posts/picopsu-atari-st-replacement-guide/</link>
                        <atom:link href="https://blog.troed.se/posts/picopsu-atari-st-replacement-guide/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 06 Aug 2014 21:42:07 UTC</pubDate>
                        <title>picoPSU Atari ST replacement guide</title>
                </item>
                <item>
                        <description><![CDATA[<p>One of the first components to show symptoms of age in an old computer is the power supply unit. This might show up as unstable video output, frequent crashes, problems reading disks or even worse - other components giving up. One option is to take care of existing PSUs - exxos has an <a href=http://exxos.www.idnet.com/IMPULSE/atari/last/psu/index.htm rel=external>excellent guide</a>
as to what components might need replacing after 25 years - another is to get rid of the internal PSU altogether. While it's fully understandable why Atari went from an external power brick in the original 520ST to an internal in the following models, the bricks of today are both quite small as well as there being a more urgent need to take better care (less heat) of our dear retro equipment.</p><p><img src="http://blog.troed.se/wp-content/uploads/2014/08/picopsu_specs.png?w=300" alt=picopsu_specs></p><p>The <a href=http://www.mini-box.com/picoPSU-80 rel=external>picoPSU</a>
 is a very small DC to DC converter that takes 12V (usually) input from a power brick and supplies the 5V and 12V (passthrough) an Atari ST/E needs (and 3.3V and -12V as well for regular ATX use). Being very small, generating almost no heat, it's perfect for prolonging the life of an old Atari as well as freeing up space within the original case for other projects. It's also able to supply power to additional connectors for such.</p><p>Parts needed: Soldering equipment, an 80W picoPSU and an ATX connector + cable. I bought an ATX extender cable that for some reason did not follow any regular coloring scheme which you'll notice later.</p><p><a href=https://blog.troed.se/wp-content/uploads/2014/08/orig_psu_and_plate.jpg rel=external><img src="http://blog.troed.se/wp-content/uploads/2014/08/orig_psu_and_plate.jpg?w=600" alt=orig_psu_and_plate></a></p><p>Original PSU unscrewed from its plate. Here we can see the original protective plastic that we will later place the picoPSU upon.</p><p><a href=https://blog.troed.se/wp-content/uploads/2014/08/orig_psu_and_plate.jpg rel=external><img src="http://blog.troed.se/wp-content/uploads/2014/08/psu_model.jpg?w=600" alt=psu_model></a></p><p>Make and model of the original PSU. 3A at 5V and 0.9A at 12V is well within the range of the 80W picoPSU model as shown above.</p><p>First we desolder the original cable from the PSU to the ST motherboard - we want to reuse it later.</p><p><a href=http://blog.troed.se/wp-content/uploads/2014/08/power_connector_reuse.jpg rel=external><img src="http://blog.troed.se/wp-content/uploads/2014/08/power_connector_reuse.jpg?w=600" alt=power_connector_reuse></a></p><p>We also desolder the regular power connector and power switch. The latter, as shown here, we clean up and reuse later as well.</p><p><a href=http://blog.troed.se/wp-content/uploads/2014/08/cabling_done.jpg rel=external><img src="http://blog.troed.se/wp-content/uploads/2014/08/cabling_done.jpg?w=600" alt=cabling_done></a></p><p>Here we've soldered the original motherboard connector to a cut off ATX extender cable. This specific cable did not follow <a href=http://pinouts.ru/Power/atxpower_pinout.shtml rel=external>the regular color scheme</a>
so I had to take good care making sure I ended up connecting ground to ground, 5V to 5V and 12V to 12V. You can also see PS_ON and ground being routed to the original power switch - the ATX standard allows for "soft" power on which means the picoPSU will always be powered but itself only supply power to the motherboard once we switch on the Atari. This is a decision I might revert - the power brick I use suffers from high pitch squealing (not uncommon with switched PSUs) when connected but not under load. The other option would be to connect PS_ON directly to ground and instead put the switch on the incoming power wire (black/white cable going to the picoPSU in this picture).</p><p><a href=http://blog.troed.se/wp-content/uploads/2014/08/picopsu.jpg rel=external><img src="http://blog.troed.se/wp-content/uploads/2014/08/picopsu.jpg?w=600" alt=picopsu></a></p><p>Now we can start laying out the components onto the original plate - and test. Before turning on the power with the Atari motherboard connected I must confess (mostly due to the lack of correct color scheme on the ATX cable) that I used a voltmeter several times making sure I indeed got the correct values.</p><p><a href=http://blog.troed.se/wp-content/uploads/2014/08/pplate_progress.jpg rel=external><img src="http://blog.troed.se/wp-content/uploads/2014/08/pplate_progress.jpg?w=600" alt=pplate_progress></a></p><p>Since we're now using a much smaller input power connector we need to create some sort of plate covering the old hole where the power cable used to be - as well as allowing us to fit the new connector. I found an old plastic case with some nice fabric on the inside that I could modify to fit. We'll screw this onto the original PSU plate where it will press against the outer casing of the Atari.</p><p><a href=http://blog.troed.se/wp-content/uploads/2014/08/picopsu_done.jpg rel=external><img src="http://blog.troed.se/wp-content/uploads/2014/08/picopsu_done.jpg?w=600" alt=picopsu_done></a></p><p>&mldr; and this is what we end up with. As you can see there's now plenty of room for the HxC SD Floppy emu as well since we no longer need the metal casing around the PSU (and additionally the SIMMs I use are low profile) - and even more space available where the original PSU used to be. That's where my next project is going to be placed, and that's also the reason I haven't hot glued the picoPSU into place yet in this picture.</p><p><a href=http://blog.troed.se/wp-content/uploads/2014/08/power_plate.jpg rel=external><img src="http://blog.troed.se/wp-content/uploads/2014/08/power_plate.jpg?w=600" alt=power_plate></a></p><p>Oh, almost forgot. This is how pretty the new power connector plate came out in the end. Since this is the externally visible part it's of course something you want to spend time on getting right ;) I hope you enjoyed this little writeup. I owe great thanks to <a href="http://www.atari-forum.com/viewtopic.php?f=15&amp;t=23488" rel=external>thgill over at Atari-Forum</a>
for both the idea as well as his pictures which I studied extensively while doing the mod myself.</p><p>/Troed</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2014-08-06:/projects/atari-st-picopsu-replacement/</guid>
                        <link>https://blog.troed.se/projects/atari-st-picopsu-replacement/</link>
                        <atom:link href="https://blog.troed.se/projects/atari-st-picopsu-replacement/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 06 Aug 2014 21:36:05 UTC</pubDate>
                        <title>Atari ST picoPSU replacement</title>
                </item>
                <item>
                        <description><![CDATA[<p>Why my Mac Mini from 2008 (model 2,1) went from Snow Leopard to Lion to Mavericks in the last 24 hours.</p><p><img src=http://blog.troed.se/wp-content/uploads/2014/07/macmini_mavericks22.png alt=macmini_mavericks2></p><p>I like my Mac Mini. It&rsquo;s the first Mac I ever bought, on a whim, and it&rsquo;s served me well both as a workstation and lately more of a combined NAS, Minecraft and darknet server. I populated it with 4 (3.3 usable) GB RAM from the outset, and a few years ago I switched out its 5,400 rpm hard drive for an SSD.</p><p>If I remember correctly it came with Leopard but I bought Snow Leopard on the same day, or just afterwards. Earlier this year Apple stopped supporting Snow Leopard with security updates (in my opinion, I know others disagree). Understandable, somewhat, and while I knew I could update it to Lion I had never really come around to doing so.</p><p>The amount of apps not compatible with SL (<a href=https://mac.github.com/ rel=external>Github</a>
, I&rsquo;m looking at you) were quite low and often they seemed to require Mountain Lion anyway. But. As a somewhat Internet facing machine I felt I needed to make sure it at least got security updates, and thus I upgraded it to Lion yesterday.</p><p>It was a huge pain freeing up enough space on the internal SSD to be able to remove the per user FileVault encryption - but eventually I got it done. And realized way too late that turning on full disc encryption with FileVault 2 kind of defeated the purpose of having a headless NAS in a closet - since any reboot now meant I had to connect at least a keyboard, possibly a screen.</p><p>A quick search realized that <a href=https://discussions.apple.com/message/18066303 rel=external>I wasn&rsquo;t alone</a>
 in feeling cheated - apparently in 10.8.2 (Mountain Lion) and Mavericks Apple added <a href=http://support.apple.com/kb/HT6116 rel=external>a possibility to pre-authorize</a>
 an account when scheduling a restart because of this.</p><p>Lion is the end-of-the-line when it comes to OS support for my Mac Mini 2,1. It&rsquo;s a 32 bit EFI system, and <a href=http://support.apple.com/kb/ht5444 rel=external>Mountain Lion onwards</a>
 require 64 bit EFI support.</p><p>Enter a hacker under the alias Tiamo and a script written by a Mac Sysadm named Oem, called <a href="http://oemden.com/?page_id=531" rel=external>SFOTT</a>
. Sixty Four on Thirty Two. The script takes a valid Mavericks (or Mountain Lion) installation .app and patches it to consider the target hardware valid.</p><p>It also uses a shim layer (<a href="http://forums.macrumors.com/showthread.php?t=15,98,176&amp;page=2" rel=external>Tiamo&rsquo;s boot.efi</a>
) to patch through the 64 bit kernel syscalls to the 32 bit EFI on too-old hardware. My <a href=http://en.wikipedia.org/wiki/Mac_Mini#Specifications_2 rel=external>Macmini2,1</a>
 is now running the latest version of Mavericks.</p><p>That&rsquo;s pretty awesome. Not yet headless with full disk encryption though - the pre-auth functionality has <a href=http://support.apple.com/kb/HT6,116 rel=external>its own hardware requirements</a>
and still does not work. Bummer.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2014-07-18:/posts/how-to-run-mavericks-on-too-old-hardware/</guid>
                        <link>https://blog.troed.se/posts/how-to-run-mavericks-on-too-old-hardware/</link>
                        <atom:link href="https://blog.troed.se/posts/how-to-run-mavericks-on-too-old-hardware/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 18 Jul 2014 19:14:19 UTC</pubDate>
                        <title>How to run Mavericks on too old hardware</title>
                </item>
                <item>
                        <description><![CDATA[<p>The L2311c monitor is a "desktop hot-swappable" monitor to which you connect USB devices and ethernet, where you're supposed to only then have to connect it to your computer via a single USB cable to access all of its functionality. On Windows.</p><p>Out of the box, the integrated webcam as well as USB keyboards and mice connected to its port work fine. The USB Ethernet (LAN7500) as well as USB Graphics (UFX7000) does not work however. LAN7500 Ethernet drivers are available <a href="http://www.microchip.com/SWLibraryWeb/product.aspx?product=OBJ-LAN7500-MAC_OS_X" rel=external>here</a>
, and UFX7000 drivers are available <a href="http://www.microchip.com/SWLibraryWeb/product.aspx?product=OBJ-UFXx000-MAC" rel=external>here</a>
. (The latter link leads to a corrupt image and I've been unable to source a replacement. Thus I've not been able to get USB Graphics to work).</p><p>However, even after installing the LAN7500 drivers the Mac will not detect the network adapter. The reason is HP having changed the vendor and product ids - and this is what you'll manually need to edit:</p><ul><li>Open Terminal, cd /System/Library/Extensions/LAN7500.kext/Contents</li><li>sudo pico Info.plist - find the idProduct and idVendor keys</li><li>Change idProduct to 1351 and idVendor to 1008</li><li>cd back to /System/Library/Extensions and do kextload LAN7500.kext</li></ul><p>The network adapter should now pop up in Network Preferences. Disclaimer: I've only tested this on a Mavericks late 2013 Macbook Pro Retina. I'm assuming it'll work on many more configurations. (This post will be edited once/if I get USB Graphics working as well)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2014-06-18:/posts/use-an-hp-compaq-l2311c-with-mac/</guid>
                        <link>https://blog.troed.se/posts/use-an-hp-compaq-l2311c-with-mac/</link>
                        <atom:link href="https://blog.troed.se/posts/use-an-hp-compaq-l2311c-with-mac/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 18 Jun 2014 11:29:22 UTC</pubDate>
                        <title>Use an HP Compaq L2311c with Mac</title>
                </item>
                <item>
                        <description><![CDATA[<p>This page describes how a still produced little piece of hardware can add real time clock (RTC) functionality to our old favourite computer systems. In this case it&rsquo;s an Atari STE, but any ST with ROM sockets will work. <strong>Why?</strong> I can&rsquo;t speak for everyone, but personally I&rsquo;ve become quite accustomed to being able to look at file creation dates to see when I worked on what. It&rsquo;s not something that bothered me too much 25 years ago when I used my Ataris extensively - although I did acquire a TimeKey cartridge a little while later. Also - it&rsquo;s just good fun to extend the old machines for nostalgic reasons.</p><p><strong>How - hardware:</strong> Maxim Integrated has a series of ICs named <a href=http://www.maximintegrated.com/datasheet/index.mvp/id/2638 rel=external>Dallas 1216x</a>
- where x denominates whether they&rsquo;re intended for use in RAM or ROM situations, and the amount of pins. For the Atari ST line of computers, the easiest way to add the ICs to the systems is either through a cartridge or as a pass-through in an existing ROM socket. Many Atari STEs have their ROM chips already socketed. Depending on the ROM version and whether they&rsquo;ve been upgraded to a later TOS the chips are either 28 pin or 32 pin. The matching Dallas chips are thus the Dallas 1216E or Dallas 1216F version. (Do not try using any of the others - the functionality is very different) The chips are available from various reputable online dealers at a somewhat steep price (~€45). They also seem to be available from slightly more risky sources at much lower prices, although it&rsquo;s possible those would suffer from issues with battery life lengths etc.</p><p>Once you have the IC, removing one of the existing ROM chips is a matter of using a flat screwdriver and carefully nudging it upwards little by little switching sides a few times. All you have to do then is to insert the Dallas chip in the existing socket and re-seat the ROM into the pass-through connector. It will look something like this (maybe less dusty though): <a href=http://blog.troed.se/wp-content/uploads/2014/03/dallas_1216f_mount.jpg rel=external><img src="http://blog.troed.se/wp-content/uploads/2014/03/dallas_1216f_mount.jpg?w=600" alt="Mounted Dallas 1216F"></a>
(Never mind the yellow cables - as can be seen on the ROM chip stickers I have a dual TOS installation and the cables go to a switch)</p><p>I use an HxC Floppy SD emulator myself and haven&rsquo;t tried putting back the internal disk drive. I believe it would still fit, although tight. It&rsquo;s also not important which ROM socket you put the Dallas chip in (HI or LO). With this, the actual hardware installation is done.</p><p>Next up is the software - there&rsquo;s a bit of magic involved in how an RTC inserted into a ROM socket can be accessed by the Atari. <strong>How - software:</strong> The Dallas chips work by closely monitoring the ROM accesses, and if a special hard coded sequence of 64 reads is detected (which will never happen by chance) it&rsquo;s possible to either read out the contents with a further 64 reads - or by reading ROM in a different way write to the chip. Luckily for us, Bill Penner wrote a software suite back in the late 90s that contains a graphical configuration program as well as a clock display .acc and a program meant to go into an AUTO folder setting the correct time and date in TOS at boot. It&rsquo;s downloadable from various places, including <a href=http://storage.atari-source.org/atari/mirrors/kurobox.serveftp.net/utilities/clocks/ rel=external>here</a>
.</p><p>Unfortunately, even though the release history says it&rsquo;s Y2K-fixed, neither I nor the person I bought my Dallas chip from were able to get the boot program working as it should. The year became 20<strong>28</strong>, even though the .acc and the configuration program displayed everything correctly. This is well known as the Atari TOS Y2K problem, where year 2,000 and later are unable to be set and retrieved by TOS.</p><p>Enter Ingo Linkweiler, who early in the year 2,000 released a <a href=http://www.bygjohn.fsnet.co.uk/atari/y2k.html#xbiospatch rel=external>software TOS fix</a>
that works by intercepting calls to two TOS routines (datetime set and get) and wind them 20 years back and forth making it possible for TOS to work fine again up until the year 20<strong>20</strong>. It&rsquo;s likely, although I didn&rsquo;t try, that the AReal boot program would work if Ingo&rsquo;s Y2K fix had been run beforehand.</p><p><strong>How - Troed:</strong> So, since the main reason why I&rsquo;m playing around with old Ataris isn&rsquo;t purely for nostalgia, but because it&rsquo;s a nice system to write low level code on - I realised there was something here that I could do. While the configuration program in AReal works perfectly to set the time in the Dallas RTC - apparently at least I had the need for a utility that not only initialised the TOS clock to its values at boot, but did so in a Y2K compatible way.</p><p>Additionally, I dislike having to create AUTO folders and take care of the order I add programs into them. Attached here is <a href="https://troed.ddns.net/f/0a7f788199/?dl=1" rel=external>Dallas RTC v1.0</a>
- containing not only a replacement boot program for AUTO usage instead of the one in AReal, including a Y2K fix that works up until year 20<strong>30</strong>, but also the same code optimised for small size making it fit into a boot sector (=&lt;480 bytes). By writing this onto your disks (or disk images, as in the case with my HxC Floppy emu) - or using the AUTO program - your Dallas RTC will now be transparently read by your Atari at boot. Have fun - and let me know if you find any bugs! The source code is included, and can also be found at <a href=https://github.com/troed/CLOCK rel=external>Github</a>
.</p><p>/Troed</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2014-03-07:/projects/dallas-rtc-sync-tos-y2k-fix/</guid>
                        <link>https://blog.troed.se/projects/dallas-rtc-sync-tos-y2k-fix/</link>
                        <atom:link href="https://blog.troed.se/projects/dallas-rtc-sync-tos-y2k-fix/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 07 Mar 2014 20:11:24 UTC</pubDate>
                        <title>Dallas RTC sync + TOS Y2K fix</title>
                </item>
                <item>
                        <description><![CDATA[<p>Seasonal Affective Disorder - SAD.
<a href=http://en.wikipedia.org/wiki/Seasonal_affective_disorder rel=external>wikipedia</a></p><p>also known as winter depression, winter blues [&mldr;] or seasonal depression, was considered a mood disorder in which people who have normal mental health throughout most of the year experience depressive symptoms in the winter [&mldr;]</p><p>I've known for years the difference in how happy I am during the warm nice summer, short as it is in Sweden, and the slightly more introvert and quiet me during the long dark winter months. It's been part of my personality for as long as I can remember, and I guess I never gave it much thought. Until a few years ago. Thanks to people close to me I realised that this didn't just affect me - it affected them as well. I even found myself having made some very bad life choices at times that seems to have been a direct result of a very negative outlook of the future - and they all correlated with late autumn/winter.</p><p>Now I'm a person of a very positive mindset and consider everything that happens in life to be part of the experiences that make up who I am. However, having understood the way my SAD - because that's what it is - caused negativity around me I decided to take action. I had learned to live with it, to hibernate through the winter, but that's no reason to force the same upon others.</p><p>Since two months back I'm on so-called anti depressants, SSRIs. And besides the quite interesting swings between ecstasy and utter boredom that are known side effects at the start of the treatment, I've now gotten <em>myself</em> back even though we just hit the darkest part of the year. Almost 10% of the population in Sweden suffer from SAD to some extent. The number is easily verified by just going through the Facebook updates by friends of mine - yet I almost never see anyone talking about it, or getting treatment.</p><p>I'm a migraine basket case. When I suffer from a migraine attack I become a horrible person - extremely irritable. Luckily I've found medication that works and I wouldn't consider for a second not taking it when I'm in the situation of others having to interact with me. I posit there's no sane reason for thinking about SAD medication differently. Besides the social stigma of yesteryear where "sickness of the mind" was something to be ashamed of - of course - but <a href=http://imgur.com/gallery/CWFTYoV rel=external>we're a lot more enlightened than that today</a>
. Aren't we?</p><p>Oh and btw - if SSRIs happen to <a href="http://www.scientificamerican.com/article.cfm?id=unraveling-the-mystery-of-ssris-depression" rel=external>contribute to increased neurogenesis and synaptogenesis</a>
I'll likely continue taking them all year round ;_)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2013-12-23:/posts/r-u-sad/</guid>
                        <link>https://blog.troed.se/posts/r-u-sad/</link>
                        <atom:link href="https://blog.troed.se/posts/r-u-sad/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 23 Dec 2013 12:36:08 UTC</pubDate>
                        <title>R U SAD?</title>
                </item>
                <item>
                        <description><![CDATA[<p><strong>All software contain bugs. All complex software contain numerous bugs. Some of those bugs are security holes.</strong></p><p>When you hear that a software vendor has found and fixed a security problem that means that somehow that specific bug came up on someone&rsquo;s radar. People who find these holes for a living, and there are quite a few, sell them to others who then exploit them to create massive botnets, extract credit card information from unsuspecting users or in some cases try to attack online banking accounts. A regular "zero day" exploit into a computer system connected to the Internet <a href=http://www.forbes.com/sites/andygreenberg/2012/03/23/shopping-for-zero-days-an-price-list-for-hackers-secret-software-exploits/ rel=external>can be sold for tens of thousands of dollars</a>
making it a worthwhile occupation for crackers.</p><p>However, while many regular computer users have had their computers taken over it&rsquo;s often not something they themselves notice. If their system it&rsquo;s just used for drive by DDoSing as part of a botnet, encrypted communication forwarding in a virus control protocol or activities otherwise not disturbing their normal computer usage, they have no reason to ponder the fact that any Internet computer system can be broken into. Even if their <a href=http://www.technewsdaily.com/2722-when-online-accounts-are-robbed-should-banks-pay.html rel=external>online banking account gets accessed</a>
the banks replace the balance, sometimes without the customer even knowing, since it&rsquo;s worse for their reputation having to admit security problems.</p><p>Crackers, on their part, are content with selling exploits on the black market for regular fixed prices. Until Bitcoin. A fully digital currency, kept either stored on a regular Internet connected home computer, mobile Internet device or with a cloud service provider is a much more juicy target for a security exploit finding cracker. No profit taking middle men, no traceable transactions in regular national currencies and with the possibility to target many such wallets in a very short time.</p><p><strong>All software contain bugs. All complex software contain numerous bugs. Some of those bugs are security holes.</strong></p><p>I&rsquo;m a Bitcoin proponent. I support decentralisation and the removal of the banking and finance tax on human to human monetary transactions. I do have a strong background in computer security though and the above argument has me worried as a serious hindrance to Bitcoin adoption. In short, the only reason you currently still have control over your bitcoins isn&rsquo;t because you&rsquo;re better at keeping them safe compared to everyone else - it&rsquo;s because no one has made you a target. Yet.</p><p>(Yes I&rsquo;m aware of the concept of brain and/or paper wallets - but the currency of the Internet still has to surface when a transaction is to be made and an exploited system could well switch out the target of that transfer then)</p><p>I believe, if Bitcoin continues to gain general acceptance, we&rsquo;ll see for the first time since computers became a household item an awareness of just how insecure such systems really are. It&rsquo;s not a fault of Bitoin - its protocol still hasn&rsquo;t been broken - but a fact of complex software. The only solution is to completely redesign our current computing paradigm. Yeah that will happen.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2013-04-19:/posts/bitcoin-pulling-the-curtains-on-computer-security/</guid>
                        <link>https://blog.troed.se/posts/bitcoin-pulling-the-curtains-on-computer-security/</link>
                        <atom:link href="https://blog.troed.se/posts/bitcoin-pulling-the-curtains-on-computer-security/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 19 Apr 2013 20:24:49 UTC</pubDate>
                        <title>Bitcoin - pulling the curtains on computer security</title>
                </item>
                <item>
                        <description><![CDATA[<p><a href="https://bitcointalk.org/index.php?board=77.0" rel=external>Bitcoin press</a>
has gone through the roof in the last few weeks. So has <a href=http://bitcoincharts.com/charts/mtgoxUSD#tgMzm1g10zm2g25 rel=external>the exchange rate</a>
between traditional currencies and bitcoins - a fact that has seen as many different explanations as I've seen people wrapping their heads around the Bitcoin concept and writing about it.</p><p>One of the explanations is that there's a cap on the number of bitcoins that will ever be produced - 21 million (divisible to eight decimals). While <a href=https://en.bitcoin.it/wiki/Controlled_supply rel=external>the rate</a>
at which bitcoins are produced right now makes the currency inflationary, speculation on future worth combined with the influx of people wanting to hold or use the currency can be said to have already brought out its deflationary aspects.</p><p>Some predict <a href=https://medium.com/money-banking/2b5ef79482cb rel=external>doom and gloom</a>
because of that deflation, essentially proclaiming that a currency that cannot expand, <em>inflate</em>, with the economy will cause it to contract instead - putting a stop to investments when they're deemed necessary.</p><p>There's a different tack to that argument. In an inflationary economy, like the one we all live in, <em>money in the bank</em> becomes less worth over time. The interest rate I'm currently paid on my savings is less than the rise in the consumer purchase index, effectively meaning that there's pressure on me to spend that money sooner rather than later.</p><p>(A argument that I should "invest" my money is a fallacy. Since it's been <a href="http://www.nytimes.com/2011/10/23/magazine/dont-blink-the-hazards-of-confidence.html?pagewanted=all&_r=0" rel=external>statistically proven</a>
that financial managers aren't able to outperform chance the best you can do is to place money in no-fee index funds - which over time should keep up with inflation. Investments more narrow than that carry higher risk - like betting in a casino. But I digress .. )</p><p>A Bitcoin economy on the other hand, when it's large enough for the regular ups and downs to lessen in magnitude, is one where I would expect my savings to grow in value over time. Thus there's pressure on me to only spend money when I really need to.</p><p>It thus seems Bitcoin is the solution to wasteful <a href=https://en.wikipedia.org/wiki/Consumerism rel=external>Consumerism</a>
, making it well placed to be at the centre of discussions on <a href=http://en.wikipedia.org/wiki/Sustainability rel=external>Sustainability</a>
. That cannot be a bad thing.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2013-04-09:/posts/sustainable-economics/</guid>
                        <link>https://blog.troed.se/posts/sustainable-economics/</link>
                        <atom:link href="https://blog.troed.se/posts/sustainable-economics/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Tue, 09 Apr 2013 15:52:18 UTC</pubDate>
                        <title>Sustainable economics</title>
                </item>
                <item>
                        <description><![CDATA[<p>As I&rsquo;m writing this, I have 20 tabs open in my web browser. Of those, the five latest are newly opened and temporary part of things I&rsquo;m currently researching.</p><p>15 tabs are fixed, they&rsquo;re always the same. Those tabs contain the websites I visit everyday, my most important windows into the Internet. Controlling one of those tabs means you control 1/15th of the information flow I receive every day - I can&rsquo;t think of a more important pathway for any company to fight for.</p><p>Google, a company that currently owns four of those tabs, <a href=http://googlereader.blogspot.se/2013/03/powering-down-google-reader.html rel=external>announced</a>
that they&rsquo;re giving up on one of them today. It&rsquo;s either a sign of just how ubiquitous your business is anyway, or a very bad strategic decision. I guess time will tell - <a href=http://inside.flipboard.com/2013/03/14/weve-got-your-rss-covered-save-your-google-reader-feeds-now/ rel=external>it looks like</a>
a service that previously had no mindshare with me might get to take over.</p><p>This particular ocean is <a href=http://en.wikipedia.org/wiki/Blue_Ocean_Strategy#Blue_ocean_strategy_vs._red_ocean_strategy rel=external>red</a>
.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2013-03-14:/posts/tabs-the-most-valuable-screen-real-estate/</guid>
                        <link>https://blog.troed.se/posts/tabs-the-most-valuable-screen-real-estate/</link>
                        <atom:link href="https://blog.troed.se/posts/tabs-the-most-valuable-screen-real-estate/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 14 Mar 2013 08:21:47 UTC</pubDate>
                        <title>Tabs - the most valuable screen real estate</title>
                </item>
                <item>
                        <description><![CDATA[<p>A report from the World Bank is making rounds in media today. While portraying catastrophic scenarios, it contains no new actual research and is simply extrapolating statistical possibilities. Unfortunately the <a href=http://www.sydsvenskan.se/varlden/mycket-varmare-vader/ rel=external>media headlines</a>
aren't really reflecting the content - not unusual regardless of the topic.</p><p>However, it does give me an opportunity to post about some actual research that has taken place since the last IPCC report, while we wait for the new one to come out next year. The focus is on Scandinavia, both since I live here as well as it being one of the places where extensive climate proxies exist.</p><p>(Most Swedes know that in our recent history the climate has been both a lot colder as well as nice and balmy. We have no reason to believe our climate should stabilize)</p><blockquote><p>“The level of warmth during the peak of the MWP (Medieval Warm Period) in the second half of the 10th century, equaling or slightly exceeding the mid-20th century warming, is in agreement with the results from other more recent large-scale multi-proxy temperature reconstructions.”</p><p>- <em>B. Christiansen and F. C. Ljungqvist</em>, <a href=http://www.clim-past.net/8/765/2012/cp-8-765-2012.html rel=external>The extra-tropical Northern Hemisphere temperature in the last two millennia: reconstructions of low-frequency variability</a>
, <em>Climate of the Past</em></p></blockquote><blockquote><p>&ldquo;The record provides evidence for substantial warmth during Roman and Medieval times, larger in extent and longer in duration than 20th century warmth.&rdquo;</p><p>-  _Esper et. al, _<a href=http://www.wsl.ch/fe/landschaftsdynamik/dendroclimatology/Publikationen/Esper_etal.2012_GPC rel=external>Variability and extremes of northern Scandinavian summer temperatures over the past two millennia</a>
, <em>Global and Planetary Change</em></p></blockquote><p>And maybe one of the more interesting ones. This is an updated reconstruction by Briffa, famous for having authored <a href=http://climateaudit.org/2012/05/06/yamal-foi-sheds-new-light-on-flawed-data/ rel=external>one of the hockey sticks</a>
used by the IPCC. Apparently the stick has now disappeared.</p><blockquote><p>Some previous work found that MXD and TRW chronologies from Torneträsk were inconsistent over the most recent 200 years, even though they both reflect predominantly summer temperature influences on tree growth. We show that this was partly a result of systematic bias in MXD data measurements and partly a result of inhomogeneous sample selection from living trees (modern sample bias). We use refinements of the simple Regional Curve Standardisation (RCS) method of chronology construction to identify and mitigate these biases. The new MXD and TRW chronologies now present a largely consistent picture of long-timescale changes in past summer temperature in this region over their full length, indicating similar levels of summer warmth in the medieval period (MWP, c. CE 900–1100) and the latter half of the 20th century.</p><p>- T. M. <em>Melvin, H. Grudd and K. R. Briffa</em>, <a href=http://hol.sagepub.com/content/early/2012/10/26/0959683612460791.abstract rel=external>Potential bias in &lsquo;updating' tree-ring chronologies using regional curve standardisation: Re-processing 1500 years of Torneträsk density and ring-width data</a>
<em>, The Holocene</em></p></blockquote><p>I'm quite Popperian when it comes to science. Feel free to voice hypotheses, but if they're falsified they need to be scrapped and new ones looked into. There are many competing explanations as to how and why the climate on Earth changes and we're not doing society a favor by only talking about one of them.</p><p>Especially when the actual science does not support the hyperbole.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2012-11-19:/posts/climate-variability-in-northern-europe/</guid>
                        <link>https://blog.troed.se/posts/climate-variability-in-northern-europe/</link>
                        <atom:link href="https://blog.troed.se/posts/climate-variability-in-northern-europe/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 19 Nov 2012 13:00:22 UTC</pubDate>
                        <title>Climate variability in Northern Europe</title>
                </item>
                <item>
                        <description><![CDATA[<blockquote><p>An availability cascade is a self-sustaining chain of events, which may start from media reports of a relatively minor event and lead up to public panic and large-scale government action. On some occasions, a media story about a risk catches the attention of a segment of the public, which becomes aroused and worried. This emotional reaction becomes a story in itself, prompting additional coverage in the media, which in turn produces greater concern and involvement. The cycle is sometimes sped along deliberately by &ldquo;availability entrepreneurs,&rdquo; individuals or organizations who work to ensure a continuous flow of worrying news. The danger is increasingly exaggerated as the media compete for attention-grabbing headlines. Scientists and others who try to dampen the increasing fear and revulsion attract little attention, most of it hostile: anyone who claims that the danger is overstated is suspected of association with a &ldquo;heinous cover-up.&rdquo; The issue becomes politically important because it is on everyone&rsquo;s mind, and the response of of the political system is guided by the intensity of public sentiment. The availability cascade has now reset priorities. Other risks, and other ways that resources could be applied for the public good, all have faded into the background.</p></blockquote><p>- excerpt from <em>Thinking fast and slow</em>, by the psychologist and Nobel laureate Daniel Kahneman</p><blockquote><p>Speaking for many scientists and engineers who have looked carefully and independently at the science of climate, we have a message to any candidate for public office: There is no compelling scientific argument for drastic action to &ldquo;decarbonize&rdquo; the world&rsquo;s economy. Even if one accepts the inflated climate forecasts of the IPCC, aggressive greenhouse-gas control policies are not justified economically.</p></blockquote><p>- <a href=http://online.wsj.com/article/SB10001424052970204301404577171531838421366.html rel=external>opinion piece</a>
in the Wall Street Journal, underwritten by 16 scientists.</p><p>(This post brought to you by the confirmation-bias-department)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2012-01-28:/posts/availability-cascades/</guid>
                        <link>https://blog.troed.se/posts/availability-cascades/</link>
                        <atom:link href="https://blog.troed.se/posts/availability-cascades/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 28 Jan 2012 20:39:03 UTC</pubDate>
                        <title>Availability cascades</title>
                </item>
                <item>
                        <description><![CDATA[<p>In the spring of 2008 I sat in the audience at Web 2.0 Expo in San Francisco, watching Clay Shirky on stage. <a href=http://blip.tv/file/855937 rel=external>His talk</a>
about the cognitive heat sink, on how television had disrupted humanity from spending large parts of our time on being creative, on producing things we wanted to produce, to being simple receivers of information pre-packaged by someone else made a huge impact.</p><p>Shirky compared the amount of hours we spend watching TV with projects like Wikipedia, and hinted at a future where instead of watching TV we would use our creativity to create other projects like it. Of course, if you recognize the argument, it's what later became Shirky's latest book - <a href=http://en.wikipedia.org/wiki/Cognitive_Surplus rel=external>Cognitive Surplus</a>
.</p><p>I've used it to good effect in my own presentation series over the last few years and in a world where we see a <a href=http://millennialmarketing.com/2010/06/tv-viewing-habit-shifts-generational-or-just-age-related/ rel=external>whole generation watching less and less TV</a>
and <a href=http://www.sethgodin.com/sg/books.asp rel=external>Linchpins</a>
eager to put the available creativity to good use - what do we do?</p><p>Well. Apparently we spend over 3 million hours each day <a href=http://thenextweb.com/apps/2011/02/16/angry-birds-gamers-spend-200-million-minutes-playing-each-day/ rel=external>launching birds into pigs</a>
. Gaming is, however, a lot better for our creativity than TV.</p><p>One of the more creative of games, <a href=https://profiles.google.com/tsangberg/posts/J8PdaRBqw2x rel=external>being compared</a>
to <a href=https://twitter.com/#!/mygdal/status/67638666855596032 rel=external>playing with Lego</a>
, is <a href=http://www.minecraft.net/ rel=external>Minecraft</a>
. It's a sandbox game, where it would be difficult to describe what if anything the real purpose of the game is. It's also actively played socially together with others, making it participatory.</p><p>Lego is said to have been the <a href=http://ucengineer.wordpress.com/2008/05/24/can-legos-and-a-sandbox-create-an-engineer-read-to-find-out/ rel=external>inspiration</a>
for many future engineers - I'm one myself. <a href=http://blog.troed.se/wp-content/uploads/2011/05/village.png rel=external>![Minecraft village](http://blog.troed.se/wp-content/uploads/2011/05/village.png "village")</a></p><p>These games can be quite addictive as shown by Minecraft's moniker "<a href="http://www.urbandictionary.com/define.php?term=Minecrack" rel=external>minecrack</a>
", and that might be slightly worrying. If we go back to pre-digital times, no matter what our creativity was used for it's likely it was something physical that lived on when we ourselves moved on to other things.</p><p>We recognize a lot of these creative works as art today, antiques, items that sometimes furthered society. Digital creativity - <em>value</em> - in <a href=http://en.wikipedia.org/wiki/Entropia_Universe#Significant_events_and_virtual_property_sales rel=external>virtual worlds</a>
only exists for as long as we keep that digital world alive.</p><p>When the next thing comes along, when I stop creating huge (and time consuming) beautiful structures in Minecraft, they're gone - forever. True, this is the same with a non-digital sandbox or toys like Lego, but these games are played by the adult population to a much higher degree.</p><p>Being a futurist, I love doing projections. Since my answer to the common motivator "Think outside the box!" is <em>-What box?</em> I also sometimes explore boundary conditions by taking projections to their extreme.</p><p>One answer to <a href=http://en.wikipedia.org/wiki/Fermi_paradox rel=external>Fermi's paradox</a>
is that all sufficiently advanced civilizations spend all their time doing virtual exploration and work inside simulations. Back to reality - I love Shirky's argument. I'm slightly worried we're spending our newfound creativity surplus on things that only have fleeting purpose though, satisfying our neural pathways for the moment but with a bitter aftertaste.</p><p>The current buzz du jour is <a href=http://en.wikipedia.org/wiki/Gamification rel=external>Gamification</a>
, and maybe that's a solution. Make the real world more game like. _(If we're sufficiently advanced, maybe it already is) _</p><p><a href=http://flattr.com/thing/269597/Creativity-surplus-as-virtual-work rel=external>![Flattr this](http://api.flattr.com/button/flattr-badge-large.png "Flattr this")</a></p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2011-05-11:/posts/creativity-surplus-as-virtual-work/</guid>
                        <link>https://blog.troed.se/posts/creativity-surplus-as-virtual-work/</link>
                        <atom:link href="https://blog.troed.se/posts/creativity-surplus-as-virtual-work/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 11 May 2011 11:17:46 UTC</pubDate>
                        <title>Creativity surplus as virtual work</title>
                </item>
                <item>
                        <description><![CDATA[<p>Följande text skrev jag den 5e september 2003 för eventuell publikation i en svensk tidning. Såvitt jag kommer ihåg skedde aldrig det, och eftersom jag nyligen oväntat stötte på den på en gammal del av hårddisken återpublicerar jag den här nu. Man kan tycka att den är väldigt aktuell med tanke på att straffskatten på inspelningsbar media - hårddiskar m.m - <a href=http://www.idg.se/2.1085/1.361898/galen-straffskatt-ger-prischock-pa-harddiskar rel=external>höjs igen den 1e april</a></p><blockquote><p>I veckan som gick annonserade Universal ut att de ska sänka priserna på CD-skivor. Detta skapade enorma rubriker, och kommentarerna har genomgående varit att äntligen har musikbolagen förstått. Det har alltid sagts att just höga priser orsakat den utbredda piratkopieringen - iaf av de som själva kopierar.</p><p>Tidigare i somras slog sig den amerikanska musikbranschorganisationen RIAA för bröstet och utropade en delseger i kampen mot den illegala kopieringen av musik på nätet - tydligen har antalet musikbytare minskat med nästan en tredjedel från april till juni. Enligt RIAA berodde en stor del av detta på att de börjat dra enskilda musikbytare inför domstol.</p><p>Logiskt sett borde detta leda till ökad skivförsäljning. Musikbolagen har alltid sagt att det är det enkla utbytet av musik på nätet som orsakat minskad försäljning. För att detta ska vara sant ska alltså försäljning av musik på fysisk media gått upp under samma period.</p><p>Inte.</p><p>En analytiker noterade i veckan att även om antalet personer som synligen byter musik på nätet minskat, så har minskningen av antalet sålda skivor som pågått sedan Napsters storhetstid accelererat under samma period - tvärtemot vad som borde hänt om den förhärskande tesen att kopiering av musik på nätet har en direkt koppling till antalet sålda skivor skulle vara sann.</p><p>Så hur kommer det sig att Universal går ut och sänker priset på skivorna? Det skulle krävas en stor ökning av antalet sålda skivor för att sänkningen ska betala sig. Visst vore det enklare om musikbolagen istället kunde ta ut någon form av skatt av alla i världen oavsett om de kopierade musik, köpte musik eller ens lyssnar på musik istället?</p><p>Det är precis vad de gör. Redan 1999 började flera länder - däribland Sverige - införa en extra avgift på inspelningsbart media. Den extra avgiften går oavkortat till musikbranschen, oavsett om de tomma CDR-skivorna du köper ska användas i backupsyfte eller bränna musik på.</p><p>Det är den mest geniala affärsidé jag vet.</p><p>Troed Sångberg, 2003-09-05</p></blockquote>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2011-01-05:/posts/varldens-basta-affarside/</guid>
                        <link>https://blog.troed.se/posts/varldens-basta-affarside/</link>
                        <atom:link href="https://blog.troed.se/posts/varldens-basta-affarside/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 05 Jan 2011 11:50:28 UTC</pubDate>
                        <title>Världens bästa affärsidé</title>
                </item>
                <item>
                        <description><![CDATA[<p>Swedish news papers are launching digital versions on Apple's iPad - and seem to be <a href=http://www.sydsvenskan.se/kultur-och-nojen/article1316934/Tidningar-far-bita-i-det-sura-applet.html rel=external>somewhat surprised</a>
that they're now going to have to comply with a set of rules that are very different from what they're usually operating under.</p><p>Spotify's music library reflects a <a href=http://open.spotify.com/track/5ynWvN3bQymHVThxutO4hG rel=external>specific set of values</a>
, morality and legal system no matter where the listeners are and what they expect. Citizens used to having rights according to their chosen nation state find that when they move more and more of their lives onto the digital arena those rights are replaced with Terms of Services that reflect <a href=http://twitter.com/#!/wikileaks/status/10073870316863488 rel=external>corporate and cultural values</a>
.</p><p>One solution would be to move backwards, to create digital nation states accurately reflecting the nation states of our physical presence. We could even pretend we're travelling between such digital nation states when using different Internet services, but it's not likely we would accept the shift in legal system and cultural values implicitly while still sitting behind our desk at home.</p><p>There seems to be no easy solution to the fact that we have created a single global digital nation everyone can access where it's impossible, not to say unwanted, that a single (or multiple of) nation state can <a href=http://googlepublicpolicy.blogspot.com/2010/12/making-copyright-work-better-online.html rel=external>enforce</a>
their cultural values and laws.</p><p>Another aspect of the current situation is to describe it as corporations (though still bound by the nation state they're operating from) having created their own digital nation states with laws and values - Terms of Services - where being a citizen of the state of Facebook is different from being a citizen of the state of 4chan.</p><p>The Internet has been in public use for about fifteen years. During the next ten we'll become connected in real time, outsourcing both our <a href=http://www.hplusmagazine.com/articles/neuro/porting-digital-memory rel=external>memory</a>
and <a href=http://googlesystem.blogspot.com/2010/08/eric-schmidt-on-future-of-search.html rel=external>decision making</a>
to external services not bound to a single physical location.</p><p>At no point in history have so many people changed their culture of moral values as quickly as will be needed now. It'll be interesting, to say the least. It will also likely become <a href=http://en.wikipedia.org/wiki/The_Clash_of_Civilizations rel=external>very ugly</a>
.</p><p><a href=http://flattr.com/thing/95795/What-does-a-digital-nation-state-look-like rel=external>![Flattr this](http://api.flattr.com/button/flattr-badge-large.png "Flattr this")</a></p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2010-12-03:/posts/what-does-a-digital-nation-state-look-like/</guid>
                        <link>https://blog.troed.se/posts/what-does-a-digital-nation-state-look-like/</link>
                        <atom:link href="https://blog.troed.se/posts/what-does-a-digital-nation-state-look-like/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 03 Dec 2010 10:28:45 UTC</pubDate>
                        <title>What does a digital nation state look like?</title>
                </item>
                <item>
                        <description><![CDATA[<p>A few months ago I had to give up using my Mac Mini as my primary personal computer.</p><p>I couldn&rsquo;t put my finger on when, but looking back I realized it had gotten slower and slower to use since the day of purchase, and while I could understand that having two users logged on all the time while running a few services could tax a 3GB system I wasn&rsquo;t happy with it becoming completely unresponsive for several seconds - sometimes minutes (!) - from what I would consider normal usage.</p><p>Some call it <a href=http://en.wikipedia.org/wiki/Spinning_wait_cursor rel=external>beach ball hell</a>
- I statement I wholeheartedly agreed with.</p><p>Yesterday I stumbled upon <a href="http://forums.macrumors.com/showthread.php?t=377014" rel=external>the solution</a>
, and it was a whole lot cheaper than buying a new and improved model (since the old computer was constantly thrashing the hard drive I figured I needed more memory, something my 2007 model was already maxed out of) or replacing the built in hard drive with an <a href=http://en.wikipedia.org/wiki/Solid-state_drive rel=external>SSD</a>
.</p><p>While researching something else I saw blog posts where people mentioned having seen <a href=http://en.wikipedia.org/wiki/Spotlight_%28software%29 rel=external>Spotlight</a>
having a hard time indexing files that undergo frequent change, and that it while doing so seemed to consume an excessive amount of real and virtual memory.</p><p>The proposed solution was simple - use the Spotlight Privacy setting to exclude the offending files/folders from indexing. So I did, and my Mac Mini is now as happy as the day I bought it.</p><p>There was no problem with dual users and several services functioning well on a 3GB system. The problem was with poorly written indexing software, and I find myself adding more and more parts of my system to the exclude list (external disks - check. app databases - check. logs - check. app preferences - check) and for each addition the virtual and real memory usage of the mds process drops.</p><p>Come to think of it, the only thing I ever use Spotlight for is as an easy way to launch applications. I feel an include list instead of an exclude list would be better usability, something Apple is claimed to be good at.</p><p>The default behaviour - indexing everything - seems to be the reason why the search phrase <a href="http://www.google.com/search?q=mds+process" rel=external>mds process</a>
returns a long list of experiences similar to mine. Maybe more posts like this can shorten that list.</p><p>So far it doesn&rsquo;t seem Apple has come to the rescue.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2010-10-18:/posts/deflated-beach-ball/</guid>
                        <link>https://blog.troed.se/posts/deflated-beach-ball/</link>
                        <atom:link href="https://blog.troed.se/posts/deflated-beach-ball/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 18 Oct 2010 11:11:52 UTC</pubDate>
                        <title>Deflated beach ball</title>
                </item>
                <item>
                        <description><![CDATA[<p>Idag lät Sydsvenskan <a href=http://www.sydsvenskan.se/sverige/article1208729/Karate-Kid-katastrof-pa-annonspelarna-.html rel=external>ungdomar bedöma valaffischer</a>
- vilket en del verkar förlöjliga eftersom ungdomspanelen så tydligt uttrycker helt andra åsikter än de politiskt rationella i sina val. Ungdomarna har dock så klart rätt, det är precis så irrationellt - emotionellt - vi bedömer den typen av korta budskap. Eftersom jag nyligen läst en alldeles utmärkt bok på området, <a href=http://www.bokus.com/bok/9780099505693/made-to-stick/ rel=external>Made to Stick</a>
, gick jag själv genom affischerna och blev lite överraskad över hur dåligt underlag några av partierna måste ha bakom sina budskap. Jag sågade raskt fyra partier och ansåg att <a href=https://twitter.com/troed/status/21837500711 rel=external>endast tre stycken</a>
gjort ett någorlunda bra jobb enligt min tolkning av bokens metodik. Notera, jag värderar här inte alls de faktiska sakfrågorna. Eftersom min uppfattning var att <a href=http://wiki.piratpartiet.se/Kampanjmaterial/lista rel=external>det material</a>
vi lagt ut i Piratpartiet inte tillhörde vinnarna valde jag i god piratanda att börja <a href=http://rickfalkvinge.se/2009/03/02/skammes-tamejfan-dn/ rel=external>delta</a>
. Det här bloginlägget är sprunget ur de två foruminlägg jag gjorde på piratwebben, och jag återpostar det här mest för att samla de spridda kommentarer jag postade under dagen där och på Twitter.</p><blockquote><p>Jag läste nyligen &ldquo;Made to Stick&rdquo; (av bröderna Heath) och rekommenderar den starkt till alla som är intresserade av att syssla med kampanjmaterial. Den går bl.a genom hur människor reagerar irrationellt på budskap vilket är väldigt bra att ha i åtanke då vi gärna försöker koncentrera oss på att uttrycka oss rationellt när vi kommunicerar - vilket alltså riskerar att bli väldigt fel. Roligt nog är vi ganska rätt ute med många gamla slagdängor, även om jag vid en snabb genomgång saknar dem i valaffischer m.m. &ldquo;Piratpartiet - för dig som gillar Internet&rdquo; är t.ex klockren enligt bröderna Heath, men flygbladet &ldquo;Piratpartiet bygger kunskapssamhället&rdquo; är - enligt min tolkning av vad de skriver - mer i riskzonen att uppfattas negativt.</p></blockquote><p>&mldr; om jag hade låtit det stanna med ovanstående hade jag dock skämts, det är alldeles för billigt att bara be andra att läsa på och sedan inte bidra med mer själv, så det inlägget följdes raskt av <a href="http://vbulletin.piratpartiet.se/showthread.php?t=28784" rel=external>ett längre</a>
i en annan del av forumet:</p><blockquote><p>För att inte bara tipsa utan även göra ägnade jag några minuter åt att fundera på något mer slagkraftiga saker som sätter sig och som, så vitt jag kan se, mer följer tankarna som bröderna Heath lägger fram. Till stor del koncentrerar jag mig på att nå fram emotionellt (rationella budskap har inget på valaffischer att göra), avskalat och med någon form av ögonbrynshöjning och gärna åsyftande till grupptillhörighet. (Wikipedia har en sammanfattning av deras modell här: <a href=http://en.wikipedia.org/wiki/Made_to_Stick rel=external>http://en.wikipedia.org/wiki/Made_to_Stick</a>
) Förslag, och i den mån någon annan tidigare skrivit exakt likadant och jag minns det omedvetet är det självklart den personen som ska ha all credit.</p><ul><li><strong>Piratpartiet - för dig som gillar Internet</strong></li><li><strong>Piratpartiet - vilken generation tillhör du?</strong></li><li><strong>De pratar, vi agerar, du röstar [Piratpartiet]</strong></li><li><strong>Piratpartiet - Internets politiska gren</strong></li></ul><p>[release often, release early - mer kanske kommer] Egna kommentarer: Jag trodde den första var en klockren stöld, men en exakt sökning gav inga resultat. Måhända skriver jag &ldquo;dig&rdquo; där andra skrivit &ldquo;oss&rdquo; - det är medvetet för identifikation. Ang. generation - skapa grupptillhörighet. Det är &ldquo;vi mot dem&rdquo; - och vi vet redan att vi är stora i ungdomsgruppen, och det är de som enklast identifierar sig med &ldquo;vilken generation&rdquo;. Gillar den tredje mindre bra. Det är grupptillhörighet och &ldquo;vi mot dem&rdquo; samt &ldquo;sticking it to the man&rdquo;. Fyran har jag blivit utskälld för när jag först postade den på Slashdot (i engelsk version). Alla anser inte att Piratpartiet pratar för hela Internet, men det är helt irrelevant i det här sammanhanget. Det är slogans och inte ett valmanifest.</p></blockquote><p>&mldr; men jag kände även att jag var tvungen att avslöja varför jag plötsligt började posta om något nu som jag är fullt medveten om hade passat bättre för några månader sedan:</p><blockquote><p>&mldr; och till slut, den där kritiken. Jag är &mldr; inte överlycklig över <a href=http://butik.piratpartiet.se/mars2010/korrektur/Affish_2010_spring_b.pdf rel=external>&ldquo;Vi bygger kunskapssamhället&rdquo;</a>
. Det betyder ingenting, vi lockar inte till identifikation (i värsta fall är reaktionen &ldquo;jaha, skoj för er - vad har det med mig att göra?&rdquo; från exakt de som vi tror är vår väljargrupp). Den får mig mest att bli intresserad av att gå med i Hem och skola.</p></blockquote><p>Nåja. Nästa steg borde iaf vara att skapa posters och inte bara textsträngar. <a href=http://the99percent.com/tips/6249/seth-godin-the-truth-about-shipping rel=external>Ship it.</a>
edit: förtydligande ang. icke-värdering av andra partiers sakfrågor</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2010-08-22:/posts/piratpartiet-hem-och-skola/</guid>
                        <link>https://blog.troed.se/posts/piratpartiet-hem-och-skola/</link>
                        <atom:link href="https://blog.troed.se/posts/piratpartiet-hem-och-skola/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 22 Aug 2010 18:10:34 UTC</pubDate>
                        <title>Piratpartiet - för dig som gillar Hem och Skola?</title>
                </item>
                <item>
                        <description><![CDATA[<p>Häromdagen råkade ett svenskt par ut för att någon kopierade ett fotografiskt verk de skapat och använde utan korrekt licens.</p><p>När rättighetsinnehavarna, paret ifråga, kontaktade polisen fick de till svar att <a href=http://www.sydsvenskan.se/sverige/article883038/Deras-barn-fick-nya-foraldrar-pa-Facebook.html rel=external>det inte är brottsligt att använda andras bilder på Internet</a>
. Intressant.</p><p>Även om fotografier har en egen liten lagkonstruktion för att anses nå verkshöjd så skiljer inte upphovsrättslagstiftningen på huruvida saker händer via Internet eller inte, så polisens svar måste kunna anses gälla all form av kopiering av verk - och därmed även musik, filmer m.m.</p><p>Det korrekta svaret är kanske att i polisens värld är upphovsrättslagarna bara till för att skydda stora mediabolag och inte privatpersoner. (Jag har påpekat för Sydsvenskan att det vore mycket intressant att få se dem följa upp frågeställningen, men inte fått något svar.)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2010-05-26:/posts/piratkopiering-lagligt-enligt-polisen/</guid>
                        <link>https://blog.troed.se/posts/piratkopiering-lagligt-enligt-polisen/</link>
                        <atom:link href="https://blog.troed.se/posts/piratkopiering-lagligt-enligt-polisen/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 26 May 2010 18:23:21 UTC</pubDate>
                        <title>Piratkopiering lagligt enligt polisen</title>
                </item>
                <item>
                        <description><![CDATA[<p>Apple might like to polish their user interfaces, but sometimes the logic underneath is &mldr; less polished.</p><p>I've had to transfer large amounts of data from one external USB disk to another today. Running Snow Leopard on an Intel Mac Mini.</p><p>Guess which one of the following graphs show the faster method?
<a href=http://blog.troed.se/wp-content/uploads/20/10/01/osx_finder_file_copy.png rel=external>![](http://blog.troed.se/wp-content/uploads/20/10/01/osx_finder_file_copy.png "osx_finder_file_copy")</a>
<a href=http://blog.troed.se/wp-content/uploads/20/10/01/osx_pathfinder_file_copy.png rel=external>![](http://blog.troed.se/wp-content/uploads/20/10/01/osx_pathfinder_file_copy.png "osx_finder_file_copy")</a></p><p>Apparently OSX Finder does read-to-mem, write-to-disk, read-to-mem, write-to-disk - serially. <a href=http://cocoatech.com/ rel=external>Path Finder</a>
, a replacement, is thus twice as fast since it transfers the data in a synchronous read-write operation.</p><p>(I've also realised that Activity Monitor, from which the above two screen grabs are taken, overstates the transfer rates with almost exactly 2x the actual speed) Bad Apple.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2010-01-25:/posts/not-all-that-shines-is-gold/</guid>
                        <link>https://blog.troed.se/posts/not-all-that-shines-is-gold/</link>
                        <atom:link href="https://blog.troed.se/posts/not-all-that-shines-is-gold/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 25 Jan 2010 19:04:09 UTC</pubDate>
                        <title>Not all that shines is gold</title>
                </item>
                <item>
                        <description><![CDATA[<p>(In Swedish at least for the time being. To view the tweets in English I wrote during the conference, use <a href="http://twitter.com/#search?q=%23ss09%20troed" rel=external>this search</a>
)</p><p>Jag var på <a href=http://www.singularitysummit.com/ rel=external>Singularity Summit 2009</a>
i helgen som gick, och <a href=http://skiften.se/2009/10/05/nar-framtiden-blir-bojd-istallet-for-rak/ rel=external>skiften.se publicerade mina någorlunda hastigt nedskrivna tankar</a>
om det efteråt. Klicka på länken för att läsa ;)</p><p>edit: The <a href=http://www.vimeo.com/siai/videos/sort:oldest rel=external>videos of the presentations</a>
are now available</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-10-08:/posts/singularity-summit-2009-report/</guid>
                        <link>https://blog.troed.se/posts/singularity-summit-2009-report/</link>
                        <atom:link href="https://blog.troed.se/posts/singularity-summit-2009-report/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 08 Oct 2009 19:11:58 UTC</pubDate>
                        <title>Singularity Summit 2009 - report</title>
                </item>
                <item>
                        <description><![CDATA[<p><a href=http://spotify.com rel=external>Spotify</a>
, seen by many as the music service <a href=http://en.wikipedia.org/wiki/Napster rel=external>Napster</a>
should've been and thus would have saved us from the last 10 years of evil piracy, has a darker side to it as well. To understand, let's do some history:</p><p><strong>First</strong>, one of the suggestions from the media industry on how to "solve the piracy problem" (that still hasn't been shown to exist, worth noting) has been to create a "<a href=http://www.broadband-finder.co.uk/blog/2009/01/27/broadband-tax-on-piracy/ rel=external>broadband tax</a>
".</p><p>Everyone should pay for some imagined or real media usage to the existing rights holding companies. I wrote about this in a column several years ago (2003, not linkable), where I referred to it as being "the most brilliant business idea I've ever known". Imagine enacting laws requiring everyone to send money to a private entity that doesn't do any actual work - when you're the entity! (Sadly this is the case in several countries already, like <a href=http://www.cpcc.ca/english/currentTariff.htm rel=external>Canada</a>
and <a href="http://www.copyswede.se/default.asp?ML=10622" rel=external>Sweden</a>
, with a copy-tax on writeable media)</p><p>Naturally, file sharers and non-file sharers (in this blog post, let's pretend that file sharing actually means distributing copyrighted works without proper support by law) <a href=http://www.techdirt.com/articles/2008/1209/01440830_60.shtml rel=external>have been in uproar</a>
with this silly idea. To start with, such a license scheme wouldn't be able to know whom consumed what, and thus wouldn't be able to distribute the eventual income fairly. It would also help to keep an outdated power structure in place (media companies of old actually did advertising, printing of media on physical substrates and costly distribution - including deals with storefronts with regards to shelf space) when it's no longer needed (see; the Internet).</p><p><strong>Secondly</strong>, that same industry fell in love with DRM - Digital Rights Management. Ignoring such things as the <a href=http://en.wikipedia.org/wiki/Fair_use rel=external>intention of law</a>
(in some countries, not-law), suddenly media wasn't something you bought and could re-use or sell yourself (as it had always been), you instead consumed a license that could expire without warning and the things you had bought became worthless. Now, to be fair, thanks to the evil pirates DRM on audio died somewhere around 2007 and I'm projecting the end of DRM on video to begin already in 2009. After all, the world hasn't ended and even some media company executives [children] might want to create their own ringtone from a piece of music they bought every once in a while. It might also help that there indeed were a few <a href=http://arstechnica.com/tech-policy/news/2009/07/big-content-ridiculous-to-expect-drmed-music-to-work-forever.ars rel=external>DRM services that closed up shop</a>
and everyone could see (and some experience) the very real threat of having paid for something that in the end amounted to nothing.</p><p>&mldr; so, let's get back to Spotify.</p><ol><li><p>It's a flat tax (ad-supported or with real money) upon all its users, no matter what they listen to or how much. It's not even a <a href=http://en.wikipedia.org/wiki/Freemium rel=external>freemium</a>
-model if you want it available on your <a href=http://www.spotify.com/en/mobile/overview/ rel=external>mobile</a>
.</p></li><li><p>You pay the equivalent of twelve full albums a year (how many of you have purchased that amount lately?) and end up owning nothing. When Spotify disappears, so will all the music.</p></li></ol><p>Are you surprised that <a href="http://www.pcadvisor.co.uk/news/index.cfm?newsid=120743" rel=external>Spotify is owned by the media industry</a>
, who <a href=http://www.thelocal.se/21246/20090/811/ rel=external>claim to make more profit</a>
out of it than actually selling you the (DRM-free) music available at digital music stores (while [at least one actual musician](<a href=http://torrentfreak.com/id-rather-be-raped-by-pirate-bay-than-go-with-spotify-090813/- rel=external>http://torrentfreak.com/id-rather-be-raped-by-pirate-bay-than-go-with-spotify-090813/-</a>
you know, the ones who create stuff - argues he gets basically nothing)? I'm not. With minor exceptions, Spotify <em>is</em> exactly what they've been trying to accomplish over the last few years. The only surprise is that <a href=http://www.mobile-ent.biz/news/34421/Spotify-80-per-cent-of-our-users-have-stopped-file-sharing rel=external>we seem to love it</a>
. <em>[disclaimer: this blog post was written under the influence of music streamed through Spotify Premium]</em></p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-09-22:/posts/spotify-liberation-or-drm-hell/</guid>
                        <link>https://blog.troed.se/posts/spotify-liberation-or-drm-hell/</link>
                        <atom:link href="https://blog.troed.se/posts/spotify-liberation-or-drm-hell/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Tue, 22 Sep 2009 19:31:16 UTC</pubDate>
                        <title>Spotify - liberation or DRM-hell?</title>
                </item>
                <item>
                        <description><![CDATA[<p>While I&rsquo;m sure I&rsquo;m going to cross post some of the things I write about, the more mobile related posts will appear at <a href=http://blogs.sonyericsson.com/troedsangberg/ rel=external>Sony Ericsson blogs</a>
instead of here.</p><p>I&rsquo;ve kicked off with a post on <a href=http://blogs.sonyericsson.com/troedsangberg/its-not-about-smartphones/ rel=external>It&rsquo;s not about smartphones</a>
- on how some of the new devices on the market differ in their actual usage from what we&rsquo;ve seen before and what that might mean.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-09-02:/posts/another-blog-another-place/</guid>
                        <link>https://blog.troed.se/posts/another-blog-another-place/</link>
                        <atom:link href="https://blog.troed.se/posts/another-blog-another-place/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Wed, 02 Sep 2009 17:24:25 UTC</pubDate>
                        <title>Another blog, another place</title>
                </item>
                <item>
                        <description><![CDATA[<p>A pretty informal study made the global headlines a week back about how <a href=http://www.pearanalytics.com/2009/twitter-study-reveals-interesting-results-about-usage/ rel=external>40% of everything posted to Twitter</a>
amounts to just "pointless babble".</p><p>That conclusion is seriously flawed, and likely stems from a misunderstanding on how humans communicate. Our consciousness has very low bandwidth. Exactly how low is hard to measure, but in <a href=http://www.amazon.com/User-Illusion-Cutting-Consciousness-Penguin/dp/01402 rel=external>The User Illusion</a>
author Tor Nørretranders argues it to be around 16 bits-or-so per second.</p><p>Thus, when humans communicate we do so trying to guess as to how many bits we need to use to get our full message across to another person, and that requires us to share a lot of background information. Tor coined the concept of <em>exformation</em> in that context, the information-not-mentioned but still expected to exist.</p><p>The word <em>trees</em> in the headline referes to the <a href=http://www.flickr.com/photos/davegray/32928 rel=external>trees of talking</a>
that describes this process.</p><p><img src=http://farm4.static.flickr.com/3162/3292821165_b1b53b46c3.jpg alt="Tree of talking at Flickr"></p><p>Now, naturally, not all of us have the same background knowledge. That's culture. You might like Van Gogh, I might like Rembrandt. When discussing art, you need to explain concepts to me that you wouldn't need to when talking to someone who, like you, understands Van Gogh.</p><p>You would need to use more bits, more time, more <em>effort</em>. Twitter is about building exformation as much as it is about communicating information. It might not be seen as valuable and interesting when I read you had a headache yesterday, but in a weeks time when I see on Facebook that you again have a headache it's used as exformation and allows me to better sympathize and ask if everything's really well with you at home or at work.</p><p>Twitter (and Facebook) aren't filled with pointless babble. They're tools helping us building a common culture of exformation thus enabling us to communicate more information using less bits, to more people. We're all our own little <a href=http://money.cnn.com/magazines/fortune/fortune_archive/19 rel=external>Hollywoods</a>
.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-08-27:/posts/twitter-trees-and-culture/</guid>
                        <link>https://blog.troed.se/posts/twitter-trees-and-culture/</link>
                        <atom:link href="https://blog.troed.se/posts/twitter-trees-and-culture/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 27 Aug 2009 12:10:07 UTC</pubDate>
                        <title>Twitter, trees and culture</title>
                </item>
                <item>
                        <description><![CDATA[<p>Here is the text broken up into paragraphs:</p><p>In our daily exposure to science, we&rsquo;ve been told that there exists a quality metric that allows us to distinguish between "bad science" and "good science". Peer review; the concept of scientific works being sent to certain publications, where editors then asks other scientists in (hopefully) related fields for their opinions, and if the paper "passes" it will be published. Some publications are taken to be "better" than others at this, and there&rsquo;s a sense of pride and justification between scientists depending on how many papers, and where, they&rsquo;ve managed to get published through the peer review process.</p><p>The only problem is that peer review seemingly doesn&rsquo;t work, and cannot be used as a quality metric. A good example popped up yesterday, where Michael Mann of the infamous "Mann hockeystick" (seen in Al Gore&rsquo;s movie about global warming), got a <a href=http://www.nature.com/nature/journal/v460/n7/257/full/nature08219.html rel=external>paper</a>
published in the very highly thought of publication Nature. (Subscription required, news article can be found <a href=http://www.nature.com/news/2009/090812/full/news.2009.821.html rel=external>here</a>
)</p><p>What&rsquo;s interesting about this paper, besides it <a href=http://www.noaanews.noaa.gov/stories2009/20090811_tropical.html rel=external>having been contradicted</a>
one day before being published by the National Oceanic and Atmospheric Administration (NOAA) in an equally peer reviewed publication, is that it apparently received harsh critique during the peer review process from at least one reviewer, Chris Landsea. Thankfully, he&rsquo;s sent an open letter to Mann for everyone to read on the subject - search for "open letter" in the comments <a href=http://wattsupwiththat.com/2009/08/13/mann-hockey-sticks-hurricanes-hurricanes-in-the-atlantic-are-more-frequent-than-at-any-time-in-the-last-1,000-years/#comments rel=external>here</a>
(well worth the hassle). Basically, there seems to be no basis for Mann&rsquo;s claims, neither in the published paper nor in the press around it.</p><p>So. We&rsquo;ve apparently got bad science published in a well respected publication, having gone through a peer review process where one of the reviewers in effect stated that the paper didn&rsquo;t support its own conclusions. Another area where we can find peer review is in open source. No editors, no elite selection of reviewers. Anyone can publish, anyone can spot faults. It&rsquo;s likely the better version.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-08-14:/posts/science-and-peer-review/</guid>
                        <link>https://blog.troed.se/posts/science-and-peer-review/</link>
                        <atom:link href="https://blog.troed.se/posts/science-and-peer-review/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 14 Aug 2009 15:03:06 UTC</pubDate>
                        <title>Science and peer review</title>
                </item>
                <item>
                        <description><![CDATA[<p>I have a problem. While the culture of giving something extra for good service, tipping, varies greatly between countries, I've so far found no solution to the problem of being given bad service.</p><p>It doesn't matter if the local culture practically mandates a tip or if it's just considered to be something you do when you feel you've been given something "extra" - I'm unable to in a culturally satisfactory way show if I'm displepleased. If I tip, you believe I was satisfied. I can tip more to show extra appreciation, <em>but if I tip less, or nothing, you will only think I'm cheap</em> (or that I do not know the local tipping culture - elaborated on below).</p><p>Possible and rejected solutions:</p><ol><li>Pay less than the value of the goods/service
A good way to get in trouble. Especially abroad where you do not know how well the local establishment have ties to the police.</li><li>Pay exactly the stated value
Displaying that you're cheap or ignorant. A good way to get a Las Vegas cab driver to throw your luggage into concrete as hard as possible.</li><li>Pay half the local norm
Displaying that you're cheap or ignorant. The norm is 20% in some countries, 10% in others and many of my fellow countrymen pay 5% and think they're tipping well no matter where they are anyway.</li></ol><p>Now I'm quite sure there is a solution, and I'd love to hear it. Very few companies run a "pay what you think it's worth" style service, too few to help me out with a very general problem. Tipping is a form of customer feedback, and any company worth your time is interested in <em>both</em> the negative as well as the positive.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-08-07:/posts/negative-tip/</guid>
                        <link>https://blog.troed.se/posts/negative-tip/</link>
                        <atom:link href="https://blog.troed.se/posts/negative-tip/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 07 Aug 2009 10:56:43 UTC</pubDate>
                        <title>Negative tip</title>
                </item>
                <item>
                        <description><![CDATA[<p>Jag röstade pirat i EU-parlamentsvalet 7e juni 2009</p><p>Nyckeln till att kunna rösta pirat även i riksdagsvalet 2010, och i nästa EU-parlamentsval, ligger i att kunna förklara det skifte <em>som redan har inträffat</em> inom politiken både för våra egna väljare och för media (blogsfären såväl som di gamle).</p><p>Skiftet jag pratar om är att det inte längre var det ekonomiska synsättet på politik som var den dominerande valfrågan för Piratpartiets väljarskara. Det här är inte första gången det är så (Miljöpartiet började likadant) men det kan bli, <em>och måste bli</em>, första gången den synen fortlever när partiet utvecklas. Det finns många förslag inom partiet just nu på hur det här ska kunna göras, men tyvärr ser jag inte många förslag som är mer konkreta än &ldquo;sluta prata om det&rdquo;. Det finns redan ett bra förslag - vi behöver bara i god <a href=http://tr.im/nNbJ rel=external>Seth Godin anda</a>
sprida det till våra medarbetare/följeskara/väljare: <a href=http://www.politicalcompass.org/ rel=external>The Political Compass</a>
<a href=http://www.politicalcompass.org/analysis2 rel=external><img src=http://www.politicalcompass.org/images/bothaxes.gif alt="Politics in two axis" title="political dimensions"></a></p><p>Den vanliga vänster-höger skalan finns kvar i sin helhet i den här bilden av politiska yttringar, men en dimension till visas. Det är inte på något sätt en ny dimension, den har alltid funnits där i våra politiska värderingar - det är bara dags att göra den synlig. (För tydlighetens skull bör man även tänka sig den här axeln spänna över auktoritär till frihetlig, eftersom orden liberal/libertarian är värdeladdade både i svenska och engelska) Med den här bilden över politisk tillhörighet kan vi nu sätta svansen på åsnan:</p><ul><li>Vänsterpartiet: Till vänster i ovanstående bild - och sträcker sig från auktoritär till frihetlig</li><li>Socialdemokraterna: Till vänster (men inte lika långt som V) - från auktoritär till frihetlig</li><li>Miljöpartiet: Till vänster, med någon övervikt på den frihetliga sidan</li><li>Centern: Till höger, med någon övervikt på den frihetliga sidan</li><li>Folkpartiet: Till höger, och sträcker sig från auktoritär till frihetlig</li><li>Moderaterna: Till höger, och sträcker sig från auktoritär till frihetlig</li><li>Kristdemokraterna: Till höger, med klar auktoritär övervikt</li></ul><p>(Your mileage may vary - ovanstående är mina åsikter om partierna) Så, vi kan se att de flesta partier i svensk politik sträcker sig över två kvadranter i den politiska kompassen. De har medlemmar som må vara överens om ekonomi, men som kan ha vitt skilda åsikter om huruvida man ska styra auktoritärt eller om personlig frihet ska stå högt på dagordningen. De här slitningarna har vi sett i svensk TV med en snyftande Federley, och med Reinfeldts partipiska vinandes om öronen på stackars liberala moderater. Det är ett under att de här partierna hänger ihop - och frågan är om de ens kan göra det framöver. Piratpartiet sträcker även de sig över två kvadranter, men till skillnad från alla ovanstående - som är uppdelade enligt ekonomisk politik - har Piratpartiet valt en annan dimension som sin viktigaste, den mellan auktoritär och frihetlig. Det här betyder att Piratpartiet har medlemmar med skilda synsätt på ekonomi, <em>men det finns inget konstigt i det!</em></p><div class=paige-shortcode-image><img class=img-fluid crossorigin=anonymous height=442 referrerpolicy=no-referrer src=https://blog.troed.se/images/2009/06/frihetligt_piratparti2.501be98b4fbc099b3d648fdf6ac515d1045f2cc93609effc7ad303d9a1c199ce.png width=400></div><ul><li>Piratpartiet: Till vänster, centralt och höger - med klar övervikt åt den frihetliga sidan</li></ul><p>Jag påstår att den politiska kompassen är det sätt vi bäst kan beskriva Piratpartiets väljarkår, inriktning på politik och är förklaringen till att Partiet <em>inte</em> måste göra som Miljöpartiet och välja ekonomisk inriktning. Det är helt enkelt inte en viktig fråga för oss. Vi är frihetliga, driver en frihetlig agenda och vi kommer att fortsätta göra det framöver. Vi är dessutom övertygade om att våra medlemmar / våra väljare / våra medarbetare är kritiskt tänkande smarta människor som har överseende med att det kan ta ett tag för gammeljournalistiken att sätta sig in i en helt ny dimension.</p><p>Vi har redan gjort det.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-06-08:/posts/angaende-politikens-framtida-riktning/</guid>
                        <link>https://blog.troed.se/posts/angaende-politikens-framtida-riktning/</link>
                        <atom:link href="https://blog.troed.se/posts/angaende-politikens-framtida-riktning/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 08 Jun 2009 17:39:12 UTC</pubDate>
                        <title>Angående politikens framtida riktning</title>
                </item>
                <item>
                        <description><![CDATA[<p>_Speed of information - or - <em>don't kill my Intarnetz!</em></p><p>Browsing through news that's relevant for me, through the excellent Google Reader, it's becoming increasingly common to see audio and video links show up.</p><p>I realise why there's an interest from the publisher of the information to create a stronger emotional bond, and the possibility for some exclusive variant of the content, through more advanced (?) means of communication. There's indeed a difference in how we respond to information depending on how it reached us.</p><p>However, the enormous difference between plain text (as in this blog entry) and audio/video is that the former is consumed in various different means, while the multimedia transfer is dictated by the publisher.</p><p>I'm not talking about repositioning of text (reading everything in the same setting is nice) or the possibility of automatic real-time translation - but the rate at which it's possible for me, the consumer, to absorb the information presented.</p><p>I'm somewhat of a [speed reader](<a href=http://en.wikipedia.org/wiki/Speed_reading rel=external>http://en.wikipedia.org/wiki/Speed_reading</a>
"speed-reader"), and thus I can consume information through reading text several times faster than I can consume that same information if it's presented in audio or video-format. I can also scan the information presented quickly and judge my interest in it if it's presented in textual form.</p><p>These two facts together has led me, without having made an active decision (this post is a reflection-of-fact), to skip almost all information coming down the tubes if it's not presented as text.</p><p>I've seen a few, but not many, publishers presenting a text-version together with their audio/video-links - which is much appreciated but will likely need automation to be successful. As always, it seems Google is one step ahead of the game.</p><p>Google Voice <a href=http://googleblog.blogspot.com/2009/03/here-comes-google-voice.html rel=external>transcribes voicemail</a>
to text, and it's possible to <a href=http://labs.google.com/gaudi rel=external>search for phrases</a>
in Youtube videos. When will old-media-trying-to-turn-new-media catch on? It's about the information, not your fancy camera work.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-06-01:/posts/speed-of-information/</guid>
                        <link>https://blog.troed.se/posts/speed-of-information/</link>
                        <atom:link href="https://blog.troed.se/posts/speed-of-information/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 01 Jun 2009 11:21:33 UTC</pubDate>
                        <title>Speed of information</title>
                </item>
                <item>
                        <description><![CDATA[<p>I&rsquo;m currently paying <a href=http://www.piratpartiet.se/international/english rel=external>a group of people</a>
to further a political agenda I find important</p><p>I&rsquo;m currently paying <a href=http://www.henrik-alexandersson.se/ rel=external>someone</a>
to continue digging into the facts behind important political decisions</p><p>I&rsquo;m currently paying <a href=http://wattsupwiththat.com/ rel=external>the initiator of a cause</a>
to continue exposing myths that otherwise might be used as support in creating an authoritarian super-state or economic system &mldr; by choice</p><p>It&rsquo;s likely that I would be doing the same with other things as well, music and various forms of entertainment comes to mind, if opportunity arose.</p><p>The important thing to remember, and what differs from how most business models have been built the last hundred-or-so years, is that I choose to pay - often after the fact, instead of being charged - often before the fact.</p><p>I&rsquo;m not alone - and I predict this once-popular way of exchanging goods to come back in style. It has been known as <a href=http://www.thefreedictionary.com/patronage rel=external>patronage</a>
, and it&rsquo;s anything but <a href=http://www.thefreedictionary.com/patronising rel=external>patronising</a>
. Quite the opposite - it&rsquo;s the ultimate form of customer approval.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-05-11:/posts/youre-not-charging-me-i-choose-to-pay/</guid>
                        <link>https://blog.troed.se/posts/youre-not-charging-me-i-choose-to-pay/</link>
                        <atom:link href="https://blog.troed.se/posts/youre-not-charging-me-i-choose-to-pay/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 11 May 2009 17:39:53 UTC</pubDate>
                        <title>You’re not charging me - I choose to pay</title>
                </item>
                <item>
                        <description><![CDATA[<p>If you belong to generation <a href=http://en.wikipedia.org/wiki/Generation_X rel=external>X</a>
, this might apply to you. If you belong to generation <a href=http://en.wikipedia.org/wiki/Generation_Y rel=external>Y</a>
or the mythical <a href=http://en.wikipedia.org/wiki/Generation_Z rel=external>Z</a>
, it most certainly does.</p><p>The question is, are we already seeing the effects without even knowing it, and what would be the cause? "This", <em>of course</em>, being the likelyhood of advancements in science (<a href=http://en.wikipedia.org/wiki/Life_extension rel=external>biological</a>
& <a href=http://en.wikipedia.org/wiki/Mind_uploading rel=external>technical</a>
) in effect creating the opportunity for some to live forever.</p><p>How do you live a life forever? How do you live <em>your</em> life forever? What's your current "grand plan"? [be born - go to school - "do youth stuff and then grow up" - find a job - find a partner - settle down - get kids] &mldr; REPEAT</p><p><em>Her plan is to have more than one plan</em> - <a href=http://www.yaledailynews.com/articles/view/272500 rel=external>Generation Y gets a job</a></p><p>It's not just about having more than one job. It's likely about having more than one "life". It's not even surprising, <a href=http://www.enotalone.com/books/1400064481.html rel=external>divorces have been on the rise</a>
in the lazy (the developed) parts of the world for quite some time, indicating that our lifespans are already long enough for us to not be able/want to keep in sync with one single partner.</p><p>With an ever increasing lifespan, that tendency should keep rising. If you truly <em>believe</em> that you are going to live forever, does that change the way you're living your life right now? Should you invest everything into one career and a lifestyle that a career switch cannot support?</p><p>Should you invest in a monogamous partnership where you declare "ever lasting love" - or be honest upfront about it [just] being "until it's not"? Should you - then - invest in children?</p><p><em>"it is the large decline in the total fertility rate over the last half century that is primarily responsible for the population ageing that is taking place in the world’s most developed countries"</em> - <a href=http://en.wikipedia.org/wiki/Population_ageing rel=external>Population ageing</a></p><p>While it's easy to claim that generation Y is the <a href=http://www.deloitte.com/dtt/article/0,1002,cid%253D242184,00.html rel=external>whining generation</a>
, the <a href=http://genxpert.blogspot.com/2008/10/does-eating-froot-loops-make-you.html rel=external>immature generation</a>
or that they should just start listening to old wise people, there's never been a generation growing up to be[come like] their parents.</p><p>So far we've seen what happens with a generation that seems to know that they have more time to "be". Either the universe has an unknown way of spreading future knowledge into the present, subconsciously, or the effects will soon become even larger. If you know that you will have both the time and the opportunity to do <em>everything</em> [later], what will you do [now]?</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2009-02-22:/posts/how-do-you-live-a-life-forever/</guid>
                        <link>https://blog.troed.se/posts/how-do-you-live-a-life-forever/</link>
                        <atom:link href="https://blog.troed.se/posts/how-do-you-live-a-life-forever/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 22 Feb 2009 12:41:26 UTC</pubDate>
                        <title>How do you live a life forever?</title>
                </item>
                <item>
                        <description><![CDATA[<p>A few days ago I bought my second Playstation 3. Mostly for use as a media centre, but of course with the intent of using it for gaming as well. It&rsquo;s nice having more than one room playstation-enabled.</p><p>However, even though I must be considered a sucker^H^H^H^H^Hgood loyal customer, I feel somewhat punished. Sony does allow me to re-download all the content I&rsquo;ve bought online to my new PS3 as well (I believe the actual limit is five separate systems), but there seems to be no added benefit of having two PS3s on the same network.</p><p>Not only aren&rsquo;t they able to use eachother as media servers (my Mac is used for that), they&rsquo;re not able to easily share any content whatsoever. Like game saves. I must manually copy the newest game save onto a USB memory stick and then copy it back to the machine I currently want to use. Sony. These are networked machines. They&rsquo;re on the same local network. They&rsquo;re both configured to use the same Playstation Network account. See where I&rsquo;m going with this?</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2008-09-12:/posts/sony-please_dont_punish_good_customers/</guid>
                        <link>https://blog.troed.se/posts/sony-please_dont_punish_good_customers/</link>
                        <atom:link href="https://blog.troed.se/posts/sony-please_dont_punish_good_customers/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 12 Sep 2008 17:33:46 UTC</pubDate>
                        <title>Sony - please don’t punish good customers!</title>
                </item>
                <item>
                        <description><![CDATA[<p>&mldr;is this diagram. It's from [probably the best climate blog](<a href=http://wattsupwiththat.wordpress.com/2008/06/15/more-signs-of-the-sun-slowing-down/ rel=external>http://wattsupwiththat.wordpress.com/2008/06/15/more-signs-of-the-sun-slowing-down/</a>
"probably the best climate blog") I've ever read, and while there's no question of the author's own opinions it's very well researched throughout. [While I've claimed](<a href=http://blog.troed.se/2007/03/16/its-the-sun-dammit/ rel=external>http://blog.troed.se/2007/03/16/its-the-sun-dammit/</a>
"While I've claimed") the sun to be the culprit behind not only most other climate shifts in history, but also the latest slight warming (that stopped in 1998!), it's from reading Watt's entries I've become more than sure.</p><p>However, the alarming signs that we might be looking at a global freeze - soon - instead of some nice warming is terrifying. Cold is a lot worse than warmth for human society - something [Bjorn Lomborg has laid out nicely in his latest book](<a href=http://blog.troed.se/2007/12/23/thus-we-need-to-abandon-the-kyoto-process/ rel=external>http://blog.troed.se/2007/12/23/thus-we-need-to-abandon-the-kyoto-process/</a>
"Bjorn Lomborg has laid out nicely in his latest book").</p><p><a href=http://wattsupwiththat.files.wordpress.com/2009/02/ap_index_2008.png rel=external><img src=//wattsupwiththat.files.wordpress.com/2009/02/ap_index_2008.png alt></a>
Something .. switched off? (Oh, btw. We're also looking [at a really quiet sun](<a href=http://wattsupwiththat.wordpress.com/2008/06/10/scientists-not-sure-why-sun-continues-to-be-dead/ rel=external>http://wattsupwiththat.wordpress.com/2008/06/10/scientists-not-sure-why-sun-continues-to-be-dead/</a>
"at a really quiet sun") - sunspot wise - and the last time the sun was really really quiet the Thames in London froze over &mldr;</p><p>edit: This entry has been updated with a later graph since first published</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2008-06-16:/posts/the-scariest-thing-i-know/</guid>
                        <link>https://blog.troed.se/posts/the-scariest-thing-i-know/</link>
                        <atom:link href="https://blog.troed.se/posts/the-scariest-thing-i-know/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Mon, 16 Jun 2008 18:05:51 UTC</pubDate>
                        <title>The scariest thing I know</title>
                </item>
                <item>
                        <description><![CDATA[<p>Here is the text broken up into paragraphs:</p><p>I&rsquo;ll admit, I hadn&rsquo;t read [Getting Things Done](<a href=http://www.davidco.com/ rel=external>http://www.davidco.com/</a>
"Getting Things Done") until now. Sorry. I guess I never got around to do it.</p><p>Luckily, I seem to be half a GTD&rsquo;er to start with - which means the topic of security in this context has been on my mind for quite some time. While it&rsquo;s not something swept under the rug completely (one example being the steps taken by [Evernote](<a href=http://blog.evernote.com/2008/04/15/evernote-privacy-and-security/ rel=external>http://blog.evernote.com/2008/04/15/evernote-privacy-and-security/</a>
"Evernote")) it&rsquo;s seemingly not being seen as the big problem it really is.</p><p>Recently in Sweden we&rsquo;ve had a few well publicized break-ins into web services, where password files (either in clear text or with unsalted hashes) have been released into the wild. This in turn lead to the public discovery that government officials, security experts and police personnel have used third party web systems - like GMail - to store official or company data.</p><p>That is unacceptable - unless we change the current mindset of everyone involved in the current transition to "data in the cloud". It&rsquo;s not enough that a service uses well protected servers. It&rsquo;s not enough if only a few admins have access to the data center. It&rsquo;s not enough if my password is encrypted and that you promise me you won&rsquo;t sell my info to third party companies.</p><p>It&rsquo;s not enough, as long as a single person besides myself can access the data I&rsquo;ve stored on your servers, in clear text.</p><p>I&rsquo;d like to implement GTD, or some derivative, fully in my life. I cannot do it though, since as with many others in the "2.0-crowd" the border between what would be called my personal life and what I do at work is increasingly diffuse.</p><p>I&rsquo;ve worked far too long with security to allow myself to put up a single work related note, mail or photo on a server not controlled by my company. I&rsquo;d go so far as to bluntly state that if you do, you&rsquo;re naïve as to the risks involved and the amount of corporate spying (company and government sponsored) being performed.</p><p>Now, this is probably solvable. Data portability, open APIs and open authentication schemes could and should be followed by personal privacy.</p><p>While causing trouble for cloud computing, using a private key system where all my different access devices will encrypt the data sent to the servers - and decrypt when fetching, will satisfy the privacy fears.</p><p>(The problem with cloud computing is, of course, that encrypted data is likely not modifyable. If we were to let the cloud computer modify the data it would need to be able to decrypt it, and while doing so the data would indeed become readable by spyware) -"But I trust Google/Yahoo/Microsoft!" You shouldn&rsquo;t.</p><p>What should be offered by all cloud computing companies is a way for their service to use computing and storage resources at an external site, where private keys could be used in a secure environment. The access APIs would be the same, but the flow of information would be routed differently depending on the user&rsquo;s credentials.</p><p>This would allow for a single user to have personal data that he or she would be able to entrust to a single company like one of the above, but when in their professional capacity it would be possible to instead route the data through other servers with more inherit trust and capabilities.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2008-05-02:/posts/security-and-web-20/</guid>
                        <link>https://blog.troed.se/posts/security-and-web-20/</link>
                        <atom:link href="https://blog.troed.se/posts/security-and-web-20/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 02 May 2008 12:40:52 UTC</pubDate>
                        <title>Security and Web 2.0</title>
                </item>
                <item>
                        <description><![CDATA[<p>I've just spent 1.5h this day before Christmas Eve doing something I wholeheartedly recommend everyone else to do as well - reading Bjorn Lomborg's book on climate change. Named &ldquo;<a href=http://www.amazon.com/Cool-Skeptical-Environmentalists-Global-Warming/dp/0307266923 rel=external title="Cool It">Cool It</a>
&rdquo; (and yes, while I am a quick reader it is quite short) it makes an excellent case explaining that even though humans indeed cause some of the climate change in the world our response to that should be to basically continue on the same path as we already are instead of throwing money on projects like Kyoto that actually might cause more harm than good. Select excerpts:</p><ul><li><em>With Kyoto we can avoid about 140,000 malaria deaths over the century. At one-sixtieth the cost, we can tackle malaria directly and avoid eighty-five million deaths</em></li><li><em>When focused on water scarcity, we see that global warming actually makes water more available. We found that climate change would improve access for a net 1.2 billion people, and Kyoto would actually make matters worse</em></li><li><em>global warming makes flooding more likely, but other policies are vastly superiour in dealing with flooding [&mdash;] For every dollar spent on Kyoto, we could do 1,300 times more good through smarter social policies</em></li></ul><p>[paige.pages]
disable_word_count: true
disable_description: true</p><ul><li><em>global warming will probably mean more malnourished [&mdash;] For each person saved from malnutrition through Kyoto, simple policies - like investing in agriculture research - could save five thousand people</em></li></ul><p>We should spend money on what matters, raising the living standards and mean income of the whole world. That will naturally, like it has all over the developed world already compared to the last centuries, take care of many of the problems popularily associated with climate change (yes, even the somewhat rising sea levels). The way to do this is through R&amp;D, globalization and free trade. Now, how often do you hear those words being uttered by Greenpeace (et al) in a positive way? Alfred Nobel, being a reasonably clear headed scientist, is probably creating a vortex in his grave at this very moment.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-12-23:/posts/thus-we-need-to-abandon-the-kyoto-process/</guid>
                        <link>https://blog.troed.se/posts/thus-we-need-to-abandon-the-kyoto-process/</link>
                        <atom:link href="https://blog.troed.se/posts/thus-we-need-to-abandon-the-kyoto-process/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 23 Dec 2007 12:37:50 UTC</pubDate>
                        <title>“Thus, we need to abandon the Kyoto process”</title>
                </item>
                <item>
                        <description><![CDATA[<p>Here is the text broken up into paragraphs:</p><p>I like forums. They&rsquo;re a one stop place for me to go to read up on various subjects, comment on them and read comments from others. The thread starter participates in the comments, and you refer to other similar threads or branch off if (when) the discussion becomes off topic.</p><p>Blogs are nothing more than distributed forum threads. There&rsquo;s a thread starter and comments, but the threads are grouped together by author or by subject, while on a forum threads usually span a wider subject area. It&rsquo;s harder to collect blogs visibly than it is to visit a forum (although we try to solve that using blogrolls and collection agents like /., digg, technorati etc).</p><p>The solution is of course to treat all blogs as threads on a global forum, bloggum, gollum or whatever we would like to call it. Advanced forums can already filter based on category (tags) and divide threads into specific subject areas. Community tagging and voting will make such a system simple even for our global forum rather than having to decide upon areas from the start (which is what makes it very different from Usenet).</p><p>I usually spend most of my creative net-writing energy on forum posts, and often feel that I should&rsquo;ve blogged on the same subject instead or as well. I&rsquo;ve toyed with the idea of creating an automatic connection system between blogs and forums, where some of my forum posts would also become blog posts - but what about the comments?</p><p>At one forum/community I frequent members can have their own blog, but if they don&rsquo;t want to blog there they can include an RSS-feed instead and those entries will show up as entries at the community. Again with no solution for comments which will reside in two different places, but it&rsquo;s a step in the right direction.</p><p>The next step, and what I propose, is a general "posting platform", where no matter where I post (comments on newspaper articles, Jaikus, blog entries like this one etc) that creative work is considered output from the entity me, and any related information and comments will be linked to what I wrote. That content can be grouped at various places (like at <a href=http://blog.troed.se rel=external>http://blog.troed.se</a>
) but also at the place where that creativity took place (comments on <a href=http://sydsvenskan.se rel=external>http://sydsvenskan.se</a>
, on a friend&rsquo;s <a href=http://jaiku.com rel=external>Jaiku</a>
post, at <a href=http://slashdot.org rel=external>/.</a>
)</p><p>This is a step towards life logging, and it&rsquo;s a step that&rsquo;s possible to do today. Combined with a social trust network it will also make moderation much simpler at places that need it, due to a user&rsquo;s combined posting history being available instead of each new place with an input box being treated as having a separate community of users.</p><p>I&rsquo;ll even suggest a name for such a creative work: <strong>meev</strong> - for "me event". I spend a lot of time every day writing meevs (meeving?), sharing knowledge and ideas with others in our global community. Now it&rsquo;s time to bring all that output together. It&rsquo;s all just one really big forum anyway, with lots and lots of threads.</p><p>update: Something might be happening. <a href=http://mashable.com/2008/03/31/favorit-conversation-tracking/ rel=external>http://mashable.com/2008/03/31/favorit-conversation-tracking/</a></p><p>update 2: <a href=http://mashable.com/2008/07/08/jskit-acquires-haloscan/ rel=external>http://mashable.com/2008/07/08/jskit-acquires-haloscan/</a></p><p>update 3 - and this seems to be it: <a href=http://mashable.com/2009/02/10/backtype-friendfeed-support/ rel=external>http://mashable.com/2009/02/10/backtype-friendfeed-support/</a></p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-12-13:/posts/blogs-are-nothing-but-distributed-forum-threads/</guid>
                        <link>https://blog.troed.se/posts/blogs-are-nothing-but-distributed-forum-threads/</link>
                        <atom:link href="https://blog.troed.se/posts/blogs-are-nothing-but-distributed-forum-threads/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Thu, 13 Dec 2007 15:21:43 UTC</pubDate>
                        <title>Blogs are nothing but distributed forum threads</title>
                </item>
                <item>
                        <description><![CDATA[<p>Yes, humans are going to end up in life sustaining pods, fed nutrients through an automatic delivery system and with our nervous system connected to a huge computer network.</p><p>The reason, however, is that it's the natural progression from what we're already doing today. We want to be always online, always connected, get real time status updates from friends, logged on to our favourite social networks and games wherever we are. We want to work from home, to blend our professional and social lives, to augment our reality in any way possible.</p><p>We have no problems envisioning a future where we go to work in a virtual environment, have virtual meetings instead of flying everywhere, and live virtual lives (just for fun? really?). There's no reason to believe we're suddenly going to not want to live those virtual lives 24/7 - and that's the same as accepting our pod-enclosed future.</p><p>When our simulations are good enough, there's very little need for a life in the physical world. 90% of all South Koreans in their 20s have a virtual existence on Cyworld. The mainstream Internet is only 10 years old. Try to project what the youth of 2020 are doing with their lives. Can you? Do you even want to? Why not?</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-10-19:/posts/the-matrix-had-it-all-wrong/</guid>
                        <link>https://blog.troed.se/posts/the-matrix-had-it-all-wrong/</link>
                        <atom:link href="https://blog.troed.se/posts/the-matrix-had-it-all-wrong/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 19 Oct 2007 11:51:01 UTC</pubDate>
                        <title>The Matrix had it all wrong</title>
                </item>
                <item>
                        <description><![CDATA[<p>Erik Starck skriver <a href="http://www.softwaresweden.com/framtidstanken/?p=1183" rel=external>ett mycket välformulerat inlägg</a>
ang. varför förflyttning av vår fysiska kropp i många sammanhang kommer att bli mindre viktigt, framöver. Det är inte bara bostadsmarknaden som kommer att behöva en justering - vad händer med alla dyra kontor när anställda lätt och ledigt kan mötas virtuellt hela dagarna utan att det måste ske i en viss stads centrum?</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-09-02:/posts/det-virtuella-sociala-livet/</guid>
                        <link>https://blog.troed.se/posts/det-virtuella-sociala-livet/</link>
                        <atom:link href="https://blog.troed.se/posts/det-virtuella-sociala-livet/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 02 Sep 2007 12:20:18 UTC</pubDate>
                        <title>Det virtuella sociala livet</title>
                </item>
                <item>
                        <description><![CDATA[<p>[it’s teh book review]</p><p>A few weeks ago I read an interesting book; <a href=http://en.wikipedia.org/wiki/I_Am_a_Strange_Loop rel=external>I am a strange loop</a>
- by Douglas Hofstadter. He's quite famous for earlier works, and this book is supposed to set the record straight regarding some things he felt didn't came out right earlier. I don't know - I haven't read his previous material.</p><p>I liked this book, however, because it elaborated along the same views that I hold myself regarding the human consciousness - what constitutes an "I". It's also a bit frightening, since it also means that behaviour often viewed as strange or even not-normal is rather very normal and something that should be encouraged.</p><p><strong>A human being is nothing more than a pattern matching machine, in a loop</strong> &mldr; and why limit ourselves to humans? The same applies to all animals, but with a difference in the the number of stored patterns and the ability to create new ones dynamically. A computer that is only capable of running a single program is a boring computer. A brain only able to run a single loop would also be a pretty boring brain.</p><p>It's probable that we indeed can create patterns and loops about other humans (or animals - pet owners know what I mean!) that we use to predict what their actions would be, how they feel about things we do and ask silently for guidance - i.e, "What would Ben do in this situation?". The more we interact with others, the stronger and better their loops become. A husband and wife who've lived together for 50 years have no problems finishing each other's sentences - and when one of them passes on it's not uncommon for the grieving spouse to "talk to him/herself" addressing the late partner.</p><p>Of course not - there's a very detailed loop still running that makes it possible! I get a nice, warm, fuzzy and tingling feeling when I start thinking about a world where everyone's connected to everyone else, with large bandwidth channels, and where a person (<em>that is - loop+patterns!</em>) can be said to "exist" in many brains. Don't you? ;)</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-08-12:/posts/i-am-a-strange-loop/</guid>
                        <link>https://blog.troed.se/posts/i-am-a-strange-loop/</link>
                        <atom:link href="https://blog.troed.se/posts/i-am-a-strange-loop/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 12 Aug 2007 14:57:20 UTC</pubDate>
                        <title>I am a strange loop</title>
                </item>
                <item>
                        <description><![CDATA[<p>Here is the text, broken up into paragraphs:</p><p>Six months ago, to this day exactly, I bought an album on iTunes. On my first listening through I noticed some of the songs sounded "cut off", and went to investigate. Using song length data from other sites I concluded that two of the songs were several minutes short on the iTunes store.</p><p>The album is Progressive Trance - by Indoor, still available <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=18%ef%bf%bd322903&amp;s=143456" rel=external>here</a>
as of this writing. I fired off an email to iTunes support, and got excellent feedback. I was told to not re-download the songs again for <strong>two weeks</strong>, to give Apple time to investigate the issue.</p><p>I was also given credits for the two faulty tracks. I waited a full month, but there was no change on the iTunes store. I notified the support again, and explained that an album is a complete product and mentioned the swedish consumer law (which is very very strong).</p><p>The first response was complete bogus, the person hadn&rsquo;t even bothered to read the mail. I had to re-send it to get a proper reply, which was that they would (and did) reverse the charge for the whole album completely and that a request would be made for the <em>item to be either modified or removed from the iTunes store</em>.</p><p>I was to wait <strong>a couple of weeks</strong> until purchasing the title again. At this time I also submitted a review of the album, as you can see, where I warned other potential buyers that two songs were incomplete. I waited for 1 1/2 months, and then contacted iTunes support again.</p><p>This time I got the response that the issue was to be <strong>escalated</strong>, and that I would be contacted again when they had more information. My request was flagged for follow-up. I waited for yet another month.</p><p>The person who had done the escalation above said she hadn&rsquo;t gotten any reply back, but she sent another request and would contact me back. Three weeks later, she did. She had received notification from the engineering team that they were working on <strong>hiding the two faulty songs and to request replacements</strong>.</p><p>They would disappear from the store <strong>within a few days</strong>, and be replaced when the label sent proper versions. I waited for 1 1/2 month. Sent a new mail asking about the issue, and got another bogus reply from someone who didn&rsquo;t read the mail through. I gave up.</p><p>To be fair, now going public, during this time I have mentioned in my mails that knowingly selling faulty products is called fraud, that I would end up contacting the press and cc:ing Steve (whom I&rsquo;m reasonably sure feels quite strongly about issues like these - am I right?).</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-07-20:/posts/itunes-fraud-six-months-and-counting/</guid>
                        <link>https://blog.troed.se/posts/itunes-fraud-six-months-and-counting/</link>
                        <atom:link href="https://blog.troed.se/posts/itunes-fraud-six-months-and-counting/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 20 Jul 2007 07:59:46 UTC</pubDate>
                        <title>iTunes fraud - six months and counting</title>
                </item>
                <item>
                        <description><![CDATA[<p>Många är vi som muttrat om att ökad övervakning och frihetsinskränkning införs med motiveringar som är svåra att våga säga emot - men som senare riskerar att användas för helt andra syften.</p><p>Rikspolisstyrelsen har nu visat att vi haft rätt hela tiden. I ett ovanligt öppet missbrukande av makt tänker de lägga The Piratebay i det såkallade "Barnpornografifilter" som de flesta svenska ISPer "frivilligt" följer (hur frivilligt nu det kan tänkas vara, med tanke på tidningsrubrikerna som följer på att stå emot).</p><p>Till saken hör att The Piratebay självklart vill vara eller är ett näste för barnpornografi. Vill man hitta sådant räcker det med att titta på de newsservrar ("Google groups", "Usenet") som nästan alla svenska universitet och högskolor har.</p><p>Så, poängen är fortfarande, och har alltid varit:</p><ul><li><strong>Man är inte för barnpornografi för att man inte vill se filtrerade Internetanslutningar</strong></li><li><strong>Man är inte för terrorism, och har ingenting själv att dölja, för att man inte vill ha kameraövervakning på allmän plats</strong></li></ul><p>Ok?</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-07-07:/posts/rikspolisstyrelsen-ger-oss-ratt/</guid>
                        <link>https://blog.troed.se/posts/rikspolisstyrelsen-ger-oss-ratt/</link>
                        <atom:link href="https://blog.troed.se/posts/rikspolisstyrelsen-ger-oss-ratt/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 07 Jul 2007 16:55:22 UTC</pubDate>
                        <title>Rikspolisstyrelsen ger oss rätt!</title>
                </item>
                <item>
                        <description><![CDATA[<p>Uppföljning: Efter att jag hade skrivit det här inlägget skickade jag även ett mail till Skånepolisen där jag ifrågasatte hur trafikpoliser fick bete sig i trafiken. Idag 2007-07-17 blev jag uppringd av deras chef. Han tackade för att jag hade skickat in min upplevelse av händelsen, och han hade diskuterat den med den berörda polisen.</p><p>Jag har precis fått en "lektion i körvett" av en uppkäftig motorcykelpolis med stockholmsdialekt. Det sistnämnda är absolut relevant då han gnällde på "hur det körs i Malmö". Antagligen saknar han alla andra poliser med spett på otrevliga ställen.</p><p>Vad som hände var att han glömde hur man gör när man accelererar när han körde ut i vänsterfilen när man svänger vänster ut från Amiralsgatan till Föreningsgatan (mot Värnhem). Jag låg bakom och körde därför ut i högerfilen istället, eftersom jag skulle höger vid nästa trafikljus, och gick upp i 50. Han lade sig direkt bakom (i Sthlm är det tydligen fult att köra om en polis som fiskör) - nära mig - och började sedan titta på de fina byggnaderna.</p><p>Jag hade koll på honom i backspegeln, och var ganska nyfiken på vad han tänkte göra när jag sedan skulle svänga höger med tanke på att trafikljuset visade grönt. Mycket riktigt, han fick nog bromsa till lite extra när han upptäckte att jag saktade in för att svänga - det här med att titta på blinkers på bilen framför fick han tydligen inte lära sig när han tog körkort.</p><p>Det här gjorde honom mycket sur, så när jag sedan accelererade upp mot nästa korsning, där jag skulle höger, körde han på duktigt och var nästan uppe jämsides med mig när jag svängde. Nu blev han riktigt härsken, så när jag direkt saktade in för att svänga vänster ner mot mitt garage var han uppe på min vänstersida (och han ska vara glad att jag därför inte svängde, vilket jag kunde gjort enligt alla konstens trafikregler, för då hade han trillat alternativt kört rakt in i sidan på min bil).</p><p>Jag hade redan vevat ner rutan för att kunna öppna in till garaget - notera att han hittills inte gjort några som helst tecken för att visa att han ville att jag skulle stanna - och det tog han som en ursäkt till att börja prata med mig. Nu satt jag med headset på, han med hjälm och dessutom pratade han obegriplig stockholmska, så det blev ett par "Vad säger du?" innan han mycket härsket lyckades muttra fram att han ville se på mitt körkort.</p><p>Extremt otrevlig typ, i varenda mening därefter, när han ifrågasatte om jag inte kunde "grundläggande trafikregler" (han ogillade att jag höll 50 på en 50-väg eftersom det fanns - hör och häpna - parkerade bilar i närheten. På Föreningsgatan alltså) försökte han påskina att jag var en trafikdåre som inte förstår vad Agda 80 år tycker och tänker med tanke på att hon tog körkort 1945 (jag misstänker att han inte har den blekaste aning om vad som krävdes för körkort då).</p><p>Polisens uppgift i samhället vet han uppenbarligen ingenting om. Iaf. Eftersom jag självklart inte brutit mot några som helst trafikregler - om något var det han som hade både betett sig ouppmärksamt och dessutom gjort farliga manövrar - fick han lämna tillbaks mitt körkort igen och se på när jag direkt rullade ner till mitt garage - och kanske, men det tror jag inte, inse hur nära han var att ställa till med en olycka på riktigt.</p><p>Frågan är nu. Varför i helvete kör det omkring otrevliga stockholmspoliser och trakasserar malmöbilister?</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-06-24:/posts/trafikfarliga-poliser/</guid>
                        <link>https://blog.troed.se/posts/trafikfarliga-poliser/</link>
                        <atom:link href="https://blog.troed.se/posts/trafikfarliga-poliser/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 24 Jun 2007 13:30:07 UTC</pubDate>
                        <title>Trafikfarliga poliser</title>
                </item>
                <item>
                        <description><![CDATA[<p>Today the Swedish business magazine Dagens Industri have <a href="http://di.se/Index/Nyheter/2007/06/19/237871.htm?src=xlink" rel=external>an interview</a>
with Christian von Koenigsegg, the owner of the Swedish car manufacturer Koenigsegg famous for their extreme super sport car.</p><p>Hidden away at the bottom of the interview, under trivia, we can however find the cause of the <a href="http://www.fast-autos.net/forum/showthread.php?p=71292" rel=external>well published crashes</a>
where new owners have run their car off road:</p><p><em>Hidden talent: Writes poems and <strong>has developed an alternative theory of gravitation.</strong></em></p><p>That can't help.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-06-19:/posts/why-koenigsegg-cars-keep-crashing/</guid>
                        <link>https://blog.troed.se/posts/why-koenigsegg-cars-keep-crashing/</link>
                        <atom:link href="https://blog.troed.se/posts/why-koenigsegg-cars-keep-crashing/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Tue, 19 Jun 2007 09:00:38 UTC</pubDate>
                        <title>Why Koenigsegg cars keep crashing</title>
                </item>
                <item>
                        <description><![CDATA[<p>Jag får inte se mina resor på <a href=http://www.sas.se rel=external>http://www.sas.se</a>
.
De går inte att hitta.</p><p>På <a href=http://www.checkmytrip.com rel=external>http://www.checkmytrip.com</a>
går det däremot bra.
Skillnaden är att jag på den sistnämnda siten får lov att själv skriva in efternamnet när jag söker - och kan välja att göra det med &lsquo;a&rsquo; istället för &lsquo;å&rsquo;
Det kan jag inte på sas.se.
De anser att jag behöver skicka in intyg från folkbokföringen (!) för att kunna ändra stavningen på mitt efternamn.
Man skulle kunna tro att ett skandinaviskt bolag var beredd på den här problematiken.</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-05-04:/posts/sas-inte-sa-skandinaviskt/</guid>
                        <link>https://blog.troed.se/posts/sas-inte-sa-skandinaviskt/</link>
                        <atom:link href="https://blog.troed.se/posts/sas-inte-sa-skandinaviskt/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 04 May 2007 21:05:06 UTC</pubDate>
                        <title>SAS - inte så skandinaviskt</title>
                </item>
                <item>
                        <description><![CDATA[<p>[it's teh book review]
I've just finished reading <a href="http://www.adlibris.se/product.aspx?isbn=1591024080&amp;s=1" rel=external>Don't Believe Everything You Think: The 6 Basic Mistakes We Make in Thinking</a>
- a book dealing with the common mistakes us humans often make when judging events in the world around us. Depending on how much you already know about those pitfalls the book might be anything from a yawn to a revelation.</p><p>Myself, I thought I knew more than I did. I'll actually have to modify some of my own views on events concerning myself, which I guess makes the book worthwhile reading all in itself.</p><p>It's hard to extract a single thing that might raise your interest, but I'll try: <em>We tend to associate the color black with evil.</em> [&mldr;] all the teams in the NFL and NHL who wore black uniforms were penalized more than the average of the other teams. In fact, switching to black can actually increase the penalties given to a team._</p><p>Do you like wearing black clothes?</p><p>PS: There are actually a few excellent managements tips on group dynamics in the book as well. Combine recreation, self-improvement and work efficiency all at once!</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-04-06:/posts/think-about-what-you-believe/</guid>
                        <link>https://blog.troed.se/posts/think-about-what-you-believe/</link>
                        <atom:link href="https://blog.troed.se/posts/think-about-what-you-believe/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 06 Apr 2007 17:50:02 UTC</pubDate>
                        <title>Think about what you believe</title>
                </item>
                <item>
                        <description><![CDATA[<p>There have been rumours about this for quite some time, but it&rsquo;s getting traction now. Here&rsquo;s what a quick search resulted in this morning:</p><p><a href="http://newbc.blackcode.com/forum/index.php?t=msg&amp;th=396&amp;prevloaded=1&amp;rid=0&amp;start=0" rel=external>2006-09-09</a>
: <em>Okay so I&rsquo;ve had my xbox live account hacked several times, all I know is you need to be monitoring the incoming IP&rsquo;s to get there IP then I have no clue.</em></p><p><a href=http://forums.xbox.com/10_8799/ShowPost.aspx rel=external>2007-03-11</a>
: <em>My game tag was stolen and $80+ was used to buy MS points. Also I am finding out that I am not the only one this has happened to&mldr;=(</em></p><p><a href=http://liveskillz.com/blog/2007/03/13/xbox-live-accounts-being-hacked/ rel=external>2007-03-13</a>
<em>I power off my console to power it back on, and then to find out that it says that my acct was recovered onto another console. My Microsoft Points is now down to 310 from 1,000 something, and they purchased 500 more points on my card</em></p><p><a href=http://archives.neohapsis.com/archives/fulldisclosure/2007-03/0_241.html rel=external>2007-03-17</a>
<em>He blatantly says he can steal any account on your Xbox with just your IP address</em> [youtube=http://www.youtube.com/watch?v=1QdG_xwkPH4]</p><p><a href=http://archives.neohapsis.com/archives/fulldisclosure/2007-03/0_234.html rel=external>2007-03-17</a>
<em>I just got off the phone with a Microsoft Tech for Xbox live that has confirmed this to me and they have stated that accounts are being stolen and that "Hackers have control of Xbox live and there is nothing we can do about it"</em></p><p>My best guess based on the above quotes would be that it requires the victim to be logged in, and that the hacker then performs an IP-spoofed account recovery request - but it would imply extremely bad security on Microsoft&rsquo;s part.</p><p>That would be &mldr; unheard of &mldr;</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-03-18:/posts/are-xboxlive-accounts-hackable/</guid>
                        <link>https://blog.troed.se/posts/are-xboxlive-accounts-hackable/</link>
                        <atom:link href="https://blog.troed.se/posts/are-xboxlive-accounts-hackable/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sun, 18 Mar 2007 12:29:19 UTC</pubDate>
                        <title>Are XboxLive accounts hackable?</title>
                </item>
                <item>
                        <description><![CDATA[<p>I've just finished watching <a href="http://www.google.com/search?q=filetype:torrent+the+great+global+warming+swindle" rel=external>The Great Global Warming Swindle</a>
- <a href=http://www.channel4.com/science/microsites/G/great_global_warming_swindle/index.html rel=external>a Channel 4 documentary</a>
that basically states that something we've begun taking for granted, is really resting on shaky scientific grounds.</p><p><a href="http://www.youtube.com/watch?v=XttV2C6B8pU" rel=external>YouTube link</a></p><p>Key arguments: CO2 in the atmosphere lags behind temperature changes by about 800 years. It's the old "correlation does not equal causation" again - there might indeed be causation between CO2 and temperature, it's just the other way around.</p><p><a href=http://troed.se/blog/800yearlag.png rel=external><img src=http://troed.se/blog/800yearlag_s.png alt="CO2 lags behind temperature"></a></p><p>The sun, that gigantic energetic nuclear furnace in the sky, is what's driving Earth's atmosphere: <a href=http://troed.se/blog/solarcorrelation.png rel=external><img src=http://troed.se/blog/solarcorrelation_s.png alt="The sun drives the changes"></a></p><p>Thus, it's really not surprising that we're seeing the temperature and CO2 rise at the moment, since it's about 800 years since the <a href=http://en.wikipedia.org/wiki/Medieval_Warm_Period rel=external>Medieval Maximum</a>
. (They have actually been rising since the late 18th century) <em>"The sun is driving climate change, CO2 is irrelevant"</em> - Dr Piers Corbyn</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-03-16:/posts/its-the-sun-dammit/</guid>
                        <link>https://blog.troed.se/posts/its-the-sun-dammit/</link>
                        <atom:link href="https://blog.troed.se/posts/its-the-sun-dammit/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Fri, 16 Mar 2007 21:42:49 UTC</pubDate>
                        <title>It’s the sun, dammit!</title>
                </item>
                <item>
                        <description><![CDATA[<p><em>USA har avvisat en begäran från Europarådets parlamentariska församling om att få besöka fånglägret på Guantanamobasen på Kuba</em></p><p><a href=http://sydsvenskan.se/varlden/article218444.ece rel=external>länk</a></p><p><em>En domstol i Milano beslöt på fredagen att 26 amerikaner, de flesta förmodligen CIA-agenter, ska ställas inför rätta</em></p><p><a href=http://sydsvenskan.se/varlden/article218436.ece rel=external>länk</a></p><p><em>Amerikanerna misstänks för att ha kidnappat den terrormisstänkte egyptiske imamen Abu Omar 2003 och fört honom till Egypten, där han uppges ha torterats</em></p><p><a href=http://sydsvenskan.se/varlden/article218436.ece rel=external>länk</a></p><p><em>Iransk tv har visat bilder på en man som erkänner delaktighet i bombdådet som dödade elva personer i onsdags</em></p><p><a href=http://sydsvenskan.se/varlden/article218425.ece rel=external>länk</a></p><p><em>Jund Allah, Guds soldater, är en sunnimuslimsk militant grupp som har tagit på sig skulden för onsdagens attentat mot en militärbuss och en rad andra attacker de senaste åren</em></p><p><a href=http://sydsvenskan.se/varlden/article218425.ece rel=external>länk</a></p><p><em>Polischefen i provinsen har anklagat amerikansk och brittisk militär i angränsande Afghanistan för att stödja Jund Allah</em></p><p><a href=http://sydsvenskan.se/varlden/article218425.ece rel=external>länk</a></p><p><em>Alla nyheterna ovan är från en och samma dag, och kom i följd på Sydsvenskans nyhetssida "Världen". Den samlade effekten blir ganska intressant. Kan du hitta terroristerna?</em></p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-03-10:/posts/lets-find-the-terrorists/</guid>
                        <link>https://blog.troed.se/posts/lets-find-the-terrorists/</link>
                        <atom:link href="https://blog.troed.se/posts/lets-find-the-terrorists/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 10 Mar 2007 17:16:41 UTC</pubDate>
                        <title>“Let’s find the terrorists!”</title>
                </item>
                <item>
                        <description><![CDATA[<p>De senaste veckorna har det kommit många rapporter om Irans urananrikningsprogram. Den senaste nyheten är att israeliska planer på att använda kärnvapen i förebyggande syfte mot Iran har läckt ut.</p><p>Man kan tycka att det är lite ironiskt att det finns de som anser att en stat som tydligen har kärnvapen utan att erkänna det officiellt, och som inte deltar i icke-spridningssamarbetet (Israel), ska få använda dem mot en stat som vill använda kärnkraft för energisyften och som skrivit under icke-spridningsavtalet (Iran), men om det ser jag väldigt lite.</p><p><a href=http://sydsvenskan.se/varlden/article208255.ece rel=external>Sydsvenskan</a>
och <a href=http://www.aftonbladet.se/vss/nyheter/story/0,2789,969438,00.html rel=external>Aftonbladet</a>
har båda artiklar om det här, baserade på utskick från TT. Precis som i tidigare artiklar om Iran stoppar TT in en mening på slutet som inte har någon större relevans till själva nyheten, och som dessutom inte ens är sann.</p><p><em>Irans president Mahmud Ahmadinejad har sagt att Israel bör "utplånas från kartan"</em></p><p>Det har varit känt länge att ovanstående är en felöversättning av vad Irans president sagt. Det egentliga budskapet är att om de fördrivna palestinierna tillåts komma hem och få delta i demokratiska val så kommer statsskicket i Israel snabbt att ändras. <a href="http://en.wikipedia.org/w/index.php?title=Mahmoud_Ahmadinejad_and_Israel&amp;oldid=98_55_64" rel=external>Wikipedia</a></p><p>Vad har ni för agenda, TT?</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-03-10:/posts/vad-har-tt-for-agenda/</guid>
                        <link>https://blog.troed.se/posts/vad-har-tt-for-agenda/</link>
                        <atom:link href="https://blog.troed.se/posts/vad-har-tt-for-agenda/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 10 Mar 2007 17:06:34 UTC</pubDate>
                        <title>Vad har TT för agenda?</title>
                </item>
                <item>
                        <description><![CDATA[<p>Targeted trojans - businesses connected to the Internet, no matter what A/V-solutions and firewalls they use - are at the risk of having their internal information extracted</p><p>Peer 2 Peer video - this will completely kill the bandwidth home users think they are paying for, but doesn&rsquo;t really exist if they all try to use it all at once</p><p>Nationwide blocking of domains due to different laws - this could fragment the Internet into "the internets" sooner than we think</p><p>-=-</p><p>It&rsquo;s plausable that social networking sites become the first to offer their own "in" - tunneled through various means. We might become accustomed to not being able to reach all of the Internet, due to bandwidth contention outtage. It&rsquo;s also plausable that some companies start to restrict access to the Internet completely, even though it&rsquo;s considered to be crucial when selecting employer by people who have grown up with the net.</p><p>-=-</p><p>Which darknet do you use?</p><p>-=-</p><p>[this post brought to you de-linkified. my part of the net cannot currently link to your part of the net]</p>]]></description>
                        <guid isPermaLink="false">tag:blog.troed.se,2007-03-10:/posts/will-the-free-net-survive-2007/</guid>
                        <link>https://blog.troed.se/posts/will-the-free-net-survive-2007/</link>
                        <atom:link href="https://blog.troed.se/posts/will-the-free-net-survive-2007/" hreflang="en-sv" rel="alternate" type="text/html"/>
                        <pubDate>Sat, 10 Mar 2007 17:03:51 UTC</pubDate>
                        <title>Will the “free” net survive 2007?</title>
                </item>
    </channel>
</rss>
