<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Programmering on IET Connect</title><link>/categories/programmering/</link><description>Recent content in Programmering on IET Connect</description><generator>Hugo</generator><language>sv-se</language><lastBuildDate>Wed, 03 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="/categories/programmering/index.xml" rel="self" type="application/rss+xml"/><item><title>Att arbeta asynkront: dokumentationsdriven kultur</title><link>/post/post-50/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>/post/post-50/</guid><description>&lt;p&gt;&lt;strong&gt;Communityfrågan: distansarbete som fungerar&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Distribuerade team som fungerar har en sak gemensamt: beslut fattas och dokumenteras skriftligt. Möten blir undantag för det som verkligen kräver realtid.&lt;/p&gt;
&lt;p&gt;RFC-processer, beslutsloggar och välskrivna veckouppdateringar ersätter korridorsnacket. Det kräver övning – men belöningen är fokustid och en organisation som minns varför saker gjordes.&lt;/p&gt;
&lt;p&gt;RFC-processen är navet: den som vill driva en förändring skriver ett kort dokument med kontext, förslag och övervägda alternativ, och kollegor kommenterar asynkront under en utsatt period. Beslutet fattas därefter av en tydligt utpekad ägare – asynkront betyder inte konsensus i evighet, det betyder att alla hunnit tänka innan någon bestämmer.&lt;/p&gt;</description></item><item><title>Sårbarhetshantering: från panik till process</title><link>/post/post-49/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><guid>/post/post-49/</guid><description>&lt;p&gt;&lt;strong&gt;Snabbguide: SBOM och beroendehygien&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nästa stora sårbarhet i ett populärt bibliotek är inte en fråga om utan när. Skillnaden mellan panik och rutin är förberedelse: en aktuell SBOM visar på minuter om ni är berörda.&lt;/p&gt;
&lt;p&gt;Automatisera beroendeuppdateringar med Renovate eller Dependabot, men komplettera med tester som vågar säga ja. Små, täta uppdateringar är säkrare än sällsynta storstädningar.&lt;/p&gt;
&lt;p&gt;SBOM:en – en maskinläsbar innehållsförteckning över varje komponent i era artefakter – har gått från nice-to-have till upphandlingskrav. Generera den i bygget med verktyg som Syft, lagra den per release och koppla den till en sårbarhetsskanner som larmar när nya CVE:er matchar gamla releaser. När nästa stora biblioteksincident slår till är svaret på &amp;ldquo;är vi berörda?&amp;rdquo; en databasfråga, inte en veckas arkeologi.&lt;/p&gt;</description></item><item><title>Speldesignens lärdomar för vanlig mjukvara</title><link>/post/post-48/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>/post/post-48/</guid><description>&lt;p&gt;&lt;strong&gt;Läsvärt från forskningsfronten&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Spelindustrin löste tidigt problem som resten av branschen brottas med nu: prestandabudgetar, telemetri i realtid och snabba iterationscykler mot miljontals användare.&lt;/p&gt;
&lt;p&gt;Begrepp som &amp;ldquo;juice&amp;rdquo; – omedelbar, tillfredsställande återkoppling – förklarar varför vissa produkter känns levande. Läs på om game feel; era användare märker skillnaden även i ett bokföringssystem.&lt;/p&gt;
&lt;p&gt;Prestandabudgetar är kanske den mest direkt överförbara lärdomen. Ett spel som ska hålla 60 bilder per sekund har 16 millisekunder på sig per bildruta – punkt. Varje system får en tilldelad budget och överdrag hanteras som buggar. Jämför med webbens vanliga hållning, där prestanda är något man &amp;ldquo;tittar på senare&amp;rdquo;, och fundera på vad en hård latensbudget per endpoint skulle göra med er arkitektur.&lt;/p&gt;</description></item><item><title>Realtidsdata med strömmande arkitekturer</title><link>/post/post-47/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><guid>/post/post-47/</guid><description>&lt;p&gt;&lt;strong&gt;Under huven: Kafka och vidare&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Händelseströmmar har blivit ryggraden i moderna dataplattformar. Kafka dominerar, men enklare alternativ som NATS och Redpanda tar plats där operativ enkelhet väger tyngre.&lt;/p&gt;
&lt;p&gt;Den svåra frågan är sällan tekniken utan datamodellen: väldefinierade händelser med tydligt ägarskap. Ett schema-register och kontraktstester sparar er från integrationskaos.&lt;/p&gt;
&lt;p&gt;Börja med semantiken innan ni väljer mäklare: är era händelser fakta som hänt (&amp;ldquo;order lagd&amp;rdquo;) eller kommandon som önskas (&amp;ldquo;skicka faktura&amp;rdquo;)? Blandar ni ihop dem får ni system där konsumenter inte vågar agera på meddelanden och producenter inte vågar ändra dem. Händelser som beskriver domänfakta, namngivna i imperfekt, åldras bäst.&lt;/p&gt;</description></item><item><title>Refaktorering under pågående utveckling: så gör du</title><link>/post/post-46/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>/post/post-46/</guid><description>&lt;p&gt;&lt;strong&gt;Snabbguide: parallella spår&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Stora refaktoreringar misslyckas när de blockerar annan utveckling. Lösningen är parallella spår: expand-and-contract-mönstret låter gammal och ny kod samexistera tills migrationen är klar.&lt;/p&gt;
&lt;p&gt;Inför mätpunkter som visar framsteg – andel trafik på nya vägen, antal kvarvarande anrop till gamla API:et. Synliga framsteg håller både teamet och ledningen ombord.&lt;/p&gt;
&lt;p&gt;Mekaniken i expand-and-contract är enkel men kräver tålamod: bygg det nya gränssnittet parallellt med det gamla (expandera), migrera anroparna en i taget i egen takt, och riv det gamla först när mätningarna visar noll användning (kontrahera). Varje steg är litet, testbart och – viktigast av allt – reversibelt. Ingen big bang, ingen fryst utveckling, ingen helg-migration med andan i halsen.&lt;/p&gt;</description></item><item><title>Hemmalabbet: lär dig drift genom att driva själv</title><link>/post/post-45/</link><pubDate>Sun, 17 May 2026 00:00:00 +0000</pubDate><guid>/post/post-45/</guid><description>&lt;p&gt;&lt;strong&gt;Communityfrågan: bästa vägen till DevOps-jobb?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Inget lär dig drift som att driva något själv. Ett hemmalabb med Proxmox eller k3s på begagnad hårdvara ger erfarenheter som inga certifikat matchar.&lt;/p&gt;
&lt;p&gt;Kör dina egna tjänster – DNS-filter, mediaserver, hemautomation – och tvinga dig själv att göra det ordentligt: backuper, övervakning och dokumentation. Det är ett CV i sig.&lt;/p&gt;
&lt;p&gt;Instegskostnaden är lägre än de flesta tror. En begagnad minidator från företagsutförsäljning – tyst, snål och kraftfull nog för ett dussin containrar – kostar som en middag för två. Lägg till Proxmox för virtualisering eller en enkel Docker-värd, och du har en miljö där misstag är lärorika i stället för karriärpåverkande.&lt;/p&gt;</description></item><item><title>Prompt engineering är död – länge leve kontextdesign</title><link>/post/post-44/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>/post/post-44/</guid><description>&lt;p&gt;&lt;strong&gt;Läsvärt från forskningsfronten&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I takt med att modellerna blivit bättre har trixiga prompts ersatts av något viktigare: att ge modellen rätt kontext. RAG, verktygsanrop och strukturerade utdata är dagens byggstenar.&lt;/p&gt;
&lt;p&gt;De team som lyckas behandlar sina AI-flöden som mjukvara: versionerade prompts, utvärderingssviter och regressionstester. Magkänsla skalar inte.&lt;/p&gt;
&lt;p&gt;Skiftet syns tydligast i var förbättringarna kommer ifrån. För två år sedan kunde en omformulerad instruktion lyfta resultaten märkbart; i dag ger samma trixande marginella effekter, medan bättre återfinning, renare källdata och genomtänkta verktygsdefinitioner flyttar berget. Modellen är sällan flaskhalsen längre – det är vad du matar den med.&lt;/p&gt;</description></item><item><title>Nätverksgrunderna alla utvecklare borde kunna</title><link>/post/post-43/</link><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><guid>/post/post-43/</guid><description>&lt;p&gt;&lt;strong&gt;Under huven: från DNS till TLS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;När appen är långsam är svaret ofta i nätverket. Förstå DNS-uppslag, TCP-handskakningar och TLS-terminering så blir felsökningen systematisk i stället för magisk.&lt;/p&gt;
&lt;p&gt;Lär dig läsa en HAR-fil och använda curl med timing-flaggor. De tio minuterna betalar sig första gången du kan peka på exakt var latensen uppstår.&lt;/p&gt;
&lt;p&gt;Ta DNS först, eftersom det är inblandat i nästan allt: varje uppslag är en resa genom cachar – webbläsarens, operativsystemets, resolverns – och TTL-värden styr hur länge svaren lever. Den klassiska gåtan &amp;ldquo;det fungerar på min maskin men inte i produktion&amp;rdquo; har påfallande ofta en DNS-cache eller en split-horizon-konfiguration i botten.&lt;/p&gt;</description></item><item><title>CI/CD-pipelines: snabbare feedback med smartare cachning</title><link>/post/post-42/</link><pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate><guid>/post/post-42/</guid><description>&lt;p&gt;&lt;strong&gt;Veckans verktyg: byggcachar&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Långsamma pipelines dödar produktivitet. De största vinsterna kommer från cachning av beroenden och inkrementella byggen – verktyg som Bazel, Turborepo och Nx bygger bara det som ändrats.&lt;/p&gt;
&lt;p&gt;Mät er pipeline som ni mäter produktionen: p95-tider, kötider och flakiga tester. En kvart snabbare feedback per commit blir timmar per utvecklare och vecka.&lt;/p&gt;
&lt;p&gt;Börja med den lågt hängande frukten: beroendecachar med rätt nycklar. En cache nycklad på låsfilens hash träffar nästan alltid och kapar minuter ur varje körning; en felnycklad cache är värre än ingen, eftersom den bygger vidare på fel grund. Verifiera träfffrekvensen i statistiken – en cache ingen träffar är bara lagringskostnad.&lt;/p&gt;</description></item><item><title>Tillgänglighet på webben: bortom checklistorna</title><link>/post/post-41/</link><pubDate>Thu, 07 May 2026 00:00:00 +0000</pubDate><guid>/post/post-41/</guid><description>&lt;p&gt;&lt;strong&gt;Communityfrågan: var börjar man?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tillgänglighet är inte en granskning i slutet utan ett förhållningssätt genom hela bygget. Semantisk HTML löser åttio procent – rätt element för rätt jobb slår ARIA-attribut varje gång.&lt;/p&gt;
&lt;p&gt;Testa med tangentbord och skärmläsare tidigt. Och involvera användare med funktionsnedsättning i era tester; inga automatiska verktyg fångar den verkliga upplevelsen.&lt;/p&gt;
&lt;p&gt;Siffran som brukar väcka rummet: automatiska verktyg som axe och Lighthouse hittar bara runt en tredjedel av tillgänglighetsproblemen. De är utmärkta som lägsta ribba i CI – inget bygge ska passera med saknade alt-texter eller trasiga kontraster – men de kan inte avgöra om fokusordningen är begriplig eller om felmeddelandet faktiskt hjälper.&lt;/p&gt;</description></item><item><title>Minnessäkerhet: därför kräver myndigheter nya språk</title><link>/post/post-40/</link><pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate><guid>/post/post-40/</guid><description>&lt;p&gt;&lt;strong&gt;Läsvärt från forskningsfronten&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Uppmaningarna från säkerhetsmyndigheter världen över är tydliga: nya system bör byggas i minnessäkra språk. Statistiken talar sitt tydliga språk – majoriteten av allvarliga sårbarheter i systemkod är minnesfel.&lt;/p&gt;
&lt;p&gt;För befintlig C/C++-kod handlar det om gradvis förstärkning: sanitizers i CI, fuzzing och att skriva nya moduler i Rust där gränssnitten tillåter.&lt;/p&gt;
&lt;p&gt;Siffrorna bakom uppmaningarna är svåra att argumentera emot: både Microsofts och Googles analyser har i åratal landat på att omkring 70 procent av deras allvarliga sårbarheter är minnesfel – buffertöverskrivningar, use-after-free, dubbelfrigöringar. Det är en hel felklass som minnessäkra språk eliminerar per konstruktion, inte genom disciplin.&lt;/p&gt;</description></item><item><title>API-design som håller i tio år</title><link>/post/post-39/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate><guid>/post/post-39/</guid><description>&lt;p&gt;&lt;strong&gt;Snabbguide: versionering och kontrakt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Bra API:er är tråkiga: förutsägbara namn, konsekventa felformat och dokumenterade kontrakt. OpenAPI-specifikationen bör vara källan som både kod och dokumentation genereras från.&lt;/p&gt;
&lt;p&gt;Versionera genom addition – nya fält och endpoints – i stället för brytande ändringar. När brytningen är oundviklig: ge konsumenterna lång övergångstid och verktyg för migrationen.&lt;/p&gt;
&lt;p&gt;Felhanteringen är där flest API:er avslöjar sin ålder. Ett konsekvent felformat – gärna standarden Problem Details – med maskinläsbara felkoder, begärans-id för felsökning och mänskligt läsbara förklaringar gör skillnaden mellan en integratör som felsöker på minuter och en som öppnar supportärende. Definiera formatet dag ett; att eftermontera det i hundra endpoints gör ingen.&lt;/p&gt;</description></item><item><title>Så väljer du rätt databas för ditt nästa projekt</title><link>/post/post-38/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>/post/post-38/</guid><description>&lt;p&gt;&lt;strong&gt;Under huven: konsistensmodeller&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Postgres räcker längre än de flesta tror – med JSONB, fulltext och logisk replikering täcker den de flesta behov. Specialdatabaser motiveras först vid extrema krav på skala eller latens.&lt;/p&gt;
&lt;p&gt;Förstå CAP-avvägningarna innan du väljer: stark konsistens kostar tillgänglighet vid nätverksproblem. För de flesta affärssystem är det rätt pris att betala.&lt;/p&gt;
&lt;p&gt;Börja i rätt ände: åtkomstmönstren, inte funktionslistorna. Hur många skrivningar per sekund, hur ser frågorna ut, vilka svarstider kräver användarupplevelsen och hur mycket data pratar vi om egentligen? De flesta system som &amp;ldquo;behöver skala&amp;rdquo; ryms med marginal i en välindexerad Postgres på modern hårdvara – att börja distribuerat är att betala komplexitetspriset innan behovet bevisats.&lt;/p&gt;</description></item><item><title>Profilering av Python: hitta flaskhalsarna på riktigt</title><link>/post/post-37/</link><pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate><guid>/post/post-37/</guid><description>&lt;p&gt;&lt;strong&gt;Veckans verktyg: py-spy och Scalene&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Gissningar om prestanda är nästan alltid fel. py-spy låter dig profilera körande processer utan omstart, medan Scalene separerar CPU-, GPU- och minnesanvändning rad för rad.&lt;/p&gt;
&lt;p&gt;Börja alltid med en profil innan du optimerar. Nio gånger av tio ligger flaskhalsen i I/O eller en oväntad loop – inte där magkänslan pekar.&lt;/p&gt;
&lt;p&gt;py-spys superkraft är att den är ofarlig i produktion: den läser målprocessens minne utifrån utan att injicera kod, så du kan ta en flamegraf av den hängande batchkörningen mitt i natten utan omstart och utan mätbar påverkan. Kommandot &lt;code&gt;py-spy dump&lt;/code&gt; som visar alla trådars aktuella stackar har ensamt löst fler mystiska hängningar än något annat verktyg i Python-världen.&lt;/p&gt;</description></item><item><title>Git-arbetsflöden som minskar merge-konflikter</title><link>/post/post-36/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><guid>/post/post-36/</guid><description>&lt;p&gt;&lt;strong&gt;Snabbguide: trunk-based development&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Små, täta commits mot huvudgrenen med feature flags i stället för långlivade grenar minskar konflikterna dramatiskt. Nyckeln är automatiserade tester som vågar säga nej, och en kultur där trasig main åtgärdas före allt annat.&lt;/p&gt;
&lt;p&gt;Börja med att korta ner era pull requests – under 400 rader ändrad kod granskas bevisligen bättre. Kombinera med dagliga integrationer så försvinner de flesta merge-mardrömmarna av sig själva.&lt;/p&gt;
&lt;p&gt;Feature flags är mönstrets bärande bjälke och förtjänar egen disciplin. Ofärdig kod kan mergas till main bakom en avstängd flagga, vilket skiljer driftsättning från lansering – koden åker ut kontinuerligt, funktionen slås på när den är redo. Men flaggor åldras dåligt: sätt ett utgångsdatum på varje flagga och städa regelbundet, annars byter ni merge-konflikter mot ett träsk av döda kodvägar.&lt;/p&gt;</description></item><item><title>Från monolit till moduler: en pragmatisk migrationsguide</title><link>/post/post-30/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><guid>/post/post-30/</guid><description>&lt;p&gt;Att skriva om monoliten från grunden är nästan alltid fel svar. De framgångsrika migrationerna vi ser följer i stället strangler fig-mönstret: ny funktionalitet byggs utanför, gammal flyttas gradvis.&lt;/p&gt;
&lt;p&gt;Första steget är alltid detsamma: kartlägg domängränserna. Verktyg som kan analysera beroendegrafer och ändringsmönster i versionshistoriken avslöjar var de naturliga sömmarna finns.&lt;/p&gt;
&lt;p&gt;Sätt mätbara mål för varje etapp och fira delsegrar. En migration utan synliga framsteg tappar både budget och entusiasm inom ett halvår.&lt;/p&gt;</description></item><item><title>Async Rust förklarat: futures, tasks och runtimes</title><link>/post/post-16/</link><pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate><guid>/post/post-16/</guid><description>&lt;p&gt;Asynkron programmering i Rust förvirrar många nykomlingar. Nyckeln är att förstå att en future inte gör någonting förrän den pollas – Rust bygger på lat evaluering, till skillnad från JavaScripts ivriga promises.&lt;/p&gt;
&lt;p&gt;Runtimen, oftast Tokio, ansvarar för att schemalägga tasks över trådar. Det förklarar också de ökända &lt;code&gt;Send&lt;/code&gt;-felen: din data måste kunna flytta mellan trådar säkert.&lt;/p&gt;
&lt;p&gt;Vårt tips: börja med enkla &lt;code&gt;async fn&lt;/code&gt; och &lt;code&gt;tokio::spawn&lt;/code&gt;, och undvik att blanda blocking-kod i async-kontexter – det är källan till de flesta prestandaproblem.&lt;/p&gt;</description></item><item><title>Därför bör du lära dig systemdesign 2026</title><link>/post/post-10/</link><pubDate>Mon, 02 Feb 2026 00:00:00 +0000</pubDate><guid>/post/post-10/</guid><description>&lt;p&gt;Systemdesign har blivit det viktigaste ämnet i tekniska intervjuer – och med rätta. I en tid när AI skriver allt mer rutinkod blir förmågan att designa helheter det som skiljer ingenjörer åt.&lt;/p&gt;
&lt;p&gt;Grunderna är eviga: lastbalansering, cachning, databasval, konsistensmodeller. Men nya frågor tillkommer, som kostnadsoptimering i molnet och design för AI-arbetslaster.&lt;/p&gt;
&lt;p&gt;Bästa sättet att lära sig är att rita. Ta en tjänst du använder dagligen och skissa hur du skulle bygga den – begränsningarna lär dig mer än någon kurs.&lt;/p&gt;</description></item><item><title>Guide: Kom igång med Rust för inbyggda system</title><link>/post/post-02/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><guid>/post/post-02/</guid><description>&lt;p&gt;Rust har seglat upp som ett verkligt alternativ till C för inbyggda system. Minnessäkerheten utan skräpsamlare gör språket idealiskt för mikrokontrollrar med begränsade resurser.&lt;/p&gt;
&lt;p&gt;Med &lt;code&gt;no_std&lt;/code&gt;-läget och crates som &lt;code&gt;embedded-hal&lt;/code&gt; kan du skriva drivrutiner som är portabla mellan olika chip. Communityt kring embedded Rust växer snabbt och stödet för STM32, ESP32 och RP2040 är i dag moget.&lt;/p&gt;
&lt;p&gt;Börja med en Raspberry Pi Pico och boken &amp;ldquo;The Embedded Rust Book&amp;rdquo; – på en helg har du en blinkande LED och en god grund att bygga vidare på.&lt;/p&gt;</description></item></channel></rss>