https://madr.se/madr.seAnders Ytterström om hårdrock, musik, styrketräning och webbutveckling2023-12-16T13:08:12.583ZProgrammera Python med Helixhttps://madr.se/2023/python-helix2023-12-23T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p>Sedan en tid tillbaka så försöker jag aktivt att ersätta appar baserade på
Electron med andra alternativ.</p>
<p>För att ersätta VSCode har jag länge sneglat åt en vim-liknande editor som
heter <a href="https://helix-editor.com/">Helix</a>, och efter ungefär sex månaders användning börjar jag få upp
farten och närmar mig ett läge där jag kan ersätta VSCode och PyCharm.</p>
<p>Mitt startläge var följande:</p>
<ul>
<li>Jag föredrar egentligen texteditorer som alltid låter mig skriva, och har
aldrig prioriterat effektivitet när det handlar om att skriva kod.</li>
<li>Av Vim och Emacs, när jag hamnade i detta berömda vägskäl, var Vim det som kändes
minst knöligt och verkade vara mer vanlig på servrar.</li>
<li>För riktigt stora projekt och vid behov av debugger, vevar jag igång PyCharm.
För mindre och snabbare insatser är det dock bra att ha mer än ett alternativ.</li>
</ul>
<h2 id="varfr-helix-istllet-fr-neovim">Varför Helix istället för Neovim?<a class="anchor" href="#varfr-helix-istllet-fr-neovim">¶</a></h2>
<p>Helix är designat för att likna Vim, med kolon för att hoppa mellan lägena normal,
inmatning och selektion. Helix, precis som Vim, startar blixtsnabbt och har
i stort sett obefintligt footprint i CPU- och RAM-användning. Stora filer är inga
problem, precis som i Vim.</p>
<p>Helix har däremot några fördelar mot Neovim som tilltalade mig skarpt.</p>
<ul>
<li>Språkstöd sker via <a href="https://microsoft.github.io/language-server-protocol/">language servers</a>, där Helix har en lista över <a href="https://github.com/helix-editor/helix/wiki/How-to-install-the-default-language-servers">defaults som
automatiskt försöker startas</a> när en viss filtyp öppnas. Installera
rätt language servers och börja skriva kod.</li>
<li>Multipla textpekare, som är den feature jag använder överlägset mest i VSCode.</li>
</ul>
<p>Language servers tror jag är framtiden, och den modulära tillämpningen Helix har
känns helt rätt.</p>
<p>Dessa två saker är förmodligen möjliga att få till i NeoVim med plugins, men de gånger
jag försökt har det alltid slutat med att jag gett upp. Jag vill nämligen fokusera på
att <em>skriva</em>, inte att konfigurera min editor.</p>
<h2 id="min-setup-fr-python">Min setup för Python<a class="anchor" href="#min-setup-fr-python">¶</a></h2>
<p>Min setup har följande acceptanskriterier:</p>
<ul>
<li>Lintning ska ske löpande.</li>
<li>Kodformatering ska ske varje gång jag sparar filen.</li>
<li>importer av beroenden ska föreslås när jag börjar skriva.</li>
</ul>
<p>Så här ser avsnittet ut i min <code>languages.toml</code> för att åstadkomma detta:</p>
<pre><code class="language-toml">[[language]]
name = "python"
auto-format = true
formatter = { command = "sh", args = ["-c", "ruff check --fix --silent - | ruff format - | ruff --select I --fix --silent -"] }
[language-server.pylsp.config.pylsp.plugins]
rope_autoimport = { enabled = true }
rope = { enabled = true }
ruff = { enabled = true, extendSelect = ["I"]}
</code></pre>
<p>Några anmärkningar:</p>
<ul>
<li>Jag kör sortering av imports, lintning och kodformatering med <a href="https://docs.astral.sh/ruff/">Ruff</a>. Fram tills
nyligen använde jag kombinationen <code>isort</code>, <code>flake8</code> och <code>black</code>, och ser det som en
uppgradering att bara behöva ett beroende (även om Ruff är aningen omoget).</li>
<li>För att importera beroenden snabbt används <a href="https://github.com/python-rope/rope">rope</a>, som även har mycket annat
bra för att refaktorera pythonkod.</li>
</ul>
<p><a href="https://github.com/python-lsp/python-lsp-server">Installation av språkservern PyLSP</a> kan ske på litet olika sätt, beroende på hur Python är
uppsatt. Viktigast är att Helix finner installationen. Kör <code>hx --health python</code>, eller
<code>helix --health python</code> om aliaset inte finns.</p>
<pre><code class="language-sh">$ hx --health python
Configured language servers:
✓ pylsp: /usr/bin/pylsp
Configured debug adapter: None
Highlight queries: ✓
Textobject queries: ✓
Indent queries: ✓
</code></pre>
<h2 id="slutsats">Slutsats<a class="anchor" href="#slutsats">¶</a></h2>
<p>Jag har kört Helix parallellt med VSCode under året, och har gjort årets <a href="https://adventofcode.com">Advent of Code</a>
uteslutande i Helix. Jag är helnöjd, och skulle rekommendera den till någon som vill köra Vim,
men ha en något bättre OOTB-upplevelse vad gäller stöd för LSP och multicursors.</p>
Metalsmith i containerhttps://madr.se/2023/madrse-container2023-07-19T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p>En sak jag länge varit sugen på att utvärdera är att bli av med beroendet till node.js i mindre, simplare projekt. Som denna webbplats, exempelvis, som enbart behöver det för att transformera markdown-filer till HTML-dokument med <a href="https://metalsmith.io/">Metalsmith</a>.</p>
<p>Det enklaste sättet att göra det på är att använda sig av <em>containers</em>, där allt som behövs ligger i en image. Detta inlägg beskriver hur jag gjorde för att få till det.</p>
<h2 id="indentifiera-vilka-volymer-som-behvs">Indentifiera vilka volymer som behövs<a class="anchor" href="#indentifiera-vilka-volymer-som-behvs">¶</a></h2>
<p>Jag behöver i princip tre volymer för att kunna återanvända samma container image flera gånger för att bygga min webbplats.</p>
<ul>
<li><code>src</code> - Metalsmiths <em>source directory</em>, alltså alla filer som ska transformeras.</li>
<li><code>pub</code> - Metalsmiths <em>target directory</em>, dvs resultatet av Metalsmith.</li>
<li><code>assets</code> - alla statiska filer jag bara vill bifoga som de är, t ex bilder, CSS-filer, redan kompilerade webbkomponenter och liknande.</li>
</ul>
<h2 id="containerfile">Containerfile<a class="anchor" href="#containerfile">¶</a></h2>
<p>Ser ut såhär, i sin enkla helhet.</p>
<pre><code>FROM node:20-alpine AS base
WORKDIR /app
FROM base AS deps
COPY package*.json ./
RUN npm install
FROM deps AS final
RUN mkdir ./assets ./pub ./src
VOLUME ["./assets", "./pub", "./src"]
COPY . .
ENTRYPOINT ["node", "index.js"]
</code></pre>
<p>... med några väl valda <strong>ignores</strong>.</p>
<h2 id="bygga-container-image-lokalt">Bygga container image lokalt<a class="anchor" href="#bygga-container-image-lokalt">¶</a></h2>
<p>Jag gör detta med Buildah, men det går lika bra att göra med Docker.</p>
<pre><code>buildah build --net host .
</code></pre>
<h2 id="kr-container-imagen-lokalt-fr-att-bygga-webbplatsen">Kör container imagen lokalt för att bygga webbplatsen<a class="anchor" href="#kr-container-imagen-lokalt-fr-att-bygga-webbplatsen">¶</a></h2>
<p>Jag gör detta med Podman, och monterar de tre volymerna.</p>
<pre><code>podman run \
--net host \
-ti \
--volume ./dist:/app/pub \
--volume ../../Sync/Rahvin/madrse/src:/app/src \
--volume ../../Sync/Rahvin/madrse/assets:/app/assets \
[container id]
</code></pre>
<p>Ovanstående volymsökvägar råkar vara det jag använder för stunden. Katalogerna behöver såklart finnas på filsystemet.</p>
<p>Ersätt <code>[container-id]</code> med det ID som gavs av Buildah.</p>
<h2 id="hosta-container-images-p-github-packages">Hosta container images på Github Packages<a class="anchor" href="#hosta-container-images-p-github-packages">¶</a></h2>
<p>Då jag har koden på Github så passade jag på att lägga in en action som bygger och publicerar container imagen automatiskt. Då blir det ännu enklare att bygga sajten, eftersom jag då bara behöver hämta imagen från Github Packages istället för att bygga den ochh hålla repa på container-id.</p>
<pre><code>podman run \
--net host \
-ti \
--volume ./dist:/app/pub \
--volume ../../Sync/Rahvin/madrse/src:/app/src \
--volume ../../Sync/Rahvin/madrse/assets:/app/assets \
ghcr.io/madr/19:main
</code></pre>
<p>Två saker extra krävs för detta.</p>
<ul>
<li>Skapa upp en action för att bygga och publicera Docker images.</li>
<li>Använd Dockers namngivning, dvs Dockerfile och .dockerignore. Podman och Buildah finns ej på Github Actions i skrivande stund, så <code>Containerfile</code> och <code>.containerignore</code> kommer inte att fungera.</li>
</ul>
Sorgligt nog kommer Firefox snart att dö strypdödenhttps://madr.se/2023/firefox-is-dying2023-03-22T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p>Allt oftare får jag finna mig i att använda Chrome istället för Firefox.</p>
<p>Nu senast idag skulle jag lägga till integrationstester mellan Lit-komponenter och Vue, och noterade att den interna testsidan var vit och hade felet <code>Uncaught SyntaxError: import assertions are not currently supported</code> i konsolen. Detta är <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1777526">en feature som Firefox fortfarande implementerar</a>.</p>
<p>Lösningen? "Byt till Chrome", med den outtalade frågan varför jag inte bara ger upp och alltid kör Chrome.</p>
<p>Härom veckan satt jag och implementerade <code>role=radiogroup</code> enligt <a href="https://www.w3.org/WAI/ARIA/apg/patterns/radio/">ARIA Authoring Practices Guide för Radio Group-mönstret</a>, och vid test med <a href="https://www.nvaccess.org/">skärmläsaren NVDA</a> noterade jag att grupperingen inte riktigt ville lira.</p>
<p>Förmodligen på grund av att implementationen byggde på Web Components - ett fieldset med ShadowDOM, och radio buttons i egna ShadowDOMs. Det funkade ibland, och ibland inte. Lösningen? "Byt till Chrome", med den outtalade frågan varför jag inte bara ger upp och alltid kör Chrome.</p>
<p>Hela situationen skickar tillbaka mig till minnen från sent 90-tal och 00-tal, där samma argument användes för att använda Internet Explorer 4-6. "Det är vad <em>alla</em> använder", "Jag utvecklar bara mot en webbläsare och saknar motivation att testa i andra", och så vidare.</p>
<p>Mänskliga faktorn består över årtionden, vad det verkar. De yngre webbutvecklarna har inte lärt sig något av oss äldre webbutvecklares misstag.</p>
<p>Det skrivs runtom på Internet att Firefox är döende, och det finns ingen anledning att imbilla sig att det inte kommer att ske. I det allmänna medvetandet är webbläsaren redan död.</p>
<h2 id="saker-som-indikerar-strypdden-fr-firefox">Saker som indikerar strypdöden för Firefox<a class="anchor" href="#saker-som-indikerar-strypdden-fr-firefox">¶</a></h2>
<p>Listan väger över tid.</p>
<ul>
<li>Utvecklare har slutat använda Firefox och testar därför bara saker i Chrome.</li>
<li>Interna verktyg stöds ej eller testas inte i Firefox.</li>
<li>Produkter, tjänster och webbplatser utesluter aktivt Firefox ur listan på webbläsare som stöds.</li>
<li>Än mer allvarligt: kombinationen av NVDA och Firefox har undermåligt stöd för bl a Web components och Shadow DOM. Radio buttons grupperas inte korrekt, exempelvis.</li>
</ul>
Du vill ha en Rockstjärna, men förmodligen behöver ni en Roadiehttps://madr.se/2023/roadie2023-03-01T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p>En av mina mest reciterade artiklar någonsin är <a href="https://www.linkedin.com/pulse/20140816105034-167544180-you-don-t-want-a-rock-star">You Don't Want a Rock Star. You Want a Roadie</a>, som står sig bra trots att den publicerades 2014.</p>
<p>Detta är en genomgång av de fem punkterna på svenska. Dessa fem punkter beskriver varför ni vill ha en Rockstjärna, men egentligen behöver en Roadie.</p>
<h2 id="ego-vs-team">Ego vs Team<a class="anchor" href="#ego-vs-team">¶</a></h2>
<p>Rockstjärnor bryr sig om att vara bäst, om att vara nummer 1, och deras arbetsgivares affärer är aldrig nummer 1. Rockstjärnor är måhända i band, men när strålkastarljuset tänds är det bäst att de lyser på Rockstjärnan. De vill klättra på stegen hårt och snabbt, och har ambitionen för det. Att anställa en Rockstjärna är alltid förenat med risken att de snabbt klättrar upp i leden över sin position, eller helt enkelt hoppar över till en annan tour manager som kan erbjuda bättre gig. Eller ännu värre, att de trycker ner sitt eget team i sin strävan efter att hamna i den tekniska uppmärksamhetens centrum och bli end-all-be-all guru.</p>
<p>Roadien, däremot, är där för sitt team. De bryr som hela produktionen. De förstår att det inte bara handlar om bandet, utan även ljudtekniken, ljustekniken och biljettförsäljningen. Roadien vet att framgång är större än vad enstaka personer kan åstadkomma.</p>
<h2 id="onetricks-vs-t-shaped">Onetricks vs T-shaped<a class="anchor" href="#onetricks-vs-t-shaped">¶</a></h2>
<p>Rockstjärnor kan göra en eller ett par saker ruskigt bra. De är fokuserade på att använda sina primära färdigheter för att rikta uppmärksamhet mot sig själva.</p>
<p>Roadies besitter många kunskaper och färdigheter. De kanske strängar om eller stämmer instrument, riggar ljus, hanterar sets, samordnar andra som bygger scenen och rycker in där det behövs. Några kommer absolut ha litet bättre fallenhet för vissa saker än andra Roadies, och det är sällan de verkligen mästrat någon särskild talang eller färdighet. De är dock duktiga, ofta riktigt duktiga, på att göra flera saker.</p>
<h2 id="har-fljare-vs-leda-med-exempel">Har följare vs Leda med exempel<a class="anchor" href="#har-fljare-vs-leda-med-exempel">¶</a></h2>
<p>Rockstjärnor har följare men är sällan bra ledare. Skälen till det är delvis för att de vet massor om de saker de kan bäst, vilket gör att de saknar jämlikar och därmed sällan skickar respekt och ödmjukhet neråt i kedjan. Detta innebär också att rockstjärnors egon och stolthet kan bindas hårt till dessa färdigheter, och att det kan bli rejält stelt när rockstjärnan ifrågasätts.</p>
<p>Roadies leder genom exempel och betjäning. The har inga följare, de har kollegor som med med tillit för varandra för rull på produktionen och får jobbet gjort. Ledaren har kollegornas stöd och förtroende för att ge styrning och hålla distraktioner minimala.</p>
<h2 id="hg-kostnad-vs-undervrderad-mngsysslare">Hög kostnad vs undervärderad mångsysslare<a class="anchor" href="#hg-kostnad-vs-undervrderad-mngsysslare">¶</a></h2>
<p>Rockstjärnor är dyra. Deras specialiteter har ofta hög efterfrågan, och i kombination med deras djupa förståelse inom sina färdigheter krävs ett högt pris. Men om ni vill att en rockstjärna ska lämna sin komfortzon och göra något mer, är chansen stor att ni blir tvungen att anställa någon annan.</p>
<p>Roadien är en mångsysslare, vilket ofta gör dem undervärderade men likväl kapabel att få en rad med olika uppgifter väl utförda. De kommer förmodligen inte vara lika snabba på att slutföra projektet, men när projektets "scope" börjar svänga mot oväntade territorium har roadien ofta korskompetenserna för att ta sig ann det. Silvertejp om nödvändigt!</p>
<h2 id="kortsiktighet-vs-lngsiktighet">Kortsiktighet vs Långsiktighet<a class="anchor" href="#kortsiktighet-vs-lngsiktighet">¶</a></h2>
<p>Rockstjärnor är kortlivade. De kommer att gå vidare när ett bättre erbjudande ligger på bordet, när en chefsroll de vill ha erbjuds eller för att de vill köra solo. Rockstjärnan är alltid en risk på grund av hög ambition av självtjänande.</p>
<p>Roadien vet att alla rörliga delar tillsammans säkrar varandra. De fokuserar på företagets "the greater good", att skeppa produkten och teamets sociala och mentala hälsa. En bra Roadie vet att varenda kugge är viktig, och det det är denna dedikation mot affärsvärdets sammanslagna delar som gör dem lojala.</p>
<h2 id="rekryterare">Rekryterare<a class="anchor" href="#rekryterare">¶</a></h2>
<p>I teknikskrået tror många rekryterare att de vill ha en rockstjärna, men det stämmer inte. Det är bara smicker för att attrahera skarp kompetens, bara för att få napp på fel sorts talanger för de flesta teambaserade miljöer i bolag.</p>
<p>Om ni letar efter en person som är</p>
<ul>
<li>Riktigt, riktigt superduktig på en enda sak,</li>
<li>har råd med personen och</li>
<li>är säker på att ni kan hålla dem intresserade och kvar tillräckligt länge för att få ut det värde från dem som bolaget behöver</li>
</ul>
<p>... så ja - då letar ni efter en rockstjärna.</p>
<p>Men om ni vill ha som</p>
<ul>
<li>är "full stack", "T-shaped" eller på annat sätt har flera färdigheter i många led,</li>
<li>inte har alla svar men som vet hur man hittar dem,</li>
<li>är beredd att blocka, tackla och offra sig för teamet och</li>
<li>är villig att fokusera på bolagets bästa och alla dess delar</li>
</ul>
<p>... så är vad du behöver, vad du <strong>vill ha</strong>, en roadie.</p>
<p>Bonus: en rockstjärna skulle fnysa åt tanken på <a href="https://noidea.dog/glue">Glue work</a>, en roadie behöver du inte ens fråga.</p>
2022, första året som förälderhttps://madr.se/2023/20222023-01-21T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p>Ännu ett år är avslutat, varvid det är lägligt att skriva litet om de 12 månader som gått.</p>
<h2 id="tekniker-jag-lskat-under-ret">Tekniker jag älskat under året<a class="anchor" href="#tekniker-jag-lskat-under-ret">¶</a></h2>
<ul>
<li><strong>Web Components</strong>. CSS i eget scope, JavaScript i en egen DOM. Helt nytt sätt att tänka som är en nyttig ögonöppnare.</li>
<li><strong>Lit</strong>. Detta tror jag är framtiden. Det är Web Components som kommer att "knuffa ner" React, precis som
React knuffade ner Angular. Även Vue kommer ersättas av Web Components. Lit, alternativt Svelte, är vägen dit.</li>
<li><strong>Elixir</strong>. LiveView håller på att mogna, LiveBook är trevligt, och HEEX/LEEX börjar bli bra. NX, Axon och Bumblebee imponerar och verkar ha vind i seglen ett tag till.</li>
<li><strong>Storybook</strong>. Designsystem på steroider.</li>
<li><strong>Web Test Runner</strong>. Testa i headless webbläsare, 2022 edition. Funkar helt okej, men inte mer än så.</li>
</ul>
<p>Jag saknade mer Elixir och Python under 2022, och ska ta det i beaktande för 2023. Jag vill bli etablerad utvecklare, inte bara en hängiven supporter.</p>
<h2 id="afk">AFK<a class="anchor" href="#afk">¶</a></h2>
<ul>
<li>Jag var <em>föräldraledig</em> under hösten, och fick se mitt barn börja kräla, krypa och gå.</li>
<li>I mars bytte jag jobb, och blev <em>Senior Frontend Architect</em> på Stratsys.</li>
<li>Jag flyttade ingenstans, utan bor kvar i ett familjevänligt område i Falun, med närhet till förskola och mataffär.</li>
</ul>
<h2 id="musik">Musik<a class="anchor" href="#musik">¶</a></h2>
<p>Småbarnslivet lämnade inte mycket utrymme för att dra igång mer ambitiösa inspelningsprojekt, men
litet musik blev det ändå.</p>
<ul>
<li>Jag besökte Sweden Rock Festival, Gefle Metal Festival och Sabaton Open Air.</li>
<li>Inga konserter under året.</li>
<li>Jag köpte en del skivor, såväl vinyl som CD.</li>
<li>Jag gick kurser i mixning och inspelningsteknik på Spectre Academy, som är nischade
mot modernare hårdrock.</li>
</ul>
<h2 id="trning">Träning<a class="anchor" href="#trning">¶</a></h2>
<p>2022 var det enskilt bästa träningsåret jag haft hittills. Många fina resultat, bra fokus och tydliga mål är framgångsfaktorer.</p>
<ul>
<li>1000lbs-målet återupptogs, och är skrämmande nära. Får jag förbli skadefri och frisk så är detta ordnat i början av 2023.</li>
<li>Midjemåttet ökade under året, men styrkan också.</li>
</ul>
<h3 id="utvalda-pb-under-ret">Utvalda PB under året<a class="anchor" href="#utvalda-pb-under-ret">¶</a></h3>
<table>
<thead>
<tr><th style="text-align:right">Lyft</th><th style="text-align:center">Datum</th><th style="text-align:center">Vikt, kg</th><th style="text-align:left">Kommentar</th></tr>
</thead>
<tbody>
<tr><td style="text-align:right">Bänkpress</td><td style="text-align:center">December</td><td style="text-align:center">110</td><td style="text-align:left">+12,5kg, ca 15%</td></tr>
<tr><td style="text-align:right">Marklyft</td><td style="text-align:center">Maj</td><td style="text-align:center">185</td><td style="text-align:left">+10kg, dragremmar+bälte.</td></tr>
<tr><td style="text-align:right">Knäböj</td><td style="text-align:center">Maj</td><td style="text-align:center">155</td><td style="text-align:left">+22,5kg, bälte.</td></tr>
</tbody>
</table>
<p>Jag hade några uppehåll med skador och sjukdomar:</p>
<ul>
<li>COVID-19 i augusti,</li>
<li>Brutet revben i februari,</li>
<li>Förkylningar i juni, juli och oktober.</li>
</ul>
<h2 id="2023">2023<a class="anchor" href="#2023">¶</a></h2>
<ul>
<li>Avsluta 1000lbs.</li>
<li>Avsluta Brütal Legend.</li>
<li>Börja med Powerbuilding.</li>
<li>Minska midjemåttet med 5cm.</li>
<li>Fortsätta omfamna Pappa-livet.</li>
<li>Jag vill fortsätta att spara till ett hus.</li>
<li>Åka på åtminstone ett par spelningar och kanske en festival.</li>
<li>Träna minst 3 gånger per vecka under årets alla veckor, undantaget sjukdom/skador.</li>
</ul>
DAW med Arch linux, Pipewire, Reaper och YABridgehttps://madr.se/2023/linux-daw2023-01-01T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p><em>OBS! Detta går precis lika bra att köra med Fedora, Debian eller annan distribution som förinstallerar så minimalt som möjligt. Se bara till att ha fräsch version av Pipewire.</em></p>
<p><em>OBS! Förkunskaper om linux och tidigare erfarenheter av att konfigurera DAWs är förmodligen ett plus, då det kan gå fel på flera ställen på vägen. Detta rekommenderas inte för nybörjare.</em></p>
<h2 id="vlj-hrdvara">Välj hårdvara<a class="anchor" href="#vlj-hrdvara">¶</a></h2>
<ul>
<li>Researcha ljudkortet så att det fungerar med linux. Googla, kika på reddit.</li>
<li>Ett par extra gånger mer än nödvändigt skadar inte!</li>
<li>Generellt sett så kan ett begagnat ljudkort förmodligen fungera bättre än ett sprillans nytt.</li>
</ul>
<h2 id="installera-arch">Installera Arch<a class="anchor" href="#installera-arch">¶</a></h2>
<ul>
<li>Använd archinstall eller kör EndeavourOS om Archs standardinstallation inte känns lockande.</li>
<li>Installera ingenting annat än grundsystemet till att börja med.</li>
</ul>
<h2 id="konfigurera-systemet-fr-pro-audio">Konfigurera systemet för pro audio<a class="anchor" href="#konfigurera-systemet-fr-pro-audio">¶</a></h2>
<ul>
<li>Installera Pipewire och Pipewire-jack</li>
<li>Följ guiden på <a href="https://wiki.archlinux.org/title/Professional_audio">Arch wiki</a>.</li>
<li>Därefter denna guide: <a href="https://madskjeldgaard.dk/posts/audio-setup-arch-2021/">Setting up Arch Linux for audio performance</a></li>
</ul>
<h2 id="vlj-ett-grafiskt-grnssnitt">Välj ett grafiskt gränssnitt<a class="anchor" href="#vlj-ett-grafiskt-grnssnitt">¶</a></h2>
<p>Kör på det som känns mest bekvämt och som inte är i vägen för dig som kreatör.</p>
<ul>
<li>Undvik krävande DEs som installerar för många program du inte kommer att använda, som t ex GNOME, Pantheon, KDE eller Cinnamon.</li>
<li>En lättviktig DE som t ex XFCE, LXDE eller LXQT är att föredra.</li>
<li>Eller, om det föredras: välj en tiling window manager, som t ex i3, Qtile eller bswm.</li>
</ul>
<p>Jag föredrar att köra en slimmad Openbox för att undvika onödiga processer.</p>
<h2 id="installera-reaper">Installera Reaper<a class="anchor" href="#installera-reaper">¶</a></h2>
<p>Går precis lika bra att köra Bitwig, Ardour eller annan DAW. Reaper är dock det jag använder.</p>
<ul>
<li>Installera <code>reaper</code>. Använd JACK i inställningarna, detta kommer att spela via Pipewire.</li>
</ul>
<h2 id="valfritt-installera-vst-brygga">Valfritt: Installera VST-brygga<a class="anchor" href="#valfritt-installera-vst-brygga">¶</a></h2>
<p>Reaper har bra plugins som det är, men om du har några VSTs som bara kör på Windows, behövs en brygga som får dem att upptäckas av Reaper.</p>
<ul>
<li>Installera yabridge och wine: <code>wine</code>, <code>yabridge</code>, <code>yabridgectl</code>.</li>
<li>Installera sedan VSTerna med wine, och lägg till dem i yabridge.</li>
</ul>
<h2 id="om-du-kr-fast">Om du kör fast<a class="anchor" href="#om-du-kr-fast">¶</a></h2>
<ul>
<li>r/linuxaudio</li>
<li>linuxaudio.org</li>
</ul>
Mitt år med Linux Desktophttps://madr.se/2022/linux-desktop2022-11-08T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p>Sedan 90-talet har det skämtats om <a href="https://www.reddit.com/r/linux/comments/3038d4/when_was_the_first_year_of_the_linux_desktop/">Year of the Linux desktop</a>. För egen del har jag aldrig kunnat tvätta av känslan av att vara <a href="/2015/no-sysop/">systemadmin istället för kreatör</a>.</p>
<p>I dagsläget har jag hamnat i en rätt oväntad sitation: allt jag vill göra med en dator kan göras lika bra på Linux som på Windows.</p>
<ul>
<li>Jag kan producera musik.</li>
<li>Jag kan spela spel.</li>
<li>Jag kan programmera appar och webb.</li>
</ul>
<h2 id="spel-lutris-eller-steam-med-proton">Spel? Lutris, eller Steam med Proton<a class="anchor" href="#spel-lutris-eller-steam-med-proton">¶</a></h2>
<p>Steam har satsat ordentligt på <a href="https://www.howtogeek.com/752212/what-is-proton-for-steam-and-how-does-it-affect-gaming-on-linux/">Proton</a>, deras fork av wine. Hela mitt Steambibliotek går att installera och köra på linux, utan minsta problem.</p>
<p>Många indiespel, som exempelvis Minecraft, finns redan på Linux.</p>
<p><a href="https://lutris.net/">Lutris</a> täcker upp alla spel som inte finns på Steam, t ex Blizzards katalog.</p>
<h2 id="musikproduktion-reaper-och-vst-bryggor">Musikproduktion? REAPER och VST-bryggor<a class="anchor" href="#musikproduktion-reaper-och-vst-bryggor">¶</a></h2>
<p>Jag har under hösten 2021 gjort en övergång från Propellerhead Reason till <a href="https://www.reaper.fm/">REAPER</a>, en DAW som "alla andra" verkar köra och gilla.</p>
<p>Reaper finns på linux och kan med rätt konfiguration komma ner på ett par millisekunders latens med ett class+compliant USB Audio Interface, där jag valt det billiga men uppskattade <strong>Behringer UMC202HD</strong>. Med <a href="https://madskjeldgaard.dk/posts/audio-setup-arch-2021/">några enkla instruktioner</a> så är latensen på nivåer nära Apple, och avsevärt bättre än jag fått till med Windows.</p>
<p>Min musiksetup ser ut såhär 2022, 100% linux powered:</p>
<ul>
<li>AMD Ryzen 5 3600, 32GB RAM, 1TB M.2 SSD</li>
<li>Behringer UMC202HD, Class-compliant</li>
<li>Arch Linux med Pipewire och [Openbox]<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></li>
<li>Reaper DAW</li>
<li>Ett gäng LV2-plugins</li>
<li>Yabridge för Windows VSTs</li>
<li>Roland A-500</li>
</ul>
<p>Även Ardour och Bitwig finns som alternativ till REAPER.</p>
<h2 id="arch-r-trevligt-fr-att-bygga-sin-daw">Arch är trevligt för att bygga sin DAW<a class="anchor" href="#arch-r-trevligt-fr-att-bygga-sin-daw">¶</a></h2>
<ul>
<li>Det finns bra guider och dokumentation: Arch wiki har all info man kan tänkas behöva.</li>
<li>Inget man inte behöver installeras, och man kan aktivt välja vad man känner sig mest produktiv med.</li>
<li>Pipewire, linux och annat är alltid senaste versionen då Arch är rolling release.</li>
<li>Reaper, linux-rt etc ligger redan i officiella paketförråden. Arch har musiker och ljudproffs i fokus.</li>
<li>AUR har allt annat.</li>
</ul>
<h2 id="andra-apparater-med-linux">Andra apparater med Linux<a class="anchor" href="#andra-apparater-med-linux">¶</a></h2>
<p>På min bärbara dator, som främst används för bloggande, kodande och på resa, kör jag Fedoras KDE-spin.</p>
<p>På det stora hela så kan jag i egenskap av privatperson numera gå all in på Linux.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Till det mesta annat föredrar jag min egen rice baserad på i3wm. För
ett smidigt arbetsflöde med DAWs passar en stacking window manager (traditionell fönsterhantering) bättre, och istället för att dra in en hel skrivbordsmiljö fick det bli Openbox med Helvum och Pcmanfm. Behöver jag paneler och widgets i framtiden går det att fixa, men för nu så är det minimalistiskt och helt ur vägen. <a href="#fnref1" class="footnote-backref">↩</a></p>
</li>
</ol>
</section>
Postboxen - 1 november 2022https://madr.se/2022/postbox-0052022-11-01T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p>Batch från direktkontakt med artisten, med 1 CD.</p>
<h2 id="farsoth--the-plague-2022">Farsoth – The Plague (2022)<a class="anchor" href="#farsoth--the-plague-2022">¶</a></h2>
<p>Dödsmetall fran ett band i Kalmar, med medlemmar från
Crawl och Ereb Altor. Härligt köttigt.</p>
<p>Digipak, första utgåvan, självutgiven.</p>
<ul>
<li><a href="https://www.discogs.com/release/24906776-Farsoth-The-Plague">Farsoth – The Plague (CD, Album, Digipak) på Discogs</a></li>
</ul>
Minimum viable setup för webbprojekt i containers på VPShttps://madr.se/2022/minimum-viable-docker2022-10-19T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p>Ett av mina favorit-memes för containers är denna:</p>
<p><img src="../../img/docker-meme.jpg" alt="Docker poison meme"></p>
<p>Allvaret bakom skämtet är att <em>containers</em> inte alls är viktigt. Att deploya till VPS:er man själv är ensam ägare till kräver sällan den typen av investering. Att deploya via SFTP eller git post-receive hooks räcker längre än man kan tro, och det är snarare ansible eller något motsvarande som borde användas om man vill göra livet lättare för sig.</p>
<p>Med detta sagt så hade jag ett projekt där det passade att labba litet med detta, så jag ställde mig själv frågan: vad är the <em>minimum viable setup</em> för att sköta deployer med containers istället för källkod?</p>
<p>Min VPS är minimalt confad och körde innan detta projekt i stort sett bara en nginx med en wwwroot innehållande statisk HTML (denna webbplats). SSL-certifikaten hanteras av <a href="https://certbot.eff.org/">Certbot</a>.</p>
<p>Vinsterna med containers i mitt fall är uppenbara.</p>
<ul>
<li>Jag slipper installera mer paket (för Python, Postgres, Elixir, Node.js eller vad jag nu kodar projekt i) på min VPS.</li>
<li>Jag slipper förlita mig på git eller sshd för att kunna göra en deploy.</li>
<li>Jag slipper bli bromsad av att Ubuntu server, som jag har som operativsystem på min VPS, inte har samma versioner av saker som min lokala devmiljö.</li>
</ul>
<p>Projektet jag ville driftsätta är skrivet i Django, och kräver således Python 3 och SQLite (då jag inte har behov av musklerna av en "riktig" databas).</p>
<p>Jag vill vidare köra containern bakom <a href="https://nginx.org/en/">nginx</a>, med SSL-certifikat som hanteras av Certbot.</p>
<p>Det här är de steg jag vidtog för att få upp allt.</p>
<h2 id="17-bygg-en-container-av-projektet">1/7: Bygg en container av projektet<a class="anchor" href="#17-bygg-en-container-av-projektet">¶</a></h2>
<p>En container, oavsett om den byggs med Docker eller Podman, definieras enklast med en <em>Dockerfile</em>.</p>
<p>Det här är en mycket förenklad uppsättning, där en enda container behövs för att köra hela applikationen. Databasen ligger i <code>/app/data</code> och görs tillgänglig som en volym för att kunna backupas och leva kvar mellan deployer. Applikationsservern sparas som en unix-socket som delas via volym, så att nginx kommer åt den.</p>
<pre><code class="language-docker">FROM python:3 as deps
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV DEBUG=0
WORKDIR /app
COPY requirements.txt /app/
RUN pip install -r requirements.txt
FROM deps AS source
COPY ./src /app/
FROM source AS db
RUN mkdir -p /app/data
VOLUME /app/data
RUN ./manage.py migrate
FROM db AS finished
VOLUME /run
# may demand chmod 777 on host to avoid "permission denied errors"
CMD waitress-serve --socket=/run/waitress.sock example:wsgi.application
</code></pre>
<p>Det är också en god idé att skapa filen <a href="di">.dockerignore</a> för att inte skicka över mer än absolut nödvändigt i containern, och därmed hålla dess storlek på en minimal nivå.</p>
<p>För detta projekt är det primärt git-saker och python-cacher som berörs.</p>
<pre><code>__pycache__
venv
.git
.github
.gitignore
README
todo.txt
*.sqlite3
</code></pre>
<p>För att testa om containern funkar, bygg en avbild.</p>
<pre><code>docker build .
</code></pre>
<p>Det ska sedan gå att gå in på http://localhost:13371 och få en Django-app visad.</p>
<p>För referens, så är nedanstående en startplatta för framtida, liknande setups.</p>
<pre><code class="language-docker">FROM some-base:v as deps
WORKDIR /app
# install dependencies
FROM deps AS source
COPY ./src /app/
FROM source AS finished
# Expose unix socket
VOLUME /run
# CMD to start application
CMD start-app.sh
</code></pre>
<h2 id="27-gr-avbilder-av-containern-tillgnglig-fr-vps">2/7: Gör avbilder av containern tillgänglig för VPS<a class="anchor" href="#27-gr-avbilder-av-containern-tillgnglig-fr-vps">¶</a></h2>
<p>Det finns flera strategier att publicera container-avbilder, de flesta sätt kostar ingenting.</p>
<p>Jag väljer aktivt bort alternativ som tvingar mig att göra imagen publik, då jag i detta projekt inte är intresserad av att ge andra åtkomst. Det gör att exempelvis <a href="https://hub.docker.com">Docker hub</a> inte är ett alternativ.</p>
<p>Om koden ligger på Github, kan <a href="https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions">Github Actions</a> automatisera bygget och publicera containern på <a href="https://github.com/features/packages">Github Packages</a>. Då kan VPS:en hämta senaste versionen av containern med <code>docker pull</code>. Valet finns också att göra källkoden och container-avbilden privata, alltså ej synlig för andra.</p>
<ul>
<li>Fördelar: inget extra utöver Docker eller Podman krävs på på VPS.</li>
<li>Nackdelar: beroende av Github för att deploya saker, vilket kan kännas obekvämt.</li>
</ul>
<p>Det går även att sätta upp ett bare git repo på VPS:en, och starta ett eget bygge av containern med en post-receive hook.</p>
<ul>
<li>Fördelar: Inget beroende av Github, Docker Hub eller annan hosting av container-avbilder.</li>
<li>Nackdelar: Kräver mer setup och att git installeras på VPS. Om diskutrymme är kritiskt så behövs även schemalagda städrutiner för gamla container-avbilder skapas och konfigureras.</li>
</ul>
<p>Jag valde alternativ 1, med <strong>privat repo</strong> och <strong>privat package</strong>. Det kan dock ändras om Github bestämmer sig för att jag inte kan göra det gratis i framtiden.</p>
<p>Det finns en Github Action färdig och klar för att bygga och publicera docker images, så använd denna.</p>
<h2 id="37-installera-docker-eller-podman-p-vps">3/7: Installera Docker (eller Podman) på VPS<a class="anchor" href="#37-installera-docker-eller-podman-p-vps">¶</a></h2>
<p>OBS! Min VPS kör Ubuntu Server 20.04 LTS, och på denna finns inte <a href="https://podman.io/">Podman</a> som alternativ. Podman går precis lika bra för vad som skrivs om här, och rekommenderas varmt som ersättare av <a href="https://pacroy.com/try-podman-buildah-and-skopeo-instead-of-docker-c45a0e9394b0">flera bra skäl</a>.</p>
<p>Nginx och Certbot är på plats sedan tidigare på VPS:en, och det är bara Docker CE som behövs.</p>
<pre><code>apt-get update
apt-get install docker-ce
</code></pre>
<p>Lägg till din användare i Dockergruppen för att slippa köra som root.</p>
<pre><code>usermod -aG docker $USER
</code></pre>
<p>Dubbelkolla så att docker kör:</p>
<pre><code>systemctl status docker
</code></pre>
<h2 id="47-starta-container-avbilden-p-vps">4/7: Starta container-avbilden på VPS<a class="anchor" href="#47-starta-container-avbilden-p-vps">¶</a></h2>
<p>Hämta eller bygg en avbild av containern beroende på strategin som valts innan. För att hämta ser det ut såhär:</p>
<pre><code>docker login ghcr.io
docker pull ghcr.io/madr/example-app:main
</code></pre>
<p>Mer info om detta finns i dokumentationen för Github Pages.</p>
<p>Starta därefter container-avbilden. Genom att ge ett namn på den körande container-avbilden blir den enklare att hantera med Dockers cli. Montera också volymen för <code>/app/data</code> så att sqlite-databasfilen blir persistent mellan deployer. Använd en absolut sökväg så att volymen blir lätt att hitta. Som package används här <code>example-app</code> - den riktiga paketnamnet är ett annat.</p>
<pre><code>docker run -d --name example -it \
-v ./run:/run \
-v ./exampledb:/app/data \
ghcr.io/madr/example-app:main
</code></pre>
<p>För att deploya en annan version som ersätter existerande version, ser det ut såhär. Som package används här <code>example-app</code> - den riktiga paketnamnet är ett annat.</p>
<pre><code>docker pull ghcr.io/madr/example-app:main
docker stop example
docker rm example
docker run -d --name example -it \
-v ./run:/run \
-v ./exampledb:/app/data \
ghcr.io/madr/example-app:main
</code></pre>
<p>Notera här att jag här valt att bort den gamla versionen direkt. Att rollbacka till en äldre version krävs alltså en ny pull!</p>
<h2 id="57-exponera-containern-fr-webbtrafik-med-nginx">5/7: Exponera containern för webbtrafik med nginx<a class="anchor" href="#57-exponera-containern-fr-webbtrafik-med-nginx">¶</a></h2>
<p>Tanken är att köra Django inuti containern, och att bara köra en reverse proxy för nginx på den delade unix-socketen.</p>
<p>Som domän används här <code>example.madr.se</code> - den riktiga domänen är en annan.</p>
<pre><code>cat <<END /etc/nginx/sites-available/example.madr.se
upstream app_server {
server unix:/home/example/run/waitress.sock fail_timeout=0;
}
server {
listen 80 default_server;
return 444;
}
server {
listen 80 deferred;
client_max_body_size 4G;
server_name example.com www.example.com;
keepalive_timeout 5;
root /home/example/static;
location / {
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
}
END
</code></pre>
<p>För att se så att allt lirar, validera config:</p>
<pre><code>service nginx configtest
</code></pre>
<p>Om allt gick bra, aktivera siten genom att symlänka.</p>
<pre><code>ln -s /etc/nginx/sites-available/example.madr.se /etc/nginx/sites-enabled/example.madr.se
</code></pre>
<p>Och starta om nginx.</p>
<pre><code>systemctl restart nginx
</code></pre>
<h2 id="67-hantera-ssl-certifikat-fr-projektet-med-certbot">6/7: Hantera SSL-certifikat för projektet med Certbot<a class="anchor" href="#67-hantera-ssl-certifikat-fr-projektet-med-certbot">¶</a></h2>
<p>Hisspitchen för Certbot är att den automatiserar uppskapandet av SSL-certifikat för att kunna köra dina självhostade webbplatser med HTTPS. Let's Encrypt står för utfärdandet av certifikat, så det kostar ingenting.</p>
<p>Är Certbot inte installerat, så finns en bra guide.</p>
<p>Med Certbot på plats, kör detta kommando för att generera certifikat, populera nginx-configen med nödvändig config och schemalägga automatisk förnyelse av certifikat. Scriptet startar även om nginx.</p>
<pre><code>certbot --nginx -d example.madr.se
</code></pre>
<p>Klart! Nu ligger docker-containern uppe i produktion, där den lyssnar på port 80 och är krypterad med SSL.</p>
<h2 id="77-konfigurera-brandvgg-p-vps-valfritt">7/7: Konfigurera brandvägg på VPS (valfritt)<a class="anchor" href="#77-konfigurera-brandvgg-p-vps-valfritt">¶</a></h2>
<p>Detta steg är valfritt, men rekommenderat.</p>
<p>Ubuntu Server kör <code>ufw</code>, så jag tillåter SSH, HTTP och HTTPS och nekar allt annat.</p>
<pre><code>ufw default deny incoming
ufw allow in ssh
ufw allow in http
ufw allow in https
ufw enable
</code></pre>
<p>Docker struntar tyvärr i detta eftersom egna <code>iptables</code> tillämpas, så för att få Docker att respektera <code>ufw</code> krävs litet config.</p>
<p>Lägg till följande i /etc/docker/daemon.json:</p>
<pre><code>"iptables": true,
</code></pre>
<p>Finns inte filen, skapa den istället:</p>
<pre><code>cat <<END > /etc/docker/daemon.json
{"iptables":true}
END
</code></pre>
<p>Inaktivera även <code>iptables</code> för <code>dockerd</code> genom att lägga till <code>--iptables=false</code> i <code>DOCKER_OPTS</code>.</p>
<pre><code>echo 'DOCKER_OPTS="--iptables=false"' >> /etc/default/docker
</code></pre>
<p>Starta sedan om Docker.</p>
<pre><code>systemctl restart docker
</code></pre>
<h2 id="nsta-steg">Nästa steg<a class="anchor" href="#nsta-steg">¶</a></h2>
<p>Detta är <em>minimum viable setup</em>, så det finns flera saker som är bra att göra.</p>
<ul>
<li>Sätt upp ett script som hämtar hem ny version av container-avbilder, och deploya denna till produktion. Kan till och med placeras i en crontab för att få <em>Continuous Delivery</em>.</li>
<li>Städa upp bland hämtade container-avbilder, med ett cronjob eller liknande.</li>
<li>Som en akademisk övning, testa att sätta upp 3 körande containers och använd nginx som lastbalanserare.</li>
</ul>
Mina ATH bästa konsertminnen, pre-Coronahttps://madr.se/2022/best-concerts2022-05-05T00:00:00.000ZAnders Ytterströmyttan@fastmail.se<p>Det är nu 2 år och 2 månader sedan jag senast var på en konsert, detta på grund av
Coronaviruspandemin. Det har gett mig gott om tid att minnas och längta tillbaka
till det livet, och därför beslöt jag mig för att sammanställa en lista över de bästa
konsertminnena jag har under perioden 2000-2020.</p>
<p>Listan är osorterad, då det är omöjligt att välja en favorit.</p>
<h2 id="nightwish-world-tour-of-the-century-stockholm-2002">Nightwish: World Tour of the Century (Stockholm, 2002)<a class="anchor" href="#nightwish-world-tour-of-the-century-stockholm-2002">¶</a></h2>
<p>Jag hade länge lyssnat på Nightwish, och <em>Century Child</em> är min <strong>Nightwish</strong>-skiva - den kom som första nya skiva för mig som fan, som jag köpte och verkligen sträcklyssnade på hundratals gånger. Jag minns en bra tid av replokalshäng, lägenhetsfester och hårdrocksgemenskap när jag lyssnar på den idag.</p>
<p><em>World tour of the Century</em> var första gången Nightwish spelade i Sverige, och det ville jag absolut inte missa. För min del är det i och med denna skiva och dess turné som Nightwishs Power Metal / Tarja-period var som allra bäst.</p>
<p>Spelningen var helt perfekt, med bra energi från bandet och en oerhört hängiven publik. Setlisten var otroligt bra. Tarjas röst var som allra bäst. Det var en av de första gångerna vi lyckades hamna längst fram, och som belöning för det fick jag en öl ifrån bandets gitarrist Emppu.</p>
<h2 id="amon-amarth-surtur-rising-tour-getaway-rock-festival-2012">Amon Amarth: Surtur Rising tour (Getaway Rock festival, 2012)<a class="anchor" href="#amon-amarth-surtur-rising-tour-getaway-rock-festival-2012">¶</a></h2>
<p>Jag har så många fantastiska minnen från <strong>Amon Amarth</strong>, men spelningen 2012 i Gävle tar hem vinsten. Setlisten innehöll många låtar man inte alls väntade sig. Jag hissade upp min sambo på axlarna under extranumret, vilket gav henne en tumme upp från bandet. Ett par personer som inte alls hade lyssnat på Amon Amarth var med oss, och de blev helt hänförda av bandets framförande.</p>
<p>Överhuvudtaget så var Amon Amarth inte lika publikfriande på den här tiden. De hade inga vikingar som slogs på scenen, eller någon uppblåsningsbar Midgårdsorm. Det var renare och mer avskalat.</p>
<p>Amon Amarth är är en av de band jag alltid köper biljetter till, då de är en liveakt i världsklass. Ett av mina varmaste minnen från denna spelning är mellansnacket där Hägg presenterar kommande låt med allvar i rösten, "det handlar om att återvända hem, och att bara vilja komma hem". Varvid de drog igång <em>Under a Northern Star</em>.</p>
<p>Extranumren innehöll också ett spontant gästspel av <strong>LG Petrov</strong> för <em>Guardians of Asgaard</em>, som såklart är ett varmt minne. Vila i frid, LG.</p>
<h2 id="watain-nuclear-alchemy-release-party-kraken-2018">Watain: Nuclear Alchemy release party (Kraken, 2018)<a class="anchor" href="#watain-nuclear-alchemy-release-party-kraken-2018">¶</a></h2>
<p>En mycket intim och personlig spelning för <strong>Watain</strong>. De hade förberett ett personligt brev till alla närvarande, och hade en utställning med memoria och gammal scenrekvisita.</p>
<p>Det var som en masugn, då de inte snålade på pyro trots den lilla lokalen. Watains trogna publik är en intressant skara och som saknar motstycke. Det var i stort sett morspit i hela lokalen.</p>
<p>Som grädde på moset avslutades spelningen med en hyllning till de fallna krigarna från förr med en cover på <em>The Somberlain</em>, som jag bara har hört live den enda gången.</p>
<h2 id="nine-inch-nails-arvikafestivalen-2009">Nine Inch Nails (Arvikafestivalen, 2009)<a class="anchor" href="#nine-inch-nails-arvikafestivalen-2009">¶</a></h2>
<p>Den argaste och mest blinkande spelningen jag hittills upplevt. På samma festival spelade även <strong>Korn</strong>, <strong>diary of Dreams</strong> och <strong>Depeche Mode</strong>, men det är spelningen med NIN jag minns bäst.</p>
<p>Det var tajt, argt, twistat och allt på elvan.</p>
<h2 id="opeth-ghost-reveries-tour-metaltown-2006">Opeth: Ghost Reveries tour (Metaltown, 2006)<a class="anchor" href="#opeth-ghost-reveries-tour-metaltown-2006">¶</a></h2>
<p>Av alla band jag såg på Metaltown var det <strong>Opeth</strong> som lämnade ett störst avtryck. Detta var min första gång med bandet, och de har varit på min lista över måste-se-band sedan dess.</p>
<p>De gick ut och drog igång <em>The Grand Conjuration</em>. Allt var fånigt tajt, och Åkerfeldt sjöng den mjuka versen som sedan övergår till en brygga med hans mycket karaktäristiska deathgrunts. Jag hade aldrig upplevt den här nivån av metalartistskap tidigare, och blev totalt tagen på sängen över hur otroligt bra det var.</p>
<p>Åkerfeldts mellansnack, där han retas med Göteborgarna som den Stockholmare han är, och hans hälsning till Danko Jones <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> att han gärna tar den för laget att vara en <em>hårdrockstönt</em> - "för det är ju så skönt".</p>
<p>Opeth var ett av de sista banden jag såg live 2020, och de var precis lika bra då.</p>
<h2 id="myrkur-close-up-bten-21-2017">Myrkur, Close-up båten 21 (2017)<a class="anchor" href="#myrkur-close-up-bten-21-2017">¶</a></h2>
<p>När jag snubblade över <em>Myrkur</em> blev jag genast intresserad och hänförd, då det är denna typ av Black Metal jag alltid föredragit. Skivan <em>M</em> tog mig genom en svår period i livet, och <em>Mareridt</em> är en bra skiva som var albumaktuell i detta kontext. Så snart jag haft chansen så har jag sett dem live, och även om jag inte är ett stort fan av inrikningen projektet tog så var det svinbra runt tiden när denna spelning skedde.</p>
<p>Jag har tagit en bild tillsammans med Myrkur, och har alltid uppskattat hennes äkta och genuina kärlek för Black Metal. Denna spelning, på Close-up båten 21, är min favorit hittills.</p>
<h2 id="grift-tredingsriten-medelplana-bygdegrd-2017">Grift: Tredingsriten (Medelplana bygdegård, 2017)<a class="anchor" href="#grift-tredingsriten-medelplana-bygdegrd-2017">¶</a></h2>
<p>Ännu en personlig och intim spelning, som skedde på en bygdegård i Västergötland. För spelningen hade en särskild öl, <em>Griftefrid</em>, tagits fram i samarbete med Tempel brygghus. Jag åkte ner med bil, och åkte hem samma natt under övervakning av en månlös natt med många stjärnor.</p>
<p>Scenen var inslagen i granris och sädeslag, och artisterna minglade runt med oss få utvalda som var där. Det är den mest personliga och hängivna spelning jag upplevt, där en liten publik verkligen älskade musiken och gav järnet.</p>
<h2 id="bubblare">Bubblare<a class="anchor" href="#bubblare">¶</a></h2>
<p>Några andra spelningar värda att minnas.</p>
<ul>
<li>Iron Maiden: Brave new World tour. Yngre Maiden-fans är otroligt avundsjuka på att jag var på den spelningen i Stockholm 2000.</li>
<li>Vintersorg på 2000 decibel 2004. Detta är såvitt jag vet sista spelningen innan Vintersorg klippte håret. Setlisten var också bra!</li>
<li>Helloween: Pumpkins united. Förmodligen sista gången Kiske sjunger Helloween live.</li>
<li>Tool, Metaltown 2006. Hade jag vetat hur unika spelningar med Tool är hade jag lyssnat in mig mer.</li>
<li>Sabaton, Gates of Metal 2006. Innan bandet började få ihop sitt skit och satte upp scenshower för de stora arenorna.</li>
<li>Agalloch med Velnias, på Gamla fängelset i Göteborg 2012. De är inte i Sverige så ofta, och spelningen var grymt bra.</li>
<li>Solstafir, Debaser 2017. En av de bästa publikkontakterna jag sett, alla kategorier.</li>
<li>Batuschka, Nalen 2018. Ett band som fick alldeles för kort tid.</li>
<li>Gojira, Wacken 2018. Överraskade mig med hur bra det var, långt över förväntan.</li>
</ul>
<p>Bästa festivalen jag varit på: <strong>Sweden Rock Festival</strong>.</p>
<p>Sämsta spelningen jag hittills sett: <strong>Manowar, Getaway Rock 2012</strong>. Klen sånginsats, misogynt gubbslemmigt beteende, medleys på många av de klassiska låtarna.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>Danko Jones hade tidigare ifrågasatt var det var för typer till hårdrockare som var på Metaltown egentligen, som har mage att dyka upp i sandaler och kortbyxor på ett metalevenemang! Töntar, hela bunten! <a href="#fnref1" class="footnote-backref">↩</a></p>
</li>
</ol>
</section>