<?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>Det går att skriva validerande HTML med Web components</title>
      <link>https://madr.se/2026/custom-elements-validity/</link>
      <guid>https://madr.se/2026/custom-elements-validity/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Det går att skriva validerande HTML med Web components | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Det går att skriva validerande HTML med Web components">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/custom-elements-validity/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Det går att skriva validerande HTML med Web components</h1>
    <div>2026-04-30 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>I takt med att <a href="https://arielsalminen.com/2026/progressive-web-components/">Progressive web components</a> (även omnämnd som <a href="https://adactio.com/journal/20618">HTML web components</a>) börjar etablera sig, så ställde jag mig själv en fråga som jag funderat på av och till.</p>
<p><strong>Om jag som utvecklare börjar lägga till egna HTML-element, innebär inte det att mina HTML-dokument slutar validera?</strong></p>
<p>Validerande HTML har varit ett krav i många offentliga upphandlingar och styrdokument. Jag själv försöker alltid att uppnå det i mina åtaganden och leveranser.</p>
<p>Korta svaret på min fundering är <strong>nej</strong>, men med förbehåll.</p>
<ul>
<li>Använd bindestreck i elementets namn för att tala om för HTML-validatorer att elementet är ett <a href="https://html.spec.whatwg.org/multipage/custom-elements.html">custom element</a>, och därmed undantas från valideringen.</li>
<li>Inte ett skallkrav, men använd <code>&lt;!DOCTYPE html</code>. Alla andra dokumenttyper är markerade som obsolete.</li>
</ul>
<p>Bindestreck är det väsentliga. För att se den fulla listan över kraven på namnstättning av egna Custom elements, läs avsnittet <a href="https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-core-concepts">Core Concepts i WHATWG HTML Living standard</a>.</p>
<h2>Exempel</h2>
<p>Följande är alltså <strong>inkorrekt</strong> HTML:</p>
<pre><code class="language-html">&lt;!-- Exempel 1: lista --&gt;
&lt;sortable&gt;
  &lt;ul&gt;
    &lt;li&gt;Smör&lt;/li&gt;
    &lt;li&gt;Ost&lt;/li&gt;
    &lt;li&gt;Bröd&lt;/li&gt;
  &lt;/ul&gt;
&lt;/sortable&gt;
&lt;!-- Exempel 2: formulär --&gt;
&lt;formenhancer&gt;
  &lt;form action="do"&gt;
    &lt;label&gt;
      Namn
      &lt;input name="name"&gt;
    &lt;/label&gt;
  &lt;/form&gt;
&lt;/formenhancer&gt;
</code></pre>
<p>Följande är <strong>korrekt, validerande</strong> HTML:</p>
<pre><code class="language-html">&lt;!-- Exempel 1: lista --&gt;
&lt;sortable-list&gt;
  &lt;ul&gt;
    &lt;li&gt;Smör&lt;/li&gt;
    &lt;li&gt;Ost&lt;/li&gt;
    &lt;li&gt;Bröd&lt;/li&gt;
  &lt;/ul&gt;
&lt;/sortable-list&gt;
&lt;!-- Exempel 2: Formulär --&gt;
&lt;form-enhancer&gt;
  &lt;form action="do"&gt;
    &lt;label&gt;
    Namn
      &lt;input name="name"&gt;
    &lt;/label&gt;
  &lt;/form&gt;
&lt;/form-enhancer&gt;
</code></pre>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-04-30. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Thu, 30 Apr 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Praktisk guide för att hålla dig till cURL</title>
      <link>https://madr.se/2026/praktisk-curl/</link>
      <guid>https://madr.se/2026/praktisk-curl/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Praktisk guide för att hålla dig till cURL | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Praktisk guide för att hålla dig till cURL">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/praktisk-curl/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Praktisk guide för att hålla dig till cURL</h1>
    <div>2026-04-17 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>Från <a href="https://justuse.org/curl/">Just use cURL</a></p>
<blockquote>
<p>Q: How do I organize my requests?<br />
A: Put your shell scripts into directories, genius.</p>
</blockquote>
<p>Så låt oss göra detta med praktiska exempel! Jag gjorde detta nyligen, så jag kan gå igenom det bit för bit hur jag gjorde.</p>
<p>Information om API jag önskar testa:</p>
<ul>
<li>API har tre miljöer: test, pt och prod.</li>
<li>Varje miljö har två API-endpoints: sandbox och production.</li>
<li>Autentisering sker med OAuth2 mot en HTTP-endpoint som har <em>client credentials grant</em>.</li>
</ul>
<p>Följande setup kommer skapas i detta inlägg:</p>
<ul>
<li>En katalog med versionerade POSIX-kompatibla script</li>
<li>Script för att skapa kontexter, t ex <code>TEST</code>, <code>PT</code> eller <code>PROD</code></li>
<li>Script för att skapa flera endpoints per kontext, t ex <code>SANDBOX</code> eller <code>PRODUCTION</code></li>
<li>Script för att förnya API access-tokens</li>
<li>Script för att byta och visa aktuell kontext</li>
<li>Exempel på script med API-anrop (<code>GET</code>, <code>POST</code>, <code>PUT</code>, <code>DELETE</code> och <code>PATCH</code>).</li>
<li>Exempel på script för att integrationstesta API</li>
</ul>
<p>Så här ser en typisk session ut:</p>
<pre><code class="language-sh">. .envs/prod/sandbox
./renew-token
./saker/GET/lista-alla-saker.curl
./saker/POST/skapa-sak.curl "saken"
./saker/DELETE/radera-sak.curl "saken"
./saker/POST/skapa-sak.curl "sak2"
./saker/PUT/uppdatera-sak.curl "sak2" "saken"
./saker/DELETE/radera-sak.curl "saken"
</code></pre>
<h2>Skapa nytt git-repo</h2>
<p>Det går såklart att göra detta med annan backup-lösning också, men <code>git</code> är vad jag föredrar.</p>
<pre><code class="language-sh">git init just-use-curl
cd just-use-curl
</code></pre>
<p>Jag skapar direkt en ignore-lista.</p>
<pre><code>cat &lt;&lt;END &gt; .gitignore
.curl-*-headers-file
END
</code></pre>
<h2>Grundläggande filstruktur</h2>
<p>Skapa litet filer och mappar:</p>
<pre><code class="language-sh">mkdir {.envs/{test,pt,prod},.tests}
touch .envs/{test,pt,prod}/{sandbox,production}
touch {renew-token,set-secrets,who-am-i}
chmod +x {renew-token,set-secrets,who-am-i}
cat &lt;&lt;END &gt; .gitignore
</code></pre>
<p>Nedbrytning om vad filerna gör:</p>
<ul>
<li><code>renew-token</code> gör ett HTTP-anrop mot en autentiserings-endpoint och sparar token i en fil som cURL sedan läser in som headers.</li>
<li><code>who-am-i</code> visar vilken kontext som för närvarande används.</li>
<li><code>set-secrets</code> är en <em>wizard</em> som ber om klient-ID och klient-hemlighet för API. Den är högst valfri.</li>
</ul>
<h2>Nedbrytning av script</h2>
<p>Det är primärt tre script, och ett valfritt script.</p>
<h3>init-env</h3>
<p>Scriptet sätter upp en miljö genom att fråga efter två saker:</p>
<ul>
<li>Webbadress för API (<code>API_ENDPOINT_URL</code>)</li>
<li>Webbadress för att skapa och förnya access tokens med OAuth2 (<code>TOKEN_ENDPOINT_URL</code>).</li>
</ul>
<p>Detta är innehållet:</p>
<pre><code class="language-sh">#!/bin/sh
step=1
uenv=$(echo "$1" | tr "[:lower:]" "[:upper:]")
printf "Skapar miljö - %s\n" "$uenv"
printf "[%s/2] Ange API_ENDPOINT_URL och tryck ENTER: " "$step"
read -r aeu
step=$((step + 1))
printf "[%s/2] Ange TOKEN_ENDPOINT_URL och tryck ENTER: " "$step"
read -r teu
step=$((step + 1))
mkdir -p .envs/"$1"
touch .envs/"$1"/."$1"
cat &lt;&lt;END &gt; .envs/"$1"/."$1"
export TOKEN_ENDPOINT_URL=$teu
export API_ENDPOINT_URL=$aeu
END
</code></pre>
<h3>who-am-i</h3>
<p>Ett script som skriver ut den aktuella kontexten. Kontexten väljs genom att source:a en av env-filerna, t ex såhär:</p>
<pre><code>. .envs/pt/sandbox; ./who-am-i
</code></pre>
<p>Detta är innehållet.</p>
<pre><code class="language-sh">#!/bin/sh
echo "TOKEN_ENDPOINT_URL:   $TOKEN_ENDPOINT_URL"
echo "API_ENDPOINT_URL:     $API_ENDPOINT_URL"
echo "API_KEY_TYPE:         $API_KEY_TYPE"
echo "CLIENT_KEY:           $CLIENT_KEY"
</code></pre>
<h3>renew-token</h3>
<p>Ett POSIX-script som kollar så att vi valt en kontext, och om vi har det - så skapas och sparas en ny access token.</p>
<p>Detta är innehållet:</p>
<pre><code class="language-sh">#!/bin/sh
: "${CLIENT_KEY?CLIENT_KEY saknas - aktivera en miljö?}"
: "${CLIENT_SECRET?CLIENT_SECRET saknas - aktivera en miljö?}"
: "${API_KEY_TYPE?API_KEY_TYPE saknas - aktivera en miljö?}"
: "${TOKEN_ENDPOINT_URL?TOKEN_ENDPOINT_URL saknas - aktivera en miljö?}"
: "${API_ENDPOINT_URL?API_ENDPOINT_URL saknas - aktivera en miljö?}"
CREDENTIALS=$(echo "$CLIENT_KEY:$CLIENT_SECRET" | base64)
TOKEN=$(curl -s -X POST "$TOKEN_ENDPOINT_URL" -d "grant_type=client_credentials" -H "Authorization: Basic $CREDENTIALS" | jq '.["access_token"]' | sed -e "s/\"//g")
cat &lt;&lt;END &gt; .curl-"$CLIENT_KEY"-headers-file
User-Agent: $USER-$(curl -V | head -n1 | awk '{print $1$2;}')
Accept: application/json
Authorization: Bearer $TOKEN
END
</code></pre>
<h3>Valfritt: set-secrets</h3>
<p>Ett script som ger instruktioner för att klistra in consumer keys och consumer secrets per miljö.</p>
<p>BRa att ha, men kan göras manuellt också. Här är innehållet:</p>
<pre><code>#!/bin/sh
API=$(basename "$PWD")
clear
client_credentials () {
	step=1
	echo "[$step/5] Gå till API i utvecklarportalen, och dess Subscriptions."
	echo "      Välj där korrekt Application, och använd kopieringsverktyget"
	echo "      på värdena."
	echo "      OBS! ingen inklistring av *secrets* kommer att skrivas på"
	echo "      skärmen av säkerhetsskäl."
	for env in "sandbox" "production"; do
		uenv=$(echo "$env" | tr "[:lower:]" "[:upper:]")
		step=$((step + 1))
		printf "[%s/5] Klistra in %s \"Consumer Key\" och tryck ENTER: " "$step" "$uenv"
		read -r ck
		step=$((step + 1))
		printf "[%s/5] Klistra in \"Consumer Secret\" för %s och tryck ENTER: " "$step" "$uenv"
		stty -echo
		read -r cs
		stty echo
		echo ""
		cat &lt;&lt;- END &gt; ./.envs/"$1"/"$env"
		. ./.envs/$1/.$1
		export API_KEY_TYPE=$env
		export CLIENT_KEY=$ck
		export CLIENT_SECRET=$cs
		END
	done
	printf "Consumer key+secret är sparad för %s!\n" "$1"
}
echo "Sätter consumer key+secret för: $API"
for env in "test" "pt" "prod"; do
	yN=""
	while true; do
	    printf "Sätt secrets för %s i %s? [y/N]: " "$API" "$env"
	    read -r input
	    case "$input" in
		[yY])
		    yN="y"
		    break
		    ;;
		""|[nN])
		    yN="n"
		    break
		    ;;
		*)
		    printf "[!] Felaktigt svar! Ange \"y\" eller \"n\".\n"
		    ;;
	    esac
	done
	if [ "$yN" = "y" ]; then
	    client_credentials "$env"
	fi
done
</code></pre>
<h2>Skapa miljöerna</h2>
<p>Varje miljö (test, pt och prod) har två endpoints, sandbox och production.</p>
<p>Följande kommandon skapar miljöerna:</p>
<pre><code class="language-sh">./init-env test
./init-env pt
./init-env prod
</code></pre>
<p>Jag vill sedan ange OAuth-keys och -secrets, det gör jag med:</p>
<pre><code>./set-secrets
</code></pre>
<p>Verifiera så allt funkar:</p>
<pre><code>. .envs/pt/sandbox
./who-am-i
./renew-token
</code></pre>
<h2>Skapa några endpoints</h2>
<p>För att skapa endpoints används följande filstruktur:</p>
<ul>
<li>I roten ligger alla entiteter i API:et som kataloger, med så nära spegling som möjligt.</li>
<li>Som underkataloger till dessa ligger alla HTTP-verb: GET, POST, etc.</li>
<li>I dessa ligger script med filändelsen <code>.curl</code>.</li>
<li>Om man vill ha flera exempel, t ex med statuskoder, kan en extra filändelse användas.</li>
</ul>
<p>Exempel på hur detta kan se ut:</p>
<pre><code>thing/
├── GET
│   ├── list-all.curl
│   └── list-selection.curl
└── POST
    ├── append-new.error.curl
    └── append-new.ok.curl
</code></pre>
<h3>Endpoint som bara hämtar data (GET, OPTIONS, HEAD)</h3>
<p>Behöver inga argument.</p>
<p>Exempel på hur det kan se ut:</p>
<pre><code class="language-sh">#!/bin/sh
res="thing"
curl -s \
-H @.curl-"$CLIENT_KEY"-headers-file \
"$API_ENDPOINT_URL"/"$res" \
| python3 -m json.tool
</code></pre>
<p>Standardverbet i cURL är <code>GET</code>. Använd <code>-X [OPTIONS, HEAD]</code> för att ändra verbet.</p>
<p>(I exemplet här är det ett JSON-API, så Pythons inbyggda <code>json.tool</code> används för att snygga till utskriften)</p>
<h3>Endpoints som behöver indata (t ex POST, PUT, PATCH)</h3>
<p>Behöver argument, t ex via stdin eller som variabel i filen.</p>
<p>Exempel på hur det kan se ut:</p>
<pre><code class="language-sh">#!/bin/sh
res="thing"

# definiera data i filen
# exempel: ./thing/POST/new.curl 
data="code=success&amp;payload=allgood"
resp=$(curl -s -w "%{http_code}\n" \
-H @.curl-"$CLIENT_KEY"-headers-file \
-d "$data" "$API_ENDPOINT_URL"/"$res")

# skicka in stdin som payload
# exempel: cat payload.txt | ./thing/POST/new.curl 
resp=$(curl -s -w "%{http_code}\n" \
-H @.curl-"$CLIENT_KEY"-headers-file \
-d "$(cat -)" "$API_ENDPOINT_URL"/"$res")

# skicka in första argumentet som data
# exempel: ./thing/POST/new.curl "foo=1" 
resp=$(curl -s -w "%{http_code}\n" \
-H @.curl-"$CLIENT_KEY"-headers-file \
-d "$1" "$API_ENDPOINT_URL"/"$res")

# skicka in en sträng som data och placera den i nyckeln "payload"
# exempel: ./thing/POST/new.curl hej 
resp=$(curl -s -w "%{http_code}\n" \
-H @.curl-"$CLIENT_KEY"-headers-file \
-d "payload=$1" "$API_ENDPOINT_URL"/"$res")

# Skriv ut HTTP-statuskod från svar om ingen övrig data skickades med,
# och formattera JSON om sådan finns
if [ "$(echo "$resp" | wc -w)" -eq 1 ]
then
	echo "HTTP $resp"
else
	echo "$resp" | tr -d '\n' | sed -r 's/[0-9]+$//' | python3 -m json.tool
fi
</code></pre>
<p>Standardverbet när data skickas (<code>curl -d</code>) är <code>POST</code>. Använd <code>-X [DELETE, PATCH, PUT]</code> för att ändra verbet.</p>
<p>(I exemplet här är det ett JSON-API, så Pythons inbyggda <code>json.tool</code> används för att snygga till utskriften)</p>
<h3>Endpoints som behöver ange ett ID eller referens (GET, DELETE, PUT, PATCH)</h3>
<pre><code>#!/bin/sh
res="thing"

# Ange id/referens med första argumentet,
# exempel: ./thing/DELETE/delete-single.curl 23 
curl -X DELETE -s -w "HTTP %{http_code}\n" \
-H @.curl-"$CLIENT_KEY"-headers-file \
"$API_ENDPOINT_URL"/"$res"/"$1"

# Ange id/referens med stdin
# exempel: echo 23 | ./thing/DELETE/delete-single.curl 
curl -X DELETE -s -w "HTTP %{http_code}\n" \
-H @.curl-"$CLIENT_KEY"-headers-file \
"$API_ENDPOINT_URL"/"$res"/"$(cat -)"
</code></pre>
<p>Använd <code>-X [DELETE, PATCH, PUT]</code> för att ändra verbet, eller skippa <code>-X</code> för att falla tillbaka på <code>GET</code>. Kika på tidigare exempel på hur koden kan utökas med en if-sats som skriver ut statuskod <em>eller</em> paylaod beroende på svar.</p>
<p>(I exemplet här är det ett JSON-API, så Pythons inbyggda <code>json.tool</code> används för att snygga till utskriften)</p>
<h2>Skala över tid</h2>
<p>Först av allt - versionshantering med git är en bra start, och kan nog räcka med en bra tillämpning av taggar och branches.</p>
<p>Jag rekommenderar dock att låta filstrukturen spegla alla versioner av API som ligger i produktion, då det inte ovanligt att flera gamla och nya versioner samexisterar, te x på  grund av krav på  bakåtkompabilitet eller migreringsperiod.</p>
<p>Jag hade därför gjort något liknande över tid:</p>
<pre><code>apis
├── README
├── demo-api
│   └── v2
│   │   ├── ...
│   │   ├── init-env
│   │   ├── README
│   │   ├── renew-token
│   │   ├── set-secrets
│   │   └── who-am-i
│   └── v3
│       ├── ...
│       ├── init-env
│       ├── README
│       ├── renew-token
│       ├── set-secrets
│       └── who-am-i
└── another-api
    └── v1.0.0
        ├── ...
        ├── init-env
        ├── README
        ├── renew-token
        ├── set-secrets
        └── who-am-i
</code></pre>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-04-17. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Fri, 17 Apr 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Mina erfarenheter av Grafana</title>
      <link>https://madr.se/2026/grafana-nedbrytning/</link>
      <guid>https://madr.se/2026/grafana-nedbrytning/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Mina erfarenheter av Grafana | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Mina erfarenheter av Grafana">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/grafana-nedbrytning/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Mina erfarenheter av Grafana</h1>
    <div>2026-04-17 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>De senaste veckorna har jag haft nöjet att bekanta mig med <strong>Grafana</strong> och dess ekosystem. I detta ska jag skriva litet om mina tankar utifrån perspektivet att jag tidigare använt Prometheus och ELK.</p>
<h2>Vad används Grafana till?</h2>
<p>Primärt <em>observabilitet</em>, men även <em>övervakning</em> och som byggkloss i <em>incidenthantering</em>.</p>
<ul>
<li>Visualisera <em>metrics</em> (exempelvis CPU-last, minnesanvändning, nätverkstrafik och diskaktivitet) över tid (t ex med stapeldiagram) eller just nu (paj- eller gauge-diagram).</li>
<li>Samla <em>loggar</em> på ett och samma ställe för att underlätta felsökning</li>
<li>Samla <em>traces</em> från applikationer på ett och samma ställe för att få insikter om användares aktivitet i applikationer och gränssnitt.</li>
<li>Sätta upp <em>larmregler</em> - <strong>vad</strong> som anses vara teknisk ohälsa (t ex slut på minne, mer än 20% error rate), <strong>vem</strong> som ska underrättas (t ex personer, grupperingar eller roller) och <strong>hur</strong> larmet ska skickas (t ex mail, SMS).</li>
</ul>
<h2>Licenserna</h2>
<p>Grafana är öppen källkod, och finansierar sin vidareutveckling genom att erbjuda molnlösning och supportavtal. Inget märkvärdigt där, alltså.</p>
<p>Då det är <a href="https://www.allabolag.se/foretag/grafana-labs-ab/stockholm/konsulter/2KG7KUEI5YF3I">svenskt bolag</a> är det troligtvis attraktivt för myndigheter i Sverige och inom EU.</p>
<h2>De olika delarna</h2>
<p>Grafana i sig är "bara" visualisering. Under paraplyt så finns det dock flera delar att ha litet koll på. Det förvirrade mgi i början, så här skriver jag om hur jag <em>uppfattat</em> att det hänger ihop:</p>
<ul>
<li><strong>Grafana</strong> - Ersätter Kibana i ELK.</li>
<li><strong>Loki</strong> - Hanterar insamling och rapporter av loggar, istället flör LogStash i ELK.</li>
<li><strong>Alloy</strong> -  Ersätter Logstash i ELK. Agent som skickar data och som härmar mer standardiserade lösningar, som T ex <a href="https://opentelemetry.io/docs/specs/otlp">OTLP</a></li>
<li><strong>Tempo</strong> - Hanterar insamling och rapporter av Traces.</li>
<li><strong>Mimir</strong> - Ersätter Elastic Search i ELK. Kan agera som drop-in replacement för exempelvis <a href="https://prometheus.io/">Prometheus</a>.</li>
</ul>
<p>I stort sett alla delar har bra itegration med andra liknande lösningar, i hyllning till UNIX-filosofin.</p>
<h2>Kuriosa: skapat och grundat av en Stockholmare 2013</h2>
<p>Grafana startades som ett kvällsprojekt <a href="https://grafana.com/blog/the-story-of-grafana-documentary-from-one-developers-dream-to-20-million-users-worldwide/">av Torkel Ödegaard december 2013</a> i en klassisk "scratch your own itch": det var svårt att övervaka alla tjänster på jobbet, och ur frustrationen skapades motivationen att koda ihop det som senare blev Grafana.</p>
<p>Personligen kom jag i kontakt med Grafana hösten 2016 för första gången. Det har hänt <em>mycket</em> sen dess. :)</p>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-04-17. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Fri, 17 Apr 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Nya madr.se 2026</title>
      <link>https://madr.se/2026/meta/</link>
      <guid>https://madr.se/2026/meta/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Nya madr.se 2026 | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Nya madr.se 2026">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/meta/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Nya madr.se 2026</h1>
    <div>2026-04-12 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>Jag har en ny version av madr.se igen.</p>
<p>Några höjdpunkter denna gång:</p>
<ul>
<li><strong>Ingen CSS</strong>. HTML har alltid varit det jag gillat mest vid Greenfield-utveckling. Även utan CSS kan mina skrivna ord läsas utan problem, men med <a href="../no-css">några beaktanden</a>.</li>
<li><strong>Inga microdata eller RFDa</strong>. Sökmotorer prioriterar idag att visa sponsrade träffar och att visa ej efterfrågade AI-promptar <em>(skitifiering)</em>. Relevansen har kraftigt minskat, och min egen motivation likaså.</li>
<li><strong>Byggd med Smed</strong>. Denna webbplats är byggd med <a href="https://codeberg.org/madr/smed">min egen SSG</a>.</li>
<li><strong>Hanteras med Directus</strong>. Jag är fortsatt helnöjd med att hantera allt innehåll med <a href="https://directus.io/">Directus</a>, som jag använt sedan 2023.</li>
<li><strong>Publicering sker med webhooks och några python-script</strong>. Jag skriver innehållet i Directus, och exporterar sedan till markdown och bygger om sajten med några knapptryck med <a href="https://directus.io/docs/guides/automate/flows">Directus flows</a>. För detta används <a href="https://github.com/adnanh/webhook">webhook-tjänsten</a>.</li>
</ul>
<p>Följande kodblock visualiserar dataflödet i Mermaid-format:</p>
<details>
  <summary>Flödesschema, madr.se 2026</summary>
<pre>
flowchart LR
    A[Directus HCMS + API] -->|Flöde| B{Webhook daemon}
    B -->|/webhooks/export-item| E[Python-script]
    B -->|/webhooks/download-file| F[Python-script]
    B -->|/webhooks/ssg-rebuild| G[Python-script]
    E -->|API Client| A
    F -->|API Client| A
    G -->|API Client| A
</pre>
</details>
<h2>20 år</h2>
<p>Det är också ett halvår innan 20-årsdagen av denna webbplats.</p>
<p>Det var svårt för mig att tro att den här webbplatsen är så gammal, men första blogginlägget kom i <a href="https://madr.se/2007/1/">januari 2007</a>. Inlägget skriver då om en andra invigning. Jag <em>tror</em> att detta betyder att jag bestämt mig för att förbättra databas-tabellerna och inte orkade migrera de få inlägg jag redan hade skrivit.</p>
<p>Tyvärr var den yngre versionen av mig en flitig användare av att kasta bort saker, så någon kod eller skärmdump har jag tyvärr inte kvar.</p>
<p>Jag minns iaf att det var en vit webbplats med klassiskt bloggutseende: bred huvudspalt, och några klassiska blogg-widgets till höger i en sidspalt. Kalendervy, månadshistorik, sånt jox. Det var min andra blogg. Den första byggde jag med statisk HTML sensommaren 2005. Den låg på något webbutrymme jag inte ens minns adressen till (men jag gissar på <a href="https://web.archive.org/web/*/http://bolion.net/*">bolion.net</a>).</p>
<ul>
<li>Jag byggde den med PHP5 i mitt egna webbramverk, som använde XSL som template-motor.</li>
<li>Webbplatsen hostades på min garderobsdator med Gentoo.</li>
<li>Jag körde XHTML 1.1 Strict med <code>application/xhtml+xml</code>, med konstant risk för <a href="https://sv.wikipedia.org/wiki/XHTML#XHTML_1.1">Yellow page of death</a> och var tvungen att använda <em>User-agent sniffing</em> för att degradera Internet Explorer 7 och neråt till <code>text/html</code>.</li>
<li>CSS var baserad kring <a href="https://css-tricks.com/all-about-floats/">floats</a> och hade <a href="https://css-tricks.com/videos/10-fixed-width-fluid-width-elastic-width/">elastisk layout</a> upp till 960 pixlars bredd (fråga dina föräldrar).</li>
<li>Testades i Internet Explorer 6, Safari, Firefox 2 och okänd version av Opera.</li>
<li>All JavaScript var <a href="https://www.w3.org/wiki/The_principles_of_unobtrusive_JavaScript">unobtrusive</a> och tillämpade <em>Progressive Enhancement</em> (fråga någon förälder som byggde webbsidor innan React fanns).</li>
</ul>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-04-12. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Sun, 12 Apr 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Att skriva och publicera för en CSS-fri webbplats</title>
      <link>https://madr.se/2026/ingen-css/</link>
      <guid>https://madr.se/2026/ingen-css/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Att skriva och publicera för en CSS-fri webbplats | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Att skriva och publicera för en CSS-fri webbplats">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/ingen-css/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Att skriva och publicera för en CSS-fri webbplats</h1>
    <div>2026-04-10 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>I detta inlägg redogör jag för insikter och förändringar i mitt förfarande för att skriva och publicera innehåll för en webbplats utan grafisk design (CSS).</p>
<p>Några grundantaganden:</p>
<ul>
<li>Webbplatsens innehåll kommer visas mest på handhållna enheter.</li>
<li>Det är via rekommendation och tips som trafik kommer att genereras.</li>
</ul>
<p>Saker att tänka på vid författande av innehåll:</p>
<ul>
<li>I mallar, skriv på <a href="https://sv.wikipedia.org/wiki/L%C3%A4ttl%C3%A4st">Lätt svenska</a> i instruerande ton.</li>
<li>Omfamna och älska <a href="https://sprakkonsulterna.se/sa-skriver-du-korrekta-punktlistor/">korrekta punktlistor</a>.</li>
<li>Håll nere bredden på förformaterad text (t ex kodblock). Undvik bredder större än 30-40 tecken. Det ökar läsbarheten på handhållna enheter.</li>
<li>Sätt höjd och bredd på bilder. Tänk på att prioritera visning på handhållna enheter.</li>
</ul>
<p>Saker att tänka på ur teknisk synvinkel:</p>
<ul>
<li>Först av allt, ta en titt på <a href="https://sans.style/">Alla HTML-element</a> och förstå dem. När ingen CSS eller JavaScript finns, måste din webbplats HTML-dokument hålla hög kvalitet.</li>
<li>Använd skipplänkar för att ge möjligheten att hoppa direkt till innehåll.</li>
<li>Använd <code>i</code> och <code>b</code> för visuell presentation, och <code>em</code> och <code>strong</code> för betoningar.</li>
<li>Använd presentativa HTML-element, som t ex <code>hr</code> för att skapa sektionsavgränsare och <code>br</code> för att styra indrag.</li>
</ul>
<p>Om HTML-kunskaperna är litet rostiga, så har MDN några bra sidor för att komma ikapp.</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Structuring_content/Basic_HTML_syntax#anatomy_of_an_html_element">Anatomy of an HTML element</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements">HTML elements reference</a></li>
</ul>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-04-10. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Fri, 10 Apr 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Använd Pythons egna bibliotek istället för Requests</title>
      <link>https://madr.se/2026/no-requests/</link>
      <guid>https://madr.se/2026/no-requests/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Använd Pythons egna bibliotek istället för Requests | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Använd Pythons egna bibliotek istället för Requests">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/no-requests/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Använd Pythons egna bibliotek istället för Requests</h1>
    <div>2026-04-05 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>Jag har i dagarna reviderat kod som hanterar en del HTTP-anrop mot ett REST-API. Jag kom på att kunde vara en kul grej att se hur mycket läsbarhet som gick förlorad om jag fimpade <code>requests</code> och körde med standardbiblioteket i Python.</p>
<h2>Enkelt exempel</h2>
<p>Följande gör ett HTTP GET-anrop, med ett set HTTP-headers.</p>
<pre><code class="language-python">from urllib.request import Request, urlopen

req = Request(full_url, headers=headers)
with urlopen(req) as response:
    # gör saker
</code></pre>
<p>Original:</p>
<pre><code class="language-python">import requests

response = requests.get(
    url=full_url,
    headers=headers
)
# gör saker
</code></pre>
<h2>Mer avancerat exempel</h2>
<p>Följande gör ett HTTP SEARCH-anrop och parsar svaret som ett JSON-objekt.</p>
<pre><code class="language-python">from urllib.request import Request, urlopen

req = Request(
    f"{url}/folders", 
    headers=headers, 
    method="SEARCH"
)
with urlopen(req) as response:
    data = json.loads(
        response.read().decode("utf-8")
    )
    folders = data["data"]
</code></pre>
<p>Original:</p>
<pre><code class="language-python">import requests

folders = requests.request(
    "SEARCH",
    url=f"{url}/folders",
    headers=headers,
).json()["data"]
</code></pre>
<h2>Sista exemplet: Filhantering</h2>
<p>Följande laddar hem en fil och skriver dess innehåll till disk.</p>
<pre><code class="language-python">from urllib.request import Request, urlopen

req = Request(
    full_url, headers=headers
)
with urlopen(req) as response:
    with open(
        "grejor.zip", "wb"
    ) as f:
        f.write(response.read())
</code></pre>
<p>Original:</p>
<pre><code class="language-python">import requests

resp = requests.get(
    url=full_url,
    headers=headers,
)

with open(f"grejor.zip", "wb") as f:
    f.write(resp.content)
</code></pre>
<h2>Slutsats</h2>
<p>Jag är redo att fimpa <code>requests</code>. Läsbarheten blir något sämre, men det är inte så illa som jag befarade. Med litet träning så kommer det bli naturligt. För mer avancerade grejor så kommer jag förmodligen att använda det vidare, eller <code>httpx</code> om jag vill använda Pythons asynkrona styrkor, eller behöver prata HTTP/2.</p>
<p>Vidare läsning:</p>
<ul>
<li><a href="https://medium.com/pythonic-af/stop-using-requests-try-this-modern-http-library-instead-3eccd6225995">Stop Using Requests — Try This Modern HTTP Library Instead</a></li>
<li><a href="https://dev.to/bowmanjd/http-calls-in-python-without-requests-or-other-external-dependencies-5aj1">HTTP Calls in Python Without Requests or Other External Dependencies </a></li>
</ul>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-04-05. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Sun, 05 Apr 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Skamborgen lunchmeny</title>
      <link>https://madr.se/2026/skamborgen/</link>
      <guid>https://madr.se/2026/skamborgen/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Skamborgen lunchmeny | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Skamborgen lunchmeny">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/skamborgen/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Skamborgen lunchmeny</h1>
    <div>2026-03-16 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p><em>Riktpris: 28-36kr.</em></p>
<ul>
<li><strong>Admin delifresh</strong>: En burk tonfisk i olja, serveras med två kokta ägg och ett glas vatten</li>
<li><strong>Admin special</strong>: 2st Gorbys, serveras med Snickers och Cola (Coca Cola, 50cl PET eller 33cl burk)</li>
<li><strong>Arood special</strong>: En burk tonfisk, serveras med drickyoghurt och Trocadero.</li>
<li><strong>Halv admin special</strong>: En Gorbys, serveras med Snickers och Cola (Coca Cola, 50cl PET eller 33cl burk)</li>
<li><strong>Jimmie special</strong>: En burk Kung Gustavs sardiner, serveras med en påse chips (60g) och en lättöl</li>
<li><strong>Kinesisk arenalunch</strong>: En kombination av minst två av följande tre ingredienser: en Snickers, en 50cl flaska mineralvatten eller en starköl (från fat).</li>
<li><strong>sysadmin skrovmål</strong>: Två Billys pan pizza, serveras med Ekströms nyponsoppa (original)</li>
<li><strong>sysadmin special</strong>: En Billys pan pizza, serveras med Ekströms nyponsoppa (original)</li>
<li><strong>Veganskt alternativ</strong>: 1-2 okokta, ej skalade sötpotatisar. Mikra 8 minuter. Serveras med matfettsblandning.</li>
<li><strong>Yttan 2Go</strong>: 2 hårdkokta ägg med majonäs, i kombination med exakt ett av följande alternativ: en burk makrill, en burk tonfisk, en burk sardiner eller ett knäckebröd med smör.</li>
<li><strong>Yttans proteinbomb</strong>: 250g protein- eller lättkeso med en mosad banan.</li>
</ul>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-03-16. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Mon, 16 Mar 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Hur jag hade gått all-in Apple</title>
      <link>https://madr.se/2026/macmini-macbookneo/</link>
      <guid>https://madr.se/2026/macmini-macbookneo/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Hur jag hade gått all-in Apple | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Hur jag hade gått all-in Apple">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/macmini-macbookneo/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Hur jag hade gått all-in Apple</h1>
    <div>2026-03-15 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p><img src="https://n.madr.se/assets/879db20a-a008-42a8-beeb-01b1a2a09096" alt="" /></p>
<p>Jag har tidigare haft perioder där alla mina dagliga datorer och även telefon har varit exklusivt från Apple. Det var dock ett tag sedan sist, primärt av 2 skäl:</p>
<ul>
<li>Linux har blivit bättre, och nått en acceptabel nivå (inte likvärdig, men fullgod för att nackdelarna inte tar ut fördelarna)</li>
<li>Apple har utvecklat sina produkter mot en riktning jag inte längre uppskattar i lika stor utsträckning. Några exempel: de har inte längre några utbytbara delar, de är dyra, MacOS har tappat sin känsla av världsklass.</li>
</ul>
<p>Bytet till Silicon, som jag först var skeptisk till, har dock gjort Apples produkter attraktiva för mig igen.</p>
<p>Så hur hade jag gjort ett skifte till Mac igen? Det ska detta inlägg resonera kring.</p>
<h2>För hemstudion -  M4 Mac Mini</h2>
<p>Den är liten och lätt att gömma undan, med nog portar för att jag ska känna mig begränsad. Mac är vad proffs nom musikproduktion använder av en anledning. De mest lukrativa perioder jag haft av musikskapande har sammanfallit med att jag haft en Mac för ändamålet.</p>
<p>För mig, som sällan spelar in mer än 1-2 kanaler och föredrar att inte passera 8-12 monokanaler, räcker M4 med 16GB RAM otroligt långt. 256GB disk räcker också utmärkt, eftersom projekt ändå hamnar på backupdiskar när jag inte jobbar med dem.</p>
<p>Baserat på litet research så verkar även influencers inom musikproduktion vara överens - Mac Minin är klockren i standardkonfiguration.</p>
<p>Nuvarande lösning, som jag skulle ersätta: en laptop med Intel i7, 16GB RAM och 240GB SSD-disk. Minimal Arch linux med RT-patchset, pipewire och labwc.</p>
<h2>För skrivande, programmering och organisation - Macbook Neo</h2>
<p>Den nyligen lanserade Macbook Neo ger mig verkligen vibbar av <a href="https://en.wikipedia.org/wiki/IBook#iBook_G4_(2003-2006)">iBook G4</a> och de tidiga iterationerna av <a href="https://en.wikipedia.org/wiki/MacBook_Air#Tapered_Unibody_(2010%E2%80%932017)">Macbook Air</a>. Prisvärd dator där en fantastisk fingertoppskänska för vad som är viktigt är uppenbar. iFixit säger att det är <a href="https://www.ifixit.com/News/116152/macbook-neo-is-the-most-repairable-macbook-in-14-years">den mest reparerbara macen på mycket länge</a>.</p>
<p>För mig skulle det täcka upp i stort sett allt jag vill göra med en bärbar dator:</p>
<ul>
<li>Organisera och planera</li>
<li>Skriva</li>
<li>Hantera VPS via SSH</li>
<li>Programmera för hobbyprojekt</li>
<li>Titta på serier/film i sovrummet/på tåg</li>
<li>Lättare grafisk formgivning med Inkscape och Pixlmator</li>
<li>Hantera foton</li>
</ul>
<p>Inte sedan det fanns en Macbook Air med 4GB RAM och 128GB disk har en Mac varit så prisvärd. Hatten av.</p>
<p>Nuvarande lösning: en Lenovo T14 G1 (Intel) med Linux Mint.</p>
<h2>Telefon</h2>
<p>Jag kör sedan 20 år varannan iPhone och varannan Custom ROM Android. Jag köper helst rekonditionerat, för att spara litet på planeten.</p>
<p>Jag hade troligtvis nöjt mig med en iPhone 13 Mini eller en iPhone SE 2022, då jag föredrar små telefoner och hellre har en klassisk iPhone-knapp framtill istället för FaceID.</p>
<p>Nuvarande lösning: iPhone SE 2022, rekonditionerad. Så ingen förändring.</p>
<h2>Apple är inte längre dyrt</h2>
<p>En Macbook Neo och en M4 Mac Mini går lös på 16 TSEK nya. Det är otroligt billigt, i kontexten att det är två datorer från Apple.</p>
<p>När dessa enheter börjar komma ut på begagnatmarknaden kommer de att vara ännu billigare.</p>
<p>Så det är förmodligen då jag kommer att slå till!</p>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-03-15. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Sun, 15 Mar 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Recension: Far Beyond All Light - The Life, Death and Legacy of Jon Nödtveidt and Dissection, av S. Monleón (2025)</title>
      <link>https://madr.se/2026/far-beyond-all-light/</link>
      <guid>https://madr.se/2026/far-beyond-all-light/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Recension: Far Beyond All Light - The Life, Death and Legacy of Jon Nödtveidt and Dissection, av S. Monleón (2025) | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Recension: Far Beyond All Light - The Life, Death and Legacy of Jon Nödtveidt and Dissection, av S. Monleón (2025)">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/far-beyond-all-light/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Recension: Far Beyond All Light - The Life, Death and Legacy of Jon Nödtveidt and Dissection, av S. Monleón (2025)</h1>
    <div>2026-03-08 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p><em>Första tryckningen av denna tog snabbt slut. Efter några månaders väntan landade mitt exemplar av den andra tryckningen i brevlådan.</em></p>
<p>För full transparens vill jag först återge min egen relation till Dissection.</p>
<p>Jag började utforska hårdrocken på egen hand under högstadiet, i den tid när en ung människas identitet präglas djupt av starka upplevelser och intryck. På en hemsida i Internets barndom, som drevs av två mer seniora hårdrockare, fanns en lista över bandtips. Via Napster fick jag höra <em>Where Dead Angels Lie</em> för första gången.</p>
<p>En dörr till mitt undermedvetna jag skymtat och stundtals kunnat ana öppnades på vid gavel. En sida av mig själv drog ett självande första andetag i frihet. Ord är svårt, men om jag skulle försöka: hat, sorg, köld, grymhet, empatilöshet.</p>
<p>Jag var 14 år, och jag visste omedelbart att jag bildat ett djupt känsloband till Dissection.</p>
<p>Fler låtar följde genom åren. <em>The Somberlain</em>. <em>A Land Forlorn</em>. Så småningom ägde jag såklart båda skivorna. Med tiden gick det upp för mig att bandet inte längre fanns: medlemmarna hade gradvis försvunnit, och den enda återstående originalmedlemmen satt inne för mord.</p>
<p>När jag studerade vid Mittuniversitetet frigavs Jon Nödtveidt och började att turnera med nya bandmedlemmar. Många bekanta passade på att gå på konserter och möta Jon personligen. Det var ointressant för mig, eftersom det inte kändes som "mitt" Dissection. Detta bekräftades av släppet av Mana Kali november 2004, och Reinkaos på valborg 2006.</p>
<p>Då de utannonserade att en spelning på Midsommarafton 2006 skulle bli deras sista, funderade jag på att gå - men avstod, eftersom jag fick andra planer.</p>
<p>I mitten av augusti var det Strömmingsleken, som på den här tiden var en stor flerdagarsfest för personer i min ålder. Jag var hemvändare till Söderhamn och var på ICA Ahlen Supermarket för att köpa sen frukost. Löpsedlarna sa: "Rockstjärna hittad död i sitt hem i Hässelby", med en bild på Jon Nödtveidt.</p>
<p>Jag stannade i steget för en sekund och tog in faktumet: jag hade missat chansen att uppleva ett av de viktiga banden under min uppväxt. Jag skulle aldrig få någon mer chans. Jag ruskade dock av mig det, med den lätthet som en bakfull ungdom besitter.</p>
<p>Sedan dess har 20 år gått. Jag har alltid återkommit till Dissection, särskilt under perioder med svår depression. Med tiden, i takt med att jag blivit äldre och mer öppensinnad, har jag lärt mig att uppskatta Reinkaos för vad den är. Jag har också haft en skavande känsla av att otroligt många efter 2006 lyssnade på <em>Reinkaos</em> utan att förstå hur satanisk, misantropisk och andlig den är.</p>
<p>Med tiden har retrospektiv kring bandet dykt upp med mer information, i form av reportage, podcast-avsnitt och böcker.</p>
<p>Sedan kom boken som detta inlägg handlar om. Jag såg den först i Sweden Rock Magasine, och efter en stunds tvekan bestämde jag mig för att läsa den.</p>
<p>Den är skriven i omvänd ordning. Första kapitlen handlar om Jon Nödtveidts sista år mellan frisläppande och Rebirth of Dissection. Därefter berörs hans tid i fängelse. Avslutningsvis berättas en detaljerad biografi som går igenom åren 1986-1997.</p>
<p>Det är en detaljerad historia, som enligt författaren själv tagit 15 år att slutföra. Metoden var att intervjua personerna som var med. En del är nytt, annat är redan känt. Tonaliteten kan ibland bli allt för färgad för att kallas objektiv. Några textstycken känns, enligt mig, rent raljerande eller tycks mig innehålla författarens egna värderingar och åsikter, trots påståendet om att vara objektiv. Ett fåtal av dessa passager tappar mig nästan som läsare.</p>
<p>Jag tycker även att författaren förminskar och viktar innehållet i förundersökningsprotokollet till mordet på Yusef ben Meddour i stor grad, trots påståendet att den delen av Jon Nödtveidts arv är oväsentligt.</p>
<p>Jag är glad att jag har läst boken, och att det nu finns en bok om Jon Nödtveidt. Jag kommer förmodligen att bläddra i den emellanåt.</p>
<p>Min bild av Dissection har inte ändrats av att läsa boken. För mig förblir Jon Nödtveidt den han alltid har varit för mig.</p>
<p>Om jag har väckt intresse att utforska, hänvisar jag till dessa källor.</p>
<ul>
<li><a href="https://web.archive.org/web/20050514074810/http://www.dissection.nu/biography.htm">Dissections egna biografi</a> på dissection.nu (arkiverad, läst 2005)</li>
<li><a href="https://www.goodreads.com/book/show/3950045-swedish-death-metal">Swedish Death Metal</a> (Ekeroth, 2007)</li>
<li><a href="https://www.goodreads.com/book/show/12810127-blod-eld-d-d">Blod Eld Död: en Svensk Metalhistoria</a> (Johannesson/Jefferson Klingberg, 2011)</li>
<li><a href="https://www.sverigesradio.se/avsnitt/mordet-i-keillers-park">P3 Dokumentär: Mordet i Keillers Park</a> (Sveriges Radio, 2013)</li>
<li><a href="https://soundcloud.com/blmetalpodcast/428-dissection-knacket-med-peter-palmdahl-ole-ohman-och-heidenhammer">#428 - #428 - Dissection-knäcket med Peter Palmdahl, Ole Öhman och Heidenhammer</a> (B. L. Metal podcast, 2025)</li>
<li><a href="https://www.youtube.com/watch?v=yTNz6cP-Snw">Dan Swano talks about producing DISSECTION The Somberlain and Storm Of The Light's Bane</a> (Reaper Metal Productions, 2018)</li>
</ul>
<p>Slutligen, litet datapunkter om denna bok.</p>
<ul>
<li><strong>ISBN:</strong> 9783982685410</li>
<li><strong>Titel:</strong> Far Beyond all Light: The Life, Death and Legacy of Jon Nödtveidt and Dissection</li>
<li><strong>Författare</strong>: S. Monléon</li>
<li><a href="https://www.goodreads.com/book/show/243794120-far-beyond-all-light">Goodreads</a>.</li>
</ul>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-03-08. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Sun, 08 Mar 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>FreeBSD på bärbar dator 2026</title>
      <link>https://madr.se/2026/freebsd-15/</link>
      <guid>https://madr.se/2026/freebsd-15/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>FreeBSD på bärbar dator 2026 | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="FreeBSD på bärbar dator 2026">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/freebsd-15/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>FreeBSD på bärbar dator 2026</h1>
    <div>2026-01-11 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>Jag kände mig äventyrlig i början av 2026, och installerade igår kväll FreeBSD på min primära bärbara dator.</p>
<p>Enligt <a href="https://bsd-hardware.info/?probe=8aede62ca8">hårdvarukompabilitetslöistan för min dator</a> verkar det mesta fungera, och då jag inte använder datorn för spel eller musikskapande vill jag ge FreeBSD en testrunda i början av året.</p>
<h1>Varför FreeBSD?</h1>
<p>Mest är det på grund av <strong>nyfikenhet</strong> och en <strong>bra magkänsla</strong>.</p>
<ul>
<li>FreeBSD är ännu närmare Unix än Linux, då FreeBSD skapades som en fork av Unix[^1].</li>
<li>FreeBSD är ett <strong>komplett operativsystem</strong>. Motsvarande på Linuxsidan skulle vara Linuxkärnan+systemd+GNU+pakethanterare. Allt ägs av samma team och har samma releasecykel. Mer enhetligt och mindre lapptäcke, vilket jag gillar skarpt.</li>
<li>FreeBSD sätter upp en ZFS pool som standard. Versionering, snapshots, möjlig datareplikering direkt vid installation.</li>
<li>FreeBSD installerar ett minimalt och formbart system vid nyinstallation (som jag uppskattar hos Arch Linux och Debian).</li>
<li>FreeBSD har <code>ports</code> och <code>pkg</code>, som enligt mig är mycket trevliga verktyg för att installera paket.</li>
<li>FreeBSD tillämpar en mer traditionell init istället för Systemd, vilket ger mig nostalgi.</li>
<li>FreeBSD har också tagit rygg på Linux genom att stödja t ex Wayland och Pipewire.</li>
<li>FreeBSD stödjer podman (experimentiellt) via sin egen container-/sandbox-lösning <strong>Jails</strong>.</li>
<li>FreeBSD skickar med de program jag önskar köra på datorn i sitt paketförråd.</li>
</ul>
<p>Samt: jag tycker det är roligt att lära mig nya saker. Sedan FreeBSD tillkännagav <a href="https://github.com/FreeBSDFoundation/proj-laptop">Laptop Support and Usability Project</a> i slutet av 2024 har jag haft litet span på FreeBSD.</p>
<h1>Saker jag genast gillade</h1>
<p>Jag blev först förvirrad av att de har två ISOS för närverksinstallation - en för optisk medium, och en för USB-sticka. Detta ledde till flera försök att boota från ett medium.</p>
<p>Installationen, när jag väl kom dit, är smidig och enkel. Den är mycket snarlik Debian i det textbaserade läget och är snabbt avklarad. Jag behöll ZFS-poolen och slog på diskkryptering. Det var inga problem att få nätverksåtkomst eller ställa in tidszon eller tangentbordslayout till svenska.</p>
<p>Likt Debian fick jag i slutet av installationen några förslag på tjänster att installera och starta - kraftigt färgad av antagandet att datorn ska användas som server.</p>
<p>När jag började installera paket blev det snabbt uppenbart att beroenden är mycket liberala.</p>
<ul>
<li>För att installera en fönsterhanterare t ex så krävdes python.</li>
<li>För att få in Thunar från Xfce krävdes både GTK4 och QT6.</li>
</ul>
<p>Detta är dock inte unikt för FreeBSD på något sätt: många linuxdistributioner har samma "bra att ha"-mentalitet.</p>
<p>Jag gillar skarpt att <code>pkg</code> har subkommandot <code>pkg autoremove</code> för att ta bort paket som installerades som beroenden, men inte längre behövs.</p>
<p>Datorn känns pigg och rapp och bootar på nolltid.</p>
<h1>Saker som inte fungerade OOB men som gick att lösa</h1>
<p><strong>In och ut ur viloläge (suspend/resume) vid ned- och uppfällning av skärm fungerade inte på min dator.</strong> Detta är dock vanligt på Linuxdistributioner också, så jag tycker inte det är särskilt märkvärdigt.</p>
<p>För FreeBSD 15 är detta medvetet avstängt vid nyinstallation[^2], men stöds av de flesta bärbara datorer. Det går att <a href="https://stevengharms.com/longform/my-first-freebsd/installation/part-2-power-management/">aktivera manuellt med ett kommando</a>.</p>
<ul>
<li><a href="https://wiki.freebsd.org/SuspendResume">SuspendResume - FreeBSD wiki</a></li>
</ul>
<p><strong>Secure boot</strong> verkar inte stödjas. Detta kan dock vara min dator som inte är konfigurerad korrekt, så det går förmodligen att ordna.</p>
<p><strong>Jag hade inget ljud</strong>. Ljud är avstängt vid nyinstallation, och aktiveras genom att aktivera <a href="https://man.freebsd.org/cgi/man.cgi?query=sndiod&amp;apropos=0&amp;sektion=8&amp;manpath=freebsd-ports&amp;format=html">sndiod</a>.</p>
<h1>Saker som inte fungerade OOB utan lösning</h1>
<p><strong>Wifit dör vid resume från suspend.</strong> Detta är en känd brist i wifi-drivrutinen iwlwifi, som ligger med i roadmaps för framtida versioner av FreeBSD.</p>
<p>Workaround är att manuellt starta om wlan-interfacet efter varje resume.</p>
<p><strong>Vid resume är datorn fryst 5-10 sekunder innan jag kan börja arbeta på den.</strong> Detta är troligtvis relaterat till att wifit försöker återuppta men misslyckas.</p>
<h1>En dag klarad, vi hörs om några veckor</h1>
<p>Problemen ovan är egentligen nog för att jag skulle återgå till något jag redan vet fungerar. Men jag vill ge FreeBSD en chans. Så jag skriver några rader när jag använt datorn litet mer, till t ex programmering och att skriva inlägg som detta.</p>
<ul>
<li><a href="https://reviews.freebsd.org/D50462">Mergad PR</a> som försöker adressera problemet.</li>
<li><a href="https://wiki.freebsd.org/WiFi/Iwlwifi#Loading_the_driver">iwlwifi - FreeBSD wiki</a>, direktlänk till det avsnitt som har den manuella åtgärd jag valt.</li>
<li><a href="https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=263632">Buggrapport i FreeBSD Bugzilla</a></li>
</ul>
<p>[^1]: Som en fork av 386BSD, som i sin tur var en fork av BSD - Berkleys egna version av UNIX, som de inledde 1974 genom att förvärva en licens av AT&amp;T Unix. Dvs, BSD har levt 15-20 år längre än Linux.
[^2]: Detta känns som ett arv från att FreeBSD historiskt sett adresserat behov för servrar, som aldrig haft behov av någon form av suspend. Detta är ett pågående skifte för FreeBSD-utvecklarna, som <a href="https://freebsdfoundation.org/blog/freebsd-closes-the-laptop-gap-year-one-project-update/">försöker göra FreeBSD bättre för bärbara datorer</a>.</p>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-01-11. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Sun, 11 Jan 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Mjukvara på min Linuxbaserade DAW under jan 2026</title>
      <link>https://madr.se/2026/linux-daw-software/</link>
      <guid>https://madr.se/2026/linux-daw-software/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Mjukvara på min Linuxbaserade DAW under jan 2026 | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Mjukvara på min Linuxbaserade DAW under jan 2026">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2026/linux-daw-software/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Mjukvara på min Linuxbaserade DAW under jan 2026</h1>
    <div>2026-01-07 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>Jag har haft bra sessioner i hemstudion på sistone. Detta inlägg beskriver vilka program jag använder för att skriva musik, laborera med riff och mixa demos.</p>
<p>Kortversionen: DAW med gammal dator, Arch, Reaper och NAM.</p>
<h1>Kort om hårdvaran</h1>
<p>Detta är inte fokus för inlägget, men behövs såklart för referens.</p>
<ul>
<li>10 år gammal bärbar dator med SSD, 16GB minne och Intel I7</li>
<li>En ännu äldre skärm på 24" monterad på bomarm</li>
<li>Linuxvänligt Audio Interface med 4 utgångar och 4 ingångar</li>
<li>En DI-box</li>
<li>En Reamp-box</li>
<li>Ett par monitorer</li>
<li>Ett par hörlurar</li>
<li>Några mikrofoner med bra stativ</li>
</ul>
<h1>Linuxdistribution</h1>
<p>Arch linux med pipewire och labwc. Primära motiv till Arch:</p>
<ul>
<li>Rolling release. Pipewire och Linux blir vid skrivande stund bättre för varje version och det gör det värt att ligga i framkant snarare än att ligga stabilt på mer beprövade versioner.</li>
<li>Sidan <a href="https://wiki.archlinux.org/title/Professional_audio">Professional audio</a> på ArchWiki.</li>
<li><a href="https://archlinux.org/groups/x86_64/pro-audio/">Gruppen pro-audio i Arch Linux extra-paketförråd</a>. Både öppen och proprietär mjukvara finns där (t o m utan AUR). Inget stök med manuell installation och beroenden som kan gå sönder.</li>
</ul>
<p>Samt: Det är en linuxdistribution <strong>jag kan och behärskar</strong>, vilket alltid bör väga tyngst på individuell nivå. Att ställa in en dator för optimal latens är en utmaning för alla icke-Macs, så välj en Linuxdistribution som är välbekant.</p>
<p>Primära motiv till labwc:</p>
<ul>
<li>Hellre Wayland än X11</li>
<li>Användning av skrivbordsmiljöer kräver mer RAM och CPU, vilket påverkar latens</li>
<li>Skrivbordsmiljöer innehåller mycket som en DAW inte behöver, som därmed behöver stängas av eller avinstalleras</li>
<li>Hyprland, Sway och andra "tiling" fönsterhanterare funkar inte optimalt med hur en DAW hanterar fönster för t ex plugins</li>
</ul>
<h1>DAW</h1>
<p>Reaper 7, med annat tema och några personaliseringar.</p>
<h2>Plugins</h2>
<ul>
<li>Dragonfly Reverb</li>
<li>Neuralrack (simpel NAM-laddade)</li>
<li>Ratatuille (advancerad NAM-laddare)</li>
<li>SurgeXT (synt)</li>
<li>Ugritone (trummor för mixning)</li>
<li>AVLDrums (trummor för låtskrivning)</li>
</ul>
<h2>NAM-profiler</h2>
<p>Förstärkartoppar:</p>
<ul>
<li>Soldano Lead</li>
<li>Marshall Valvestate</li>
<li>Peavey 5150</li>
</ul>
<p>IR:</p>
<ul>
<li>Celestrion Vintage 30, med olika mikrofoner (SM57 och några Lewitts)</li>
</ul>
<p>Pedaler:</p>
<ul>
<li>Boss HM-2 (gitarr)</li>
<li>Tech 21 Sansamp (bas)</li>
</ul>
<h1>Kringprogram</h1>
<p>Dessa är installerade via Flatpaks för att minska mängden beronden i grundsystemet.</p>
<ul>
<li>Millisecond (diagnosverktyg för att uppnå låg latens)</li>
<li>pwvucontrol (för att byta profiler på ljudkort)</li>
<li>qpwgraph (routa ljud, med sparfunktion)</li>
<li>Helvum (routa ljud, utan sparfunktion)</li>
<li>coppwr (kontrollpanel för pipewire)</li>
<li>Thunar (filutforskare)</li>
</ul>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2026-01-07. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Wed, 07 Jan 2026 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>Andra intrycket av COSMIC</title>
      <link>https://madr.se/2025/cosmic/</link>
      <guid>https://madr.se/2025/cosmic/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Andra intrycket av COSMIC | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="Andra intrycket av COSMIC">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2025/cosmic/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>Andra intrycket av COSMIC</h1>
    <div>2025-12-27 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>Sist jag gjorde ett omnämnande av COSMIC var vid <a href="https://madr.se/2024/cosmic-a3">tredje alfan</a>. Nu när skarp version är skeppad är det välkommet att testa COSMIC igen.</p>
<p>Min testrigg:</p>
<ul>
<li>Bärbar dator, Lenovo T14 G1 (Intel).</li>
<li>8GB ram</li>
<li>240GB disk</li>
</ul>
<p>Allt jag gillade i alfa 3 är där fortfarande. Då det ändå är skarp version så vill jag ändå passa på att nämnda några saker saknar jag ifrån mitt normala arbetsflöde:</p>
<ul>
<li>Det går inte att ange alt+shift för att hoppa mellan tangentbordslayout. Super + Space är default, vilket även GNOME och Mac OS har som default. Detta sitter i muskelminnet för mig och är enkelt att ändra i andra DE (GNOME untantaget, because FU GNOME).</li>
<li>Det går inte att flytta knapparna i titelbar till höger. Det hade jag gillat.</li>
<li>Det finns ingen global meny - det är dock Waylands fel, inte COSMICs.</li>
<li>Typsnitt i applets är inte enhetliga.</li>
<li>Flatpaks, särskilt QT, följer inte färgteman i COSMIC. GTK är acceptabla.</li>
</ul>
<p>Jag vill dock avsluta på en positiv ton.</p>
<ul>
<li>Dock, toppanel och typografi känns riktigt nice. Med en global meny och möjlighet att ställa så hade MacOS-folk känt igen sig omedelbart i COSMIC. POP!_OS hade nog redan dödat Elementary om det inte vore för att namnet fortfarande är störtlöjligt.</li>
<li>Tillgänglighetsstödet känns riktigt moget.</li>
<li>Teknikstacken - Rust och Wayland-first - känns helt rätt i tiden.</li>
<li>Apparna som kommer med är precis lagom: en filutforskare, en app store, en terminal, systeminställningar, en enkel texteditor, en mediaspelare (med alla codecs) och skärmavbildare. Det är en bra ambitionsnivå som ElementaryOS borde ta lärdom av, där ambitionen känns för stor.</li>
</ul>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2025-12-27. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Sat, 27 Dec 2025 00:00:00 ECT</pubDate>
      
    </item>
    
    <item>
      <title>En snabb överblick över OIDC och SSO-lösningar att sätta upp själv</title>
      <link>https://madr.se/2025/oidc-providers/</link>
      <guid>https://madr.se/2025/oidc-providers/</guid>
      <description>
        <![CDATA[<!DOCTYPE html>
<html lang="sv">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>En snabb överblick över OIDC och SSO-lösningar att sätta upp själv | Anders Englöf Ytterström</title>
    <meta name="generator" content="Smed SSG">
    
<meta property="og:title" content="En snabb överblick över OIDC och SSO-lösningar att sätta upp själv">
<meta property="og:type" content="article">
<meta property="og:url" content="https://madr.se2025/oidc-providers/">
<meta property="og:site_name" content="Anders Englöf Ytterström">
<meta name="robots" content="index,follow">

</head>
<body>
    <i>Ombyggnad 2026/2027 pågår - döda länkar förekommer. <a href="/27">Mer information</a></i>
    
    <main id="content">
    
<header>
    <h1>En snabb överblick över OIDC och SSO-lösningar att sätta upp själv</h1>
    <div>2025-12-20 på <a href="/webblogg">Anders Ytterströms webblogg</a></div>
</header>
<hr>
<p>Inför ett litet hackathon i privat regi så behöver jag en extern lösning för <strong>Identity provider (IDP)</strong> för att hantera SSO, med följande minimumkrav:</p>
<ul>
<li>Open ID Connect (OIDC), helst certificerad</li>
<li>Ska gå att köra i container</li>
<li>Öppen källkod, åtminstone som en free tier</li>
</ul>
<p>Detta inlägg beskriver mitt urval.</p>
<h2>Pocket ID - för minimalism och fokus på mobilanvändning</h2>
<p><a href="https://pocket-id.org">Pocket ID</a> är en öppenkällkodslösning som stödjer OIDC med <a href="https://www.passkeys.io">passkeys</a> som enda autentiseringsmetod. Inga lösenord eller MFA, således. Troligtvis perfekt för ett smalt och noga kontrollerat scope, t ex för interna appar i ett tekniknära team där alla kan hantera passkeys.</p>
<p>Mindre lämpligt om flexibilitet och yttre, okända krav eller behov finns. Passkeys är fränt, men kan ses som för okonventionellt.</p>
<h2>Authentik - En oxe som hanterar allt</h2>
<p><a href="https://goauthentik.io/#comparison">Jämförelsetabellen för Authentik</a> talar för sig själv. SAML2, Federated, OIDC, LDAP, SCIM, Kerberos, <strong>allt finns</strong>. Om jag planerat att ha en självhostad arbetshäst för byråverksamhet med många appar, klienter och kundbehov, hade jag investerat i att lära mig Authentik då den är öppen källkod som inte kostar något att komma igång med. Det finns även en betalversion med mer support och teknisk assistans, vilket gör den till en kandidat för förvaltning i offentlig sektor.</p>
<p>Det kommer dock till ett pris, då applikationen kräver mycket CPU och RAM. Detta är något som behöver hostas med omsorg, och på kraftig hårdvara.</p>
<h2>Authelia - OIDC, helt enkelt</h2>
<p><a href="https://www.authelia.com">Authelia</a> är en enkel go-binär som kräver 30MB RAM för att köra, som konfigureras med en yaml-fil. Den är certificerad för OIDC och har stor kärlek från communityt. <strong>Detta blev mitt val</strong>, då jag gärna vill kunna köra en IDP på min befintliga VPS tillsammans med mina andra tjänster.</p>
<p>Den enda begränsningen är att det enda som stöds är OIDC. SAML2 kan t ex vara en faktor för en del applikationer några år framöver, likaså LDAP. Det är därför en bra lösning för att lära sig bemästra alla vinklar av OIDC, men som kommer att kräva komplement för legacy-lösningar.</p>
<h2>Bubblare</h2>
<ul>
<li><a href="https://zitadel.com">Zitadel</a> - Snarlik authentik. möjligtvis mer lättviktig.</li>
<li><a href="https://www.keycloak.org">Keycloak</a> - Mest stjärnor på Github, det indikerar förmodligen någonting.</li>
<li><a href="https://github.com/lldap/lldap">LLDAP</a> - förenklad LDAP, troligtvis ett bra komplement till Pocket ID och Authelia.</li>
</ul>


    </main>
    
<hr>
<p>
    Ovanstående inlägg publicerades 2025-12-20. Det går att <a href="" rel="alternate">prenumerera</a> på denna webblogg.
    Härifrån är följande mål rekommenderade:
</p>
<ul>
<li> <a href="/inlagg">Andra inlägg på denna webblogg</a>
<li> <a href="/webblogg">Webbloggens startsida</a>
<li> <a href="/">Anders Englöf Ytterströms hemsida</a>
</ul>

    
        <footer>
            <p>
            <a href="https://madr.se">madr.se</a> &copy; 2006&ndash;2026 av <a href="https://madr.se/aey">Anders Englöf Ytterström</a> 
            är licenserat under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a> om inget annat anges.
            </p>
            <p>Prenumera på <a rel="alternate" href="/prenumerera.xml">webbloggens alla inlägg</a>, eller endast:
            <a href="/prenumerera/inlagg.xml" rel="alternate">inlägg</a>, 
            <a href="/prenumerera/lanktips.xml" rel="alternate">länktips</a> eller
            <a href="/prenumerera/evenemang.xml" rel="alternate">besökta evenemang</a>. 
            </p>
            <p><a href="https://validator.w3.org/check?uri=referer">Korrekt HTML</a> och <a href="http://jigsaw.w3.org/css-validator/check/referer">korrekt CSS4</a>.</p>
        </footer>
    
</body>
</html>]]>
      </description>
      <pubDate>Sat, 20 Dec 2025 00:00:00 ECT</pubDate>
      
    </item>
    
 </channel>
</rss>