<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml">
  <channel>
    <title>Anders Englöf Ytterström</title>
    <description>Anders Englöf Ytterströms hemsida</description>
    <language>sv</language>
    <link>https://madr.se</link>
    <managingEditor>yttan@fastmail.se (Anders Englöf Ytterström)</managingEditor>
    <webMaster>yttan@fastmail.se (Anders Englöf Ytterström)</webMaster>
    <atom:link href="https://madr.se/prenumerera/inlagg.xml" rel="self" type="application/rss+xml" />
    
    
      
    
    
    
    
    <item>
      <title>Utskriftsvänligt program för Brutal Assault 2026</title>
      <link>https://madr.se/2026/ba26-running-order-pdf/</link>
      <guid>https://madr.se/2026/ba26-running-order-pdf/</guid>
      <description>
        <![CDATA[<p>Jag är ett stort fan av att kunna skriva ut programmet (<em>running order</em>) för en festival. Helst vill jag kunna vika denna två gånger och ha i fickan.</p>
<p>Sweden Rock Festival har ett bra format för detta, så när det verkade saknas för Brutal Assault ägnade jag en kväll åt att ordna det.</p>
<ul>
<li><a href="https://cdn.madr.se/ba26/brutal-assault-2026-running-order.pdf">Brutal Assault 2026 running order, PDF</a></li>
<li><a href="https://cdn.madr.se/ba26/brutal-assault-2026-running-order.html">Brutal Assault 2026 running order, HTML</a></li>
</ul>
<p>HTML-mallen ska jag nog rugga upp och behålla! Ett script som skulle kunna skapa en sådan från en CSV vore nog också bra, under MIT eller 0BSD-licens. Jag återkommer. :)</p>
]]>
      </description>
      <pubDate>sat, 27 jun 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Internets betalmodell är i stor förändring</title>
      <link>https://madr.se/2026/gratis-internet/</link>
      <guid>https://madr.se/2026/gratis-internet/</guid>
      <description>
        <![CDATA[<p>För tio år sedan publicerade PPK <a href="https://www.quirksmode.org/blog/archives/2016/03/the_webs_origin.html">The web’s original sin</a>. Formuleringen är stark och lämnade ett bestående intryck hos mig.</p>
<blockquote>
<p>Free content and services have become an entitlement — an unearned privilege. There’s nothing inevitable about content and services being free, although we collectively chose to make free content a cornerstone of the web. That choice, I now think, is the web’s original sin.</p>
</blockquote>
<details>
<summary>Vem f-n är PPK? Aldrig hört talats om!</summary>
<p>För de som inte minns PPK, så var hans webbplats för en tid en ovärderlig källa för information på tiden innan sidor som <a href="https://caniuse.com">caniuse.com</a>, <a href="https://developer.mozilla.org/">MDN</a> fanns. Nybörjare och amatörer använde <a href="https://www.w3schools.com/">W3Schools</a>, proffs använde <a href="https://quirksmode.org/compatibility.html">Quirksmode Compability tables</a>.</p>
<p>Han drev den webbplatsen utan annonser, helt själv, i många år. Varenda test och iakttagelse är hans egna. Det är tiotusentals, kanske till och med hundratusentals timmar av välgörenhet. Detta gjorde han samtidigt som han frilansade på heltid. När han kröp till korset och <a href="https://quirksmode.org/blog/archives/2011/06/donation_drive.html">tiggde om donationer</a> strömmade folk in.</p>
</details>
<p>Det är dock inte PPK som föranledde det här inlägget. Det är Googles stora steg framåt, som It's FOSS skrev om som ett viktigt meddelande i veckobrev <a href="https://itsfoss.com/newsletter/foss-weekly-26-24/">26.24</a>:</p>
<blockquote>
<p>The thing is that Google Search is gone. Not broken but gone. What replaces it is an AI that reads the web, summarizes it, and hands you the answer directly. <strong>No links. No clicks. No visits to the sites that actually wrote the content.</strong></p>
</blockquote>
<p>Detta har tolkats som en dolkstöt av rang.</p>
<blockquote>
<p>For the past two decades, a quiet but fair deal powered the open web: you search, you click, we earn a little from ads, and we use that to keep writing. That deal is over. Google now takes our content, serves the answer, and the publisher gets nothing. Not even a visit.</p>
</blockquote>
<p>För små oberoende webbplatser är detta katastrofalt.</p>
<blockquote>
<p>Since the launch of ChatGPT, It's FOSS has already lost 80% of its Google search traffic. And it's alarming now.<br />
...<br />
The big publishers will survive this. They have corporate backing, licensing deals, and investors to absorb the losses. We don't. What we have is you.</p>
</blockquote>
<p>Jag kan dock inte säga att detta förvånar mig. Internet har inte mått bra av rådande finansieringsläge.</p>
<p>Som PPK skriver så är förväntan på att allt ska vara fritt inte bra. Google kan 100% backa upp detta med att det är vad stora majoriteten av deras användare vill ha.</p>
<p>För 5 år sedan länkade jag till <a href="https://how-i-experience-web-today.com/">How I experience web today</a>. Den aktualiserar fortfarande saker som gör ont.</p>
<ol>
<li>Cookie-bannern som behöver godkännas. (Tack för det, EU.)</li>
<li>En invasiv förfrågan om att tillåta skrivbordsnotiser i bakgrunden, i två steg.</li>
<li>En invasiv förfrågan om att prenumerera på sajtens nyhetsbrev.</li>
<li>En mask och ett argt offerkofta-meddelande om att din AdBlocker behöver stängas av.</li>
<li>En invasiv förfrågan om att betala för klicket.</li>
<li>En utgråad fade över texten med en knapp märkt som en länk: "fortsätt läs".</li>
<li>Efter 6 klick visas sidan. Saker blinkar och hoppar, i takt med att megabytes av data läses in.</li>
<li>Scrollar du en gång - får du den andra (och ej sista) notisen om att du borde prenumerera på nyhetsbrevet.</li>
<li>Försöker du stänga filen eller ladda om den, så finns en bekräftelseruta som varnar för att "ändringarna du gjorde kanske inte sparas". Vad nu det betyder.</li>
</ol>
<p>På sidan ligger även en invasiv banner för att köpa något på sidan, en feedback-widget och en chattbot-ruta som öppnats utan att du har bett om det. En video med en annons, som börjar spela och inte skrollar ur bild när du navigerar neråt, ligger redo att gå till attack.</p>
<p>Det ligger också uppskattningsvis 400-500KB (en halv MB) JavaScript från tredje part som dammsuger så mycket de kan baserat på hur liberal din webbläsares inställningar är. <strong>Tips: neka omedelbart tredjepartscookies i din webbläsare</strong>.</p>
<p>Spår- och annonsblockerare tar bort en majoritet av dessa element, och låter dig läsa texten. Men inte allt av det. Hur många mantimmar det går åt varje år för att försöka bekämpa annons- och spårarblockering, och hur högt detta prioriteras över annat, vill jag inte ens föreställa mig.</p>
<p>Det är detta hostila antianvändarbeteende som Google adresserar med sin ändring. Eller ja, det är vad de kan använda som motivation utåt för att göra det bättre för sina användare. Litet likt hur Apple introducerade innehållsblockering på operativystemsnivå för iOS för 10 år sedan (med <a href="https://www.wired.com/2015/06/apples-support-ad-blocking-will-upend-web-works/">domedagsförebådande rubriker</a>).</p>
<p>Alla är skyldiga i den här situationen.</p>
<ul>
<li>Alla användare som förväntar sig få innehåll på Internet gratis.</li>
<li>Alla utvecklare och tekniskt kunniga utan kurage att följa <a href="https://www.w3.org/TR/design-principles/#priority-of-constituencies">första regeln i Web Platforrm Design Principles</a>.</li>
<li>Alla sidägare som desperat försöker få finansiering genom att sälja sin webbplats själ till djävulen.</li>
</ul>
<p>Urvattningen av hemsidorna började innan. <a href="https://theoatmeal.com/comics/reaching_people_2021">Reaching people</a> från 2021 är ett förenklat, men tydligt exempel på det. På tiden jag jobbade på byrå var många kunder tydliga med att "folk måste stanna på vår hemsida!!!1" i någon sorts hets att skapa "engagement", "commitment" och annat styrelsemötesflumm.</p>
<ul>
<li>Tweets om företaget skulle bäddas in på webbplatsen.</li>
<li>Instagram-feeds skulle bäddas in på webbplatsen.</li>
<li>Ljud och video skulle bäddas in på webbplatsen.</li>
</ul>
<p>Att länka bort från sajten utan att öppna i nytt fönster var det bildligt dödsstraff på.</p>
<p>Anledningen? Man mätte värdet i produkten - webbplatsen - baserat på tiden folk spenderade där. Mer tid ledde till högre annonspriser, vilket ledde till högre vinst.</p>
<p>Av samma skäl slog aldrig RSS igenom heller, då den tekniken saknade telemetry och kundengagemang. Inga seriösa publikationer lade hela innehållet i RSS-flödena, utan hade bara en clickbait-rubrik som hade samma syfte som en klassisk löpsedel: slira lagom mycket på sanningen och ordvalen för att "uppmuntra" (se: "lura") folk att köpa tidningen eller besöka länken.</p>
<p>När det blev uppenbart att sociala medier började reducera klicken och äga folks uppmärksamet, försökte flera under paraplyet "gammelmedia" att hitta sätt att utkräva kompensation för uteblivna annonsintäkter.</p>
<ul>
<li>På EU-nivå diskuterades <a href="https://emanuelkarlsten.se/artikel-11-det-har-kommer-det-innebara-i-praktiken/">Artikel 11, "länkskatten"</a>. I samma artikel finns tidigare misslyckade försök att få sociala medier att betala gammelmedia.</li>
<li>En lång, nyttig text från 2019 om det - 2–3 år före första ChatGPT - finns här: <a href="https://thecorrespondent.com/100/the-new-dot-com-bubble-is-here-its-called-online-advertising">The new dot com bubble is here: it’s called online advertising</a>.</li>
</ul>
<p>Den riktiga mardrömmen började dock 2022 när ChatGPT uppvisade framtiden.</p>
<p>Google spenderade 3 årtionden åt att bygga upp en teknisk lösning för att samla in underlag för att visa adresserade annonser. Meta gjorde detsamma, men med andra förutsättningar. Ett vanligt förekommande citat är detta, som ett kvitto:</p>
<blockquote>
<p>The best minds of my generation are thinking about how to make people click on ads.</p>
</blockquote>
<p>I såväl Googles som Metas kunde sedan använda samma lösning för att få träningsdata till sina LLM. Google ska nu ersätta sin sökruta med en prompt, och Meta skapar botnätverk som rage baitar folk till att spendera mer tid och uppmärksamhet i deras appar.</p>
<p><em>Hur Google tjänar pengar på detta vet jag inte. Jag har en känsla av att Google sågar av grenen de sitter på genom att göra sin egen ad tech överflödig. Den ad tech som hela tiden finansierat dem. Jag välkomnar en granskning här.</em></p>
<p>Personligen så har jag slutat söka med Google och sökmotorer. Deras kvalitet har varit så usel senaste året att jag helt enkelt har gett upp. Jag använder dock inte LLM i första taget, utan väljer istället att försöka läsa mig till vad jag behöver i dokumentation och text - samt flitigt bokmärka allt jag hittar av värde för att slippa söka en gång för mycket.</p>
<p>Jag vägrar också att använda Youtube på handhållen enhet, eller att använda Internet överhuvudtaget utan spårblockering, annonsblockering och nekande av tredjepartcookies. Jag har övergått till att återigen använda RSS och nyhetsbrev för att få nyheter, eftersom det är dirket användarhostilt att surfa runt och läsa det på webbplatserna för de ämnen eller produkter jag följer.</p>
<p>Jag har ett smurfkonto på Instagram för att kunna ta del av nyheter, eftersom många mindre aktörer med begränsade resurser - t ex band, evenemangsarrangörer, konstnärer eller nördar - enbart postar sina nyheter där istället för på en egen webbplats där de själva äger informationen. Den tekniska investeringen bedöms som för stor, vilket jag förstår helt.</p>
<p>Vad jag försöker göra är att rösta med plånboken. Jag är månadsgivare till flera seriösa innehållsskapare. Det finns dock en övre gräns för hur mycket jag kan avvara.</p>
]]>
      </description>
      <pubDate>mon, 22 jun 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>För 18 år sedan var mktwebb i ropet</title>
      <link>https://madr.se/2026/mktwebb/</link>
      <guid>https://madr.se/2026/mktwebb/</guid>
      <description>
        <![CDATA[<p>Jag hade en mycket (<em>mkt</em>) brant kurva som junior utvecklare. Spola tillbaka till första kvartalet 2008.</p>
<p>Min provanställning på mitt första jobb hade precis övergått till en fast tillsvidareanställning när jag, efter några månaders kodbidragsgivande, utsågs till leveransansvarig för JavaScript. Jag hade under vintern och våren imponerat på mina seniora mentorer såpass mycket att de litade på att jag kunde axla ansvaret.</p>
<p>Detta var i <a href="https://www.mynewsdesk.com/se/polopoly/pressreleases/pressrelease-fraan-mktmedia-mediasveriges-stoersta-webbsatsning-ger-svenska-lokaltidningar-stark-framtidsposition-240267">Mktwebb</a>, som beskrivs såhär:</p>
<blockquote>
<p>Sveriges genom tiderna största samordningsprojekt inom medievärlden, Mktwebb, ska rita om kartan över den internationella och nationella annonsmarknaden. Under 2008 får 47 svenska dagstidningar en ny gemensam webbplattform för sina nätupplagor. Målet är att binda samman de starka lokala plattformarna till en gemensam nationell aktör inom affärsutveckling och annonsförsäljning.</p>
</blockquote>
<p>Teknikstacken var <em>state of the art</em> på den tiden.</p>
<ul>
<li>XHTML 1.0 Strict - 100% validerad.</li>
<li>CSS-baserad layout, enl CSS 2 (ej CSS 2.1).</li>
<li>Webbläsarkrav: Internet Explorer 6+, Firefox 2.5+.</li>
<li>All JavaScript skulle vara unobtrusive.</li>
<li>Prototype.JS, version 1.6.</li>
</ul>
<p>Det känns otroligt länge sedan. Det var flera år innan <em>HTML5"</em>. jQuery valdes bort då Prototype var det som började användas innan jag kom in i projektet, och det fanns ingen anledning att låta den vara kvar.</p>
<p>Det fanns ett syskonprojekt, Mktmobil, som skulle lösa mobilbehovet: detta var 3 år innan <em>Responsive Webdesign</em>.</p>
<p>För en delkomponent övervägdes Adobe Flex, men det blev istället JavaScript.</p>
]]>
      </description>
      <pubDate>fri, 12 jun 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>The Distinguished Gentleman</title>
      <link>https://madr.se/2026/tdgr-fordon/</link>
      <guid>https://madr.se/2026/tdgr-fordon/</guid>
      <description>
        <![CDATA[<p>Jag har länge varit medveten om <a href="https://gentlemansride.com/">The Distinguished Gentleman's Ride</a> (DGR), det arrangemang där damer och herrar klär upp sig fint och åker motorcykel för att samla in pengar till prostatacancer och andra hälsoproblem för män. Tweedkostymer, vaxade mustascher, ett strikt urval av godkända fordon enligt en <a href="https://gentlemansride.com/about/style-guide">Stilguide</a>.</p>
<p>Då jag börjar bli till åren har jag insett att jag nog skulle vilja skaffa MC-behörighet för att öppna fler dörrar till rekreation. Jag gillar skarpt stilen på de motorcyklar som DGR förordar. Så vilka motorcyklar är egentligen godkända? Jag tog mig litet tid att kika.</p>
<ul>
<li><strong>Huskvarna</strong> har ett par godkända fordon: Svartpilen 401 och Vitpilen 401.</li>
<li><strong>Royal Enfield</strong> verkar vara prisvärda och har litet att välja på. Interceptor 650, Continental GT 650, Classic 350, Bullet 350, Scram 411 och Bear 650 är alla godkända.</li>
<li><strong>Triumph</strong> är litet mer premium och det märke jag först lade märke till för DGR. Speed 400, Scramber 400 X, Speed Twin 900, Street Twin.</li>
<li><strong>Suzuki</strong> har en modell som är stilsäker: SV650X.</li>
</ul>
<p>Förutom MC-kort funderar jag även på Skoterkort. Möjligheter förnöjer.</p>
]]>
      </description>
      <pubDate>fri, 12 jun 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Ytterligare 2 varianter av okonventionella telefoner</title>
      <link>https://madr.se/2026/volla-fairphone/</link>
      <guid>https://madr.se/2026/volla-fairphone/</guid>
      <description>
        <![CDATA[<p>En liten uppföljning på <a href="/2026/phones/">min tidigare spaning</a>.</p>
<h2>Fairphone - Med hållbarhet och klimatavtryck i fokus</h2>
<p>Gröna klimatmedvetena personer har länge kikat på Fairphone. Dessa kan om man vill komma förinstallerade med /e/os, som är en EU-utvecklad Android-ROM. Deras primära fokus är att se till att telefonen ska vara enkel att reparera och hålla vid liv länge.</p>
<ul>
<li><a href="https://www.fairphone.com/">Fairphone</a></li>
</ul>
<h2>Volla phone - tysktillverkad telefon med Ubuntu Touch eller avgooglad Android</h2>
<p>Jag har tyvärr ingen koll på denna, men jag gillar såklart Europeiska företag med bra visioner. Deras Android är Volla OS, som är helt avgooglad. Företaget är Tyskt.</p>
<p>Detta är en intressant telefon då den verkar vara packa upp, starta och kör - med det väsentliga av Graphenes och LineageOS fördelar.</p>
<ul>
<li><a href="https://volla.online">Volla</a></li>
</ul>
]]>
      </description>
      <pubDate>wed, 10 jun 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Några lärdomar från att sätta upp Ansible</title>
      <link>https://madr.se/2026/pro-ansible/</link>
      <guid>https://madr.se/2026/pro-ansible/</guid>
      <description>
        <![CDATA[<p>Jag har senaste året förkovrat mig ordentligt i Ansible för att automatisera saker på servrar. Detta inlägg sammanfattar några viktiga lärdomar för referens i framtiden.</p>
<h2>Struktur i inventory spelar stor roll</h2>
<p>Var noga med att strukturera inventory-filen. Det lönar sig. Var inte blyg för att lägga servrar med flera syften på mer än ett ställe. Lär dig att uppskatta nästling.</p>
<h2>group_vars och host_vars importerar saker automatiskt</h2>
<p>För varje maskin som kör playbooks så kommer Ansible <strong>automatiskt att inkludera filer</strong> med variabler (<em>vars</em>). Man behöver inte använda <code>include_vars</code>.</p>
<p>Så givet följande inventory:</p>
<pre><code class="language-yaml">servers:
  demandred:
  rahvin:
  ishamael:
  samael:
</code></pre>
<p>och följande Ansible playbook-kommando:</p>
<pre><code class="language-sh">ansible-playbook -i inventory.yml install.yml
</code></pre>
<p>Så kommer följande att hända:</p>
<ol>
<li>Ansible kommer att leta efter <code>./group_vars/servers.yml</code> och automatiskt inkludera den om den finns.</li>
<li>Ansible kommer att leta efter <code>./group_vars/servers/</code> och automatiskt inkludera alla filer i katalogen om den finns.</li>
<li>För varje maskin, så kommer Ansible att kika efter en katalog eller en fil i <code>./host_vars/&lt;server&gt;</code> enligt samma princip som ovan. Exempel: <code>./host_vars/demandred.yml</code>, <code>./host_vars/demandred/*.yml</code>.</li>
<li>Om det finns <code>host_vars</code>, skriver dessa över tidigare inkluderade variabler från <code>.group_vars</code>.</li>
</ol>
<p>Detta är en konvention som är otroligt tacksam och kraftfull. Det funkar även med nästlade grupper, där föräldern alltid skrivs över av barnet.</p>
<p>Så prioordningen blir denna: <code>parent_group_vars &lt; child_group_vars &lt; host_vars &lt; lokala vars</code>.</p>
<h2>Jobba med modularitet</h2>
<p>Istället för att kopiera tasks mellan playbooks, lägg vanligt återanvända tasks i egna filer och importera dem med <code>import_tasks</code>. <code>pwd</code> är det playbooken som avgör.</p>
<p>Så här ser t ex min playbook för att konfigurera servrar ut:</p>
<pre><code class="language-yaml">- name: Konfigurera server
  hosts: servers
  tasks:
    - import_tasks: tasks/segments/apt_install.yml
    - import_tasks: tasks/segments/sysctl.yml
    - import_tasks: tasks/segments/apparmor.yml
    - import_tasks: tasks/segments/logrotate.yml
    - import_tasks: tasks/segments/nagios.yml
    - import_tasks: tasks/segments/otelcol_install.yml
    - import_tasks: tasks/segments/otelcol_config.yml
    - import_tasks: tasks/segments/server_dirs.yml
</code></pre>
<p>Så här ser ett "segment" ut, för att installera paket och ta bort ej använda paket.</p>
<pre><code class="language-yaml">- name: Uppdatera APT-repositorier
  become: true
  ansible.builtin.apt:
    update_cache: true

- name: Uppgradera systempaket
  become: true
  ansible.builtin.apt:
    name: "*"
    state: latest

- name: Avinstallera ej använda dependencies
  become: true
  ansible.builtin.apt:
    autoremove: true
    purge: true
</code></pre>
<h2>Ansible vaults funkar precis som vanliga inkludes</h2>
<p>Lägg Ansible Vaults på samma ställen som du skulle ha lagt en vanlig fil med variabler. <code>group_vars</code> och <code>host_vars</code> är bra startlägen.</p>
]]>
      </description>
      <pubDate>fri, 05 jun 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Tack för tiden, Github</title>
      <link>https://madr.se/2026/github/</link>
      <guid>https://madr.se/2026/github/</guid>
      <description>
        <![CDATA[<p>Jag vet inte när jag skaffade mitt konto på Github. I det vi kallade web 2.0 var det viktigt att tinga sitt användarnamn i alla tjänster som på den tiden ploppade upp som svampar. Om jag fick gissa, skaffade jag förmodligen mitt konto runt 2008-2009 när jag, precis som alla andra, började migrera från Subversion till Git.</p>
<p>Under många år var det självklart att all kod jag skrev för egen räkning hamnade där, under MIT-licens eller motsvarande. Likaså var det där jag förväntade mig att hitta andra personers kod. Mitt mest erkända kodförråd var ett <a href="https://codeberg.org/madr/css3-sass-mixins/src/branch/main/_all.scss">litet portabelt bibliotek</a> för att underlätta hantering av CSS3 vendorprefix med hjälp av Sass. Det fick uppemot 150 stjärnor och några bidrag innan vi gick mot bättre tider där varken vendorprefix eller Sass behövdes.</p>
<p>Som kuriosa så fanns detta lilla bibliotek i källkoden hos en arbetsplats jag började på 2017. Min första vecka var det några kollegor som kommenterade att mitt namn redan fanns i deras kodförråd, flera år innan min egna första commit gjordes.</p>
<p>Min Githubprofil har visats upp i flera rekryteringsprocesser för mig, och speglat väl mina kvalificationer - och mina framsteg för att få dem - för att såväl skriva kod som att versionshantera kod.</p>
<p>De åren jag kommer att ta med mig i graven som de bästa åren i min karriär hände på Github - med pull requests, issues, byggpipelines och kod.</p>
<p>Nu är det dock slut.</p>
<h2>Enshittification</h2>
<p>Det började kännas olustigt med små steg. Microsoft köpte Github, och började göra Github till något annat än kodförråd. Så småningom fanns ticketsystem, projektplanering, byggagenter, CI, paketförråd och annat på plats under Github-fanan. Alla priser för premium sänktes rejält. Features som tidigare kostat pengar - exempelvis privata kodförråd - blev gratis.</p>
<p>Det var litet för bra för att vara sant. Och när den generativa AI:n kom var det uppenbart varför Github var så mån om att ha <em>allt</em>.</p>
<p>Något började plötsligt kännas otroligt fel, och när jag snubblade över <a href="https://forgejo.org">Forgejo</a> återgick jag till att självhosta mina kodförråd - för första gången på över 15 år. Jag migrerade mina privata projekt dit, men behöll mina mer publika saker på Github.</p>
<p>Det fortsatte dock att gå åt fel håll.</p>
<ul>
<li>Sök började kräva inloggning.</li>
<li>Surfa runt och läsa källkod eller dokumentation började kräva inloggning (även om det verkar <a href="https://www.reddit.com/r/github/comments/1llp9ai/github_no_longer_allows_unauthenticated_users_to/">bero på att jag sitter på ett stort kontorsnät</a>).</li>
</ul>
<p>Min bestående känsla är att Microsoft vill försöka freda Githubs kod från andra AI-crawlers än sina egna. Oavsett mina känslor kring att de tränar LLM:er med min och andras källkod.</p>
<p>Jag tog till slut bort mina sista publika kodförråd också. Min profil togs bort för någon vecka sedan, och det var synnerligen odramatiskt och ickesentimentalt. Några kodförråd, t ex <strong>Smed</strong> (som bygger denna webbplats), ligger istället på <a href="https://codeberg.org">Codeberg</a> (mitt namn bör vara lätt att gissa).</p>
<p>Tack för allt, Github. Nog är dock nog.</p>
]]>
      </description>
      <pubDate>mon, 01 jun 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Första intrycket av Apple Music</title>
      <link>https://madr.se/2026/apple-music/</link>
      <guid>https://madr.se/2026/apple-music/</guid>
      <description>
        <![CDATA[<p>I takt med att Spotify blir allt mer invasiv i sin strävan att få mig att lyssna på poddar och AI-inlästa ljudböcker, har jag bestämt mig för att utvärdera alternativen. Jag är inte okej med att min månadsavgift för Spotify Premium (som bara blir dyrare) verkar gå till annat än <strong>musik</strong> i Spotify. Det är musiken jag vill ha, inte det andra.</p>
<p>Först ut: <strong>Apple Music</strong>, som jag kört i en vecka. Jag ville skriva ner några spontana insikter jag fått av de första dagarnas användning, så att de inte glöms bort.</p>
<p>Saker jag gillar:</p>
<ul>
<li>Det är mer fokus på musiken, precis som jag önskade mig.</li>
<li>Apple Music har en <strong>evenemangskalender</strong>, som verkar mer eller mindre likvärdig med Spotifys (som är acceptabel). Det förväntade jag mig inte.</li>
</ul>
<p>Saker jag inte gillar:</p>
<ul>
<li>Appen känns krånglig att navigera. Det beror dock förmodligen på mig, med decennier av Spotify i tummens lokala muskelminne.</li>
<li>AI-genererade musiklistor känns invasiva. Det kan dock bero på att jag inte har så många egna spellistor ännu.</li>
<li>Jag är inte ett fan av liquid glass, och Apple Music utsätter mig för <a href="https://www.macobserver.com/news/liquid-glass-looks-cool-so-why-do-people-hate-it/">detta UI-elände</a>.</li>
</ul>
<p>För referens och tydlighetens skull: hur jag lyssnar på musik beskrivs nedan.</p>
<ul>
<li>Spotify (och dess ersättare) handlar för mig primärt om <em>utforskande</em> och <em>upptäckande</em>. Jag vill få förslag när jag frågar efter det, och få notiser när artister jag följer släpper nytt material.</li>
<li>I stort sett all musiklyssning sker via telefonen.</li>
<li>På jobbet och i rörelse används ett par in-ear hörlurar.</li>
<li>Hemma eller på camping används en SOUNDBOKS, primärt utomhus.</li>
</ul>
<p>Musiken jag redan älskar äger jag på vinyl, CD eller fil. Den lyssnar jag på via stereo och en gammal iPod.</p>
<p>Spotify har jag prenumererat på sedan 2008-2009. Det var en bra tid. Men det är dags att säga hejdå.</p>
]]>
      </description>
      <pubDate>sun, 31 may 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Gå och se Watain innan det är försent</title>
      <link>https://madr.se/2026/watain/</link>
      <guid>https://madr.se/2026/watain/</guid>
      <description>
        <![CDATA[<p>Watain lägger ner september 2028. De ska turnéra ett tag till, och avsluta med att ge ut sitt åttonde album, som inte får någon release-turné.</p>
<p>Jag tror inte Watain kommer tillbaka. Detta är slutet. Jag förstår folks frestelse att skämta om det och folks ifrågasättande att de menar allvar - många andra band gör inte det.</p>
<h2>En uppmaning</h2>
<p>Jag har en uppmaning till personer som kan tänkas läsa detta. <strong>Passa på att gå att se Watain innan de lägger ner.</strong> De kommer inte spara på någonting. De kommer göra sitt yttersta för att gå ut på en så stark, äcklig, vämjelig och mörk not som möjligt. Med risk för att låta för själslig: deras förmåga att via en ceremoni öppna stora tunga portar till nya dimensioner av Dig - att få känna saker hårt tyglat och djupt nedtryckt i medvetandet - är det få andra band som kan matcha.</p>
<ul>
<li>Har du inte sett Watain, är det nu du har din chans.</li>
<li>Har du sett dem förut, så se dem igen. Oavsett om du ogillade det eller inte.</li>
</ul>
<h2>Varför?</h2>
<p>Vid omnämnande av Watain brukar en del saker vara återkommande.</p>
<ul>
<li>"Watain är mainstream och sell-outs, de är inte TRVE"</li>
<li>"Watain är otrevliga elitister utan självdistans"</li>
<li>"Watain är nazister och extremhöger"</li>
</ul>
<p>Själva har de, särskilt i samband med beskedet om sitt avslut, skrivit mycket om att de håller fanan för en subkultur som förändrats åt riktningar de själva inte nödvändigtvis vill förknippas med. Black Metal som subkultur och musikgenre är ett minfält av skikt, lager och extrema yttringar.</p>
<p>För att höra deras egna ord, kan jag rekommendera följande källor.</p>
<ul>
<li><a href="https://www.podbean.com/media/share/pb-bc3uw-120fe45">ROCKPODDEN #275 Erik Danielsson, Watain</a> - Från 2022.</li>
<li><a href="https://www.goodreads.com/sv/book/show/12810127-blod-eld-d-d">Blod, eld, död: en svensk metalhistoria</a></li>
<li><a href="https://www.svtplay.se/helvete-historien-om-norsk-black-metal">Helvete - historien om norsk Black Metal</a></li>
<li><a href="https://www.youtube.com/watch?v=qWkQBKW1cmw"> Erik Danielsson talks his 10 favourite albums (Watain)</a></li>
</ul>
<h2>Personliga höjdpunkter</h2>
<p>För mig är Watains konstnärliga uttryck något extra. Det finns äldre Black Metal-band än dem. Det finns mer framgångsrika Black Metal-band än dem. Det finns mer TRVE Black Metal-band än dem (säkerligen, vad betyder det ens längre?). För mig finns det dock inget annat band om levererar en helhet med sådan omsorg för alla de tusentals små detaljerna. Deras kärlek och passion för konstnärsskapet är för mig omatchad.</p>
<p>Deras konserter har beskrivits som <em>ceremonier</em>. Jag tycker att det är ett bra ord för vad man kan förvänta sig.</p>
<p>Jag har inte sett bandet ens hälften så mycket som jag hade önskat. Många av bandets mest omsorgsfulla ceremonier har jag tyvärr uteblivit på. Jag vill trots detta nämna dessa fyra, då de har en särskilt plats i mina minnen och min identitet.</p>
<ul>
<li><strong>Club Destroyer, Sundsvall, 2007</strong>. Min första ceremoni med Watain. Odören av blod i den lilla lokalen gjorde att delar av mitt sällskap gick ut för att spy och inte kunde förmå större delen av sällskapet att komma in igen.</li>
<li><strong>Kraken 2018</strong>. Jag hade blåmärken överallt efteråt. Utställningen på denna var något extra. Tributen till Dissection med The Somberlain blev en personlig premiär, och en milstolpe i mitt liv. Jag kylde av mig med en nattlig promenad i Tierp i väntan på ett tågbyte.</li>
<li><strong>Gefle Metal Festival 2023</strong>. Pelle sa några ord vid micken, enda gången jag fått höra det. Han bad oss att vända oss till vår granne och slå grannen jävla hårt på käften. Erik i sin tur gjorde antagandet att vi söp, knullade och slogs. Några i publiken var inte beredda på detta.</li>
<li><strong>Dalhalla 2024</strong>. Jag var nyopererad från en blindtarmsinflammation, och åkte till Dalhalla med en molande värk, stelhet och en medvetenhet om att min kropp hade brustit och börjat läka. Jag tog liten risk med det, då det var i slutfasen av helandet. Jag var däremot i ett sinnelag som gjorde mig mer mottaglig att ta in den kvällens ceremoni, som var spektakulär.</li>
</ul>
]]>
      </description>
      <pubDate>thu, 28 may 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Fråga efter bekräftelse på åtgärd i POSIX skalskript</title>
      <link>https://madr.se/2026/posix-script-confirmation/</link>
      <guid>https://madr.se/2026/posix-script-confirmation/</guid>
      <description>
        <![CDATA[<p><code>#!/bin/bash</code> i all ära, men vad om <code>#!/bin/sh</code> - den minsta gemensamma nämnaren för <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">POSIX-compliance</a>?</p>
<p>Detta inlägg visar hur ett skript <strong>tar emot hemlig inmatning och sparar i en variabel</strong> (t ex lösenord, tokens) med maximal portabilitet.</p>
<h2>Skriptkod</h2>
<p>Nedan visar exempel på att bekräfta en önskad åtgärd. Vid tryck på <code>Enter</code> sparas den inmatade texten i variabeln <code>ans</code>. För att få till felhantering behövs en loop som inte låter användaren fortsätta förrän ett giltigt värde matats in.</p>
<p>Exempel 1 - Bekräftelse med default, ingen felhantering:</p>
<pre><code class="language-sh">#!/bin/sh
printf "Är du säker? [y/N] "
read -r i
case "$i" in
[yY])
        ans="y"
        ;;
""|[nN])
        ans="n"
        ;;
esac
printf "Du svarade: %s\n" "$ans"
</code></pre>
<p>Exempel 2 - Bekräftelse med default, med felhantering:</p>
<pre><code class="language-sh">#!/bin/sh
while [ -z "$ans" ]; do
        printf "Är du säker? [y/N] "
        read -r i
        case "$i" in
        [yY])
                ans="y"
                break
                ;;
        ""|[nN])
                ans="n"
                break
                ;;
        *)
                printf "Felaktigt svar! Ange \"y\" eller \"n\".\n"
                ;;
        esac
done;
printf "Du svarade: %s\n" "$ans"
</code></pre>
<p>Exempel 3 - Bekräftelse utan default, med felhantering:</p>
<pre><code class="language-sh">#!/bin/sh
while [ -z "$ans" ]; do
        printf "Är du säker? [y/n] "
        read -r i
        case "$i" in
        [yY])
                ans="y"
                break
                ;;
        [nN])
                ans="n"
                break
                ;;
        *)
                printf "Felaktigt svar! Ange \"y\" eller \"n\".\n"
                ;;
        esac
done;
printf "Du svarade: %s\n" "$ans"
</code></pre>
<h2>Verifiera: är detta POSIX-kompatibelt?</h2>
<p>Detta kontrolleras enklast med programmet <code>shellcheck</code>.</p>
<pre><code class="language-sh">shellcheck -s sh confirmation.sh
</code></pre>
<p>Detta är ett inlägg i en serie om att skripta Unixliknande system med maximal portabilitet. Förgående inlägg i serien: <a href="/2026/posix-user-input/">Inmatning av data i POSIX skalskript</a>.</p>
]]>
      </description>
      <pubDate>tue, 26 may 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Spaning på okonventionella telefoner</title>
      <link>https://madr.se/2026/phones/</link>
      <guid>https://madr.se/2026/phones/</guid>
      <description>
        <![CDATA[<p>IPhone och Android i all ära, men det är inte mycket spännande som händer där sedan många år. Det pågår däremot litet roliga satsningar ute i periferin, så jag skriver om några här.</p>
<h2>Dumber Mini - En dumbphone med Android</h2>
<p>Dumber Mini är EU-baserade och visionerar om en klassisk Nokia 3310, men med russinen från Smartphone-kakan. De bygger sitt operativsystem på på LineageOS och microG, och väljer att skeppa sin telefon med Aurora Store och utan webbläsare. Det är således en klassisk mobiltelefon, men med t ex Mobilt BankID, Swish, NFC-betalningar och Internetdelning.</p>
<p>Hur det är att använda denna för att visa QR-koder att scanna på ICA och på bussen återstår att se.</p>
<ul>
<li><a href="https://dumbermini.com/">Dumber Mini</a></li>
</ul>
<h2>Jolla Phone med SailfishOS</h2>
<p>Finska Jolla, med rötter från Nokia, fortsätter jaga sin vita val. Sailfish OS är en fortsättning på MeeGo, har ett kompabilitetslager för Android och kommer med en App Store förinstallerad.</p>
<p>Det är en helt vanlig telefon, men med Linux i botten istället för Android. Det är ännu obekräftat hur Mobilt BankID och Swish fungerar. De jobbar med små batches, och Jolla Phone CE är nuvarande iteration.</p>
<ul>
<li><a href="https://jolla.com/">Jolla Phone</a></li>
</ul>
<h2>Unihertz Jelly Star - världens minsta Androidtelefon</h2>
<p>Mjukvarumässigt är detta en vanlig Androidtelefon, men med en okonventionell formfaktor. Jag gillar att någon ifrågasätter det etablerade sättet att formge en telefon det senaste decenniet.</p>
<p>Projektet är backat av Kickstarter, och Jelly Star är den senaste iterationen. Även på denna är det obekräftat om QR-koder fungerar att scanna på ICA eller bussen.</p>
<ul>
<li><a href="https://www.unihertz.com/products/jelly-star">Unihertz Jelly Star</a></li>
</ul>
<h2>GrapheneOS har inlett partnerskap med Motorola</h2>
<p>GrapheneOS är den outtalade kungen av ungoogled Android, och har länge bara erbjudits till Google Pixels. De ska nu utöka till att stödja en serie med Motorola-telefoner, där GrapheneOS förväntas komma förinstallerat.</p>
<p>Dessa telefoner förväntas vara på marknaden 2027-2028.</p>
<ul>
<li><a href="https://www.reddit.com/r/GrapheneOS/comments/1o32gpg/comment/nivsx0k/">GrapheneOS svar i en Reddit-tråd</a></li>
<li><a href="https://motorolanews.com/motorola-three-new-b2b-solutions-at-mwc-2026/">Motorolas pressrelease</a></li>
</ul>
<h2>Volla phone - tysktillverkad telefon med Ubuntu Touch eller avgooglad Android</h2>
<p>Jag har tyvärr ingen koll på denna, men jag gillar såklart Europeiska företag med bra visioner. Deras Android är Volla OS, som är helt avgooglad. Företaget är Tyskt.</p>
<h2>Andra intressanta uppslag</h2>
<ul>
<li><a href="https://lineageos.org/">LineageOS</a> finns kvar för den som vill installera en Custom ROM. Jag gjorde detta på en rekondad OnePlus Nord och använde LineageOS som primär telefon 3 år 2021-2024.</li>
<li><a href="https://www.ubuntu-touch.io/features/">Ubuntu Touch</a> krigar på. Android-appar kan tydligen installeras med <a href="https://anbox.io/">Anbox</a> numera.</li>
<li><a href="https://e.foundation/e-os/">/e/os</a> finns sedan länge, men det är ingenting jag har personlig erfarenhet av.</li>
</ul>
]]>
      </description>
      <pubDate>thu, 21 may 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Några status boards från det förflutna</title>
      <link>https://madr.se/2026/classic-status-boards/</link>
      <guid>https://madr.se/2026/classic-status-boards/</guid>
      <description>
        <![CDATA[<p>Statusskärmar är tidlösa, särskilt när de är utsökt utformade.</p>
<p>I tider där OpenTelemetry och Grafana finns, så är det viktigt att inte underskatta att skala bort saker.</p>
<ul>
<li>Gör det så förenklat som möjligt. Mindre detaljer, mer fågelöversikt.</li>
<li>Lägg upp informationen på en dedikerad TV eller skärm.</li>
<li>Använd färg och humor.</li>
</ul>
<p><a href="https://blog.panic.com/the-panic-status-board/">The Panic Status Board</a> är en klassiker. Arkiverad kopia: <a href="https://web.archive.org/web/20230826202445/https://blog.panic.com/the-panic-status-board/">augusti 2023</a>.</p>
<p>Den inspirerades av Cultured Code, skaparna av Things.</p>
<ul>
<li><a href="https://web.archive.org/web/20110626120540/https://culturedcode.com/status/">Cultured Code status, maj 2011</a></li>
<li><a href="https://web.archive.org/web/20190317225703/https://culturedcode.com/status/">Cultured Code status, mars 2019</a></li>
</ul>
]]>
      </description>
      <pubDate>tue, 19 may 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Inmatning av lösenord och hemligheter i POSIX skalskript</title>
      <link>https://madr.se/2026/posix-secret-user-input/</link>
      <guid>https://madr.se/2026/posix-secret-user-input/</guid>
      <description>
        <![CDATA[<p><code>#!/bin/bash</code> i all ära, men vad om <code>#!/bin/sh</code> - den minsta gemensamma nämnaren för <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">POSIX-compliance</a>?</p>
<p>Detta inlägg visar hur ett skript <strong>tar emot hemlig inmatning och sparar i en variabel</strong> (t ex lösenord, tokens) med maximal portabilitet.</p>
<h2>Skriptkod</h2>
<p>Nedan visar exempel på att mata in text genom att skriva eller klistra in. Vid tryck på <code>Enter</code> sparas den inmatade texten i i variabeln <code>wisdom</code>.</p>
<p>Exempel 1 - Instruktion och inmatning <em>på en ny rad</em>:</p>
<pre><code class="language-sh">echo "Ange lösenord: "
stty -echo
read -r pw
stty echo
</code></pre>
<p>Exempel 2 - Instruktion och inmatning <em>på samma rad</em>:</p>
<pre><code class="language-sh">printf "Ange lösenord: "
stty -echo
read -r pw
stty echo
</code></pre>
<p>Exempel 3 - Visa bara instruktion och inmatning om variabeln <code>pw</code> inte är satt:</p>
<pre><code class="language-sh">if [ -z "${pw}" ]; then
	printf "Ange lösenord: "
	stty -echo
	read -r pw
	stty echo
fi
</code></pre>
<h2>Verifiera: är detta POSIX-kompatibelt?</h2>
<p>Detta kontrolleras enklast med programmet <code>shellcheck</code>.</p>
<pre><code class="language-sh">shellcheck -s sh posix-secret-user-input.sh
</code></pre>
<p>Detta är ett inlägg i en serie om att skripta Unixliknande system med maximal portabilitet. Förgående inlägg i serien: <a href="/2026/posix-user-input/">Inmatning av data i POSIX skalskript</a>.</p>
]]>
      </description>
      <pubDate>tue, 19 may 2026 00:00:00 ECT</pubDate>
      
    </item>
    
 </channel>
</rss>