Teknik
Välkommen till vår teknikblogg! Håll dig uppdaterad, följ oss på LinkedIn
Välkommen till vår teknikblogg! Håll dig uppdaterad, följ oss på LinkedIn
Go has been around for over 16 years, with more than a decade of stable production use since version 1.0 that was released in 2012. The latest release - 1.26 - came out in February this year.
Every new release has brought new updates, often with a focus on the toolchain and runtime. When it comes to adding new features to the language itself or to the standard library, the development pace has been deliberately slow and conservative.
The introduction of generics that was part of release 1.18 (in 2022) was highly unusual in that respect and gained a lot of attention. In this blog post, we will look at some of the updates that have been made to the language and standard library in the subsequent releases that did not draw as much attention but still delivered useful and in some cases long-awaited features.
I de omedelbara efterdyningarna av Uppdrag gransknings reportage om upphandlingen och införandet av Cosmic i Sussaregionerna från förra veckan, och regeringens efterföljande uppdrag om en “haveriutredning” om vårdens journalsystem från i måndags, hölls årets Vitalis-konferens.

Inget system är perfekt. Servrar går ner, nätverk svajar på pendeln och externa API:er slutar svara. Skillnaden mellan en instabil applikation och en professionell, förtroendeingivande upplevelse ligger sällan i om felen uppstår – utan i hur systemet hanterar dem.
Genom att acceptera att fel är oundvikliga kan vi lättare designa system som aldrig lämnar användaren i ett vakuum. Att integrera detta perspektiv i utveckling från dag ett höjer inte bara den tekniska kvaliteten - det bygger den typ av tillit som krävs för att behålla användare när tekniken sviker.
Begreppet resiliens är ett brett ämne och en systemisk egenskap som spänner över hela stacken – från databaser och mikrotjänster till lastbalanserare och infrastruktur. I det här inlägget kommer vi dock fokusera specifikt på vad man bör tänka på för frontend-delen av en lösning.
Don’t use AI as a robot to solve problems with code; by robot I mean someone who just follows instructions and does exactly as told. There is no AI agent that behaves like that, as there is no human either. Just stop micromanaging your agents and invite them to solve problems together with you.
AI coding assistants are powerful out of the box, but they have no memory of how you prefer to work. Every new conversation starts from zero. You explain your conventions, your preferred tech stack, your testing approach, and then you do it all over again next time. Skills attempt to solve this by letting you store reusable instructions that your assistant can draw on automatically.
Recently, a proposal for adding low-level SIMD support to Go was “Accepted” and was added to Go 1.26 as a GOEXPERIMENT. In the last part I applied a more genuine and fully SIMD-ish approach to my dear ray-sphere intersections, producing results almost 4x faster than the corresponding scalar code. In this part, I’ll try to take advantage of the addition of ToBits Mask32x8 methods to the archsimd package included in Go 1.26.
In this post, I’ll compare five European cloud providers: Scaleway, OVHcloud, Exoscale, CYSO, and Hetzner, with AWS as a counterpoint, representing the non-European hyper-scalers. I’ll look at performance, price, ease of use, and overall experience. Maybe it’s time to leave the big three behind, and look at what Europe has to offer when it comes to the cloud.
Java 25 was released in September 2025 but the rampdown phase for Java 26 has already begun and it will be generally available in the middle of March 2026.
But how much can actually happen in 6 months? Let me tell you.
During the fall, I worked for a Swedish government organisation that has a large legacy codebase. This is a summary of the findings and ways of working that emerged during the project.
Kotlin Coroutines have become the standard for asynchronous programming in the Kotlin ecosystem. While I might not reach for them in every single task, they remain one of the most powerful tools in my developer toolbox. However, using them effectively requires more than just knowing syntax, it requires understanding the underlying mechanics of concurrency.
Recently, a proposal for adding low-level SIMD support to Go was “Accepted” and will be included in Go 1.26 as a GOEXPERIMENT. In the last part I took a look at “thinking in SIMD” in regard to structuring data for SIMD use. In this part, we’ll become more practical, looking at converting a scalar ray-intersection function for data parallelism.
Recently, a proposal for adding low-level SIMD support to Go was “Accepted”. In the last part took a look at SIMD for dot product computations in order to speed up ray-sphere intersection testing. In this blog post, it’s time to “think in SIMD” to hopefully make better use of SIMD.
This is the third and final part of my blog series The black t-shirt architect. Thus far in this series we have concluded that there are no perfect solutions in part 1 so that any architectural decisions becomes a trade-off. We followed up by looking at a way to document architectural decisions in a clear and concise way in part 2. It is finally time for Evolution is inevitable in which we look at how we can balance the need for up-front design without falling into the trap of overengineering the solution.
This is the continuation of my blog series The black t-shirt architect, a name I hope brings to mind the image of an architect still deeply involved in the nitty-gritty details of software development. In this blog series we take a closer look at three fundamental rules of software architecture: Everything is a trade-off, The ‘why’ is more important than the ‘how’ and finally Evolution is inevitable. In the first part we saw how it is essential to consider different alternatives when making significant design decisions and in this part we will follow up by looking at why documenting those design decisions is so important.
This is a new blog series (and my first!) that I have christened The black t-shirt architect. I chose this title to conjure an image of an architect with a background as senior developer still very much involved in the code. I hope it also represents the mindset of a constant learner. Also, I think it sounds rather cool.
Recently, a proposal for adding low-level SIMD support to Go was “Accepted”. In a previous blog post I covered the basics. In this blog post, it’s time to become more practical, looking at possibly accelerating ray-sphere intersections in a toy ray-tracer I’ve written by leveraging SIMD-acceleration of dot product computations abundant in ray tracing.
På Callista har vi varje år ett antal bootcamps, en slags träningsläger där vi tar chansen att träna på saker vi tycker verkar intressanta. Det handlar inte så mycket om att bygga muskler och kondition, mer om att bygga kompetens och självförtroende kring intressant teknologi, arbetssätt, prylar eller vad som helst egentligen.
Vid fikapauserna på höstens bootcamp hamnade jag i spännande diskussioner om MCP-lösningar för hårdvaruövervakning, specialtränade språkmodeller för systemkonfiguration, och WebAuthn/passkeys för modern autentisering. Mitt eget fokus låg på spec-driven utveckling med AI-assistenter, ett arbetssätt där vi beskriver vad vi vill uppnå istället för hur det ska kodas.
Målet? Att köra igenom ett helt utvecklingsflöde från kravinsamling till färdig implementation, med hjälp av strukturerade specifikationer och Claude Code som AI-assistent.
Magnus Larssons bok har kommit ut med en 4:e upplaga och vi är lite nyfikna på vad den innehåller och hur är det egentligen att skriva en bok? Vi lyssnar med Magnus vad han säger.
Recently, a proposal for adding low-level SIMD support to Go was marked as “Likely Accept”. In this blog post, we do some early experiments with the simd package using gotip to access the work-in-progress implementation.
In my last blog post we took a dive into OpenTelemetry and how it could be used to gather signals from your applications. One thing was absent - trace! This blog will take a dive into adding trace to the scenario and what you can get out from it.