Kategori: Teknik

  • Zabbix, Wazuh, Zrythm och pipeline-fixes — en dag med infra och i18n

    En fullspäckad dag med allt från infrastruktur till översättningar. Här är sammanfattningen.

    Zabbix — Fullständig monitoreringsinfrastruktur

    Distribuerade Zabbix 7.4 till 10 hostar — allt från Proxmox-noder och LXC-containrar till Mac Mini och WSL-maskiner.

    • 10 hostar registrerade med agent2/agentd:
    • Fixade: PHP 8.4 pgsql-modul, Admin-lockout, NVIDIA GPU-plugin-krasch
    • Dashboard

    Wazuh — Uppgradering och i18n

    Dessutom: första svenska översättningen av Wazuh Dashboard.

    • PR #8260 — 350 strängar i sv-SE.json
    • 78 React-komponenter internationaliserade med @osd/i18n
    • 0 kvarvarande hårdkodade strängar
    • Första icke-engelska locale-bidraget till Wazuh

    Zrythm — Från 63% till 99.9%

    Zrythm (digital audio workstation) gick från 63% till 99.9% svenska på en eftermiddag.

    Komponent Före Efter Strängar
    zrythm (app) 63% 99.9% 569 nya
    web 13% 77% 178 nya
    accounts 50% 81% 26 nya
    user-manual 8% 89% 1 408 nya

    Totalt: 2 181 strängar översatta och uppladdade till Weblate.

    Hittade också en segfault-bugg i Zrythm — appen kraschar vid svenska locale pga en trasig format-sträng i den medföljande .mo-filen (4 av 5 %s-platshållare → g_strdup_printf segfaultar).

    review-po-v3 — Pipeline-förbättringar

    Fem uppdateringar baserade på dagens arbete:

    • ts2po-artefakter — filtrerar bort false positives från Qt TS → PO-konvertering (317 → 38 FAIL)
    • Översatta platshållare — detekterar när sub-agenter översätter {endref}{slutref}
    • ”Vänligen” auto-fix — automatisk borttagning av DeepL:s bokstavliga ”Please”-översättning
    • DAW/musik-termer i brand-skip — plugin, fader, mixer, channel etc. flaggas inte längre som egennamn
    • DevOps/security-termer — dashboard, agent, endpoint, compliance etc. i whitelisten

    parallel-worker — Filformat-validering

    Patchade TR:s parallel-worker med validering som fångar felaktiga filer innan de kraschar review-po-v3:

    • ZIP-arkiv, JSON, XML/Qt TS, binärfiler — alla avvisas med tydligt felmeddelande
    • 30 error-jobb i kön → 23 återhämtade efter omstart

    Siffror

    Kategori Antal
    Strängar översatta (Zrythm) 2 181
    Strängar översatta (Wazuh) 350
    React-komponenter i18n (Wazuh) 78
    Zabbix-hostar deployade 10
    Wazuh uppgraderad 4.11.2 → 4.14.4
    Buggar rapporterade 1 (Zrythm segfault)
    Pipeline-förbättringar 5
    PR:ar 1 (Wazuh #8260)
  • Visio Viewer: A Chrome Extension That Opens .vsdx Files — No Visio Required

    Visio Viewer: A Chrome Extension That Opens .vsdx Files — No Visio Required

    Ever received a .vsdx file and had no way to open it? Microsoft Visio is expensive, Windows-only, and most online converters want you to upload your diagrams to some random server. There had to be a better way.

    So I built one: Visio Viewer, a Chrome extension that renders Visio files directly in your browser. No cloud. No uploads. No Visio license. Everything runs locally.

    What It Does

    Drop a .vsdx file onto Chrome (or use the file picker), and you get a clean SVG rendering of your diagram. The viewer supports:

    • Multi-page navigation — browse all pages in a Visio document
    • Zoom & pan — scroll to zoom, drag to pan, fit-to-page button
    • Dark mode — because of course
    • URL interception — click a link to a .vsdx file and it opens in the viewer automatically
    • Open from URL — paste a URL to a remote .vsdx file
    Network diagram with hundreds of nodes rendered in Visio Viewer
    A large network overview diagram — zoomed out to 23%, all rendered client-side
    BPMN diagram rendered in Visio Viewer
    A BPMN sample diagram with colored shapes and connectors
    MikroTik switch diagram rendered in Visio Viewer
    A detailed MikroTik CRS312 switch stencil — rendered as crisp SVG

    How It Works

    Under the hood, the extension uses libvisio-ng — a pure Python Visio parser I built — running inside Pyodide (a full CPython compiled to WebAssembly). The entire pipeline runs in a sandboxed iframe:

    1. The extension intercepts .vsdx files (via drag & drop, file picker, or URL)
    2. The file is passed to libvisio-ng running in Pyodide (Python in WASM)
    3. libvisio-ng parses the OPC/XML structure and produces SVG output
    4. The SVG is rendered in the viewer with zoom/pan controls

    All processing happens locally in your browser. No data leaves your machine. It works completely offline once installed.

    Simple Visio diagram showing Hello World
    Even simple diagrams render cleanly

    Installation

    Version 1.2.0 is available now:

    To install from GitHub: download the release, unzip, go to chrome://extensions, enable Developer mode, and click ”Load unpacked”.

    Open Source

    The extension is open source under MIT/GPL. Contributions welcome.

  • Bättre svenska i espeak-ng

    Bättre svenska i espeak-ng

    Jag har skickat en pull request till espeak-ng med stora förbättringar av det svenska uttalet. espeak-ng är den talsyntes som används av bland annat Orca (skärmläsaren i GNOME/Linux) och ligger till grund för i princip all TTS på Linux.

    Vad var fel?

    Svenska i espeak-ng har länge haft problem. Det mest uppenbara var att sje-ljudet (ɧ) — det karakteristiska svenska ljudet i ord som "sjö", "skjorta" och "stjärna" — var felmappat till tj-ljud (ɕ). Det innebar att "sju" lät som "tju" och "sjuk" som "tjuk". Inte direkt begripligt.

    Dessutom saknades regler för vanliga svenska ljudkombinationer: dj (djur, djup), hj (hjärta, hjälm) och lj (ljus, ljud) uttalades bokstavligt istället för som /j/. Och suffixet -tion (station, funktion) fick helt fel uttal.

    Fas 1 — Grundläggande uttalsregler

    • sje-ljud: skj → /ɧ/ (var felaktigt /ɕ/)
    • -tion/-tions: korrekta regler för detta vanliga suffix
    • dj/hj/lj: nya regler för → /j/
    • 230+ nya ord i ordlistan (nu totalt 899): veckodagar, månader, siffror, vanliga ord, förkortningar, ortnamn, tekniktermer
    • 16 nya symboler: £, §, °, bråk, pilar, euro med mera

    Fas 2 — Retroflexer ✅

    Retroflexerna är nu implementerade och mergade. Svenska retroflexer (rt → ʈ, rd → ɖ, rn → ɳ, rl → ɭ) fungerar korrekt — det som gör att "barn" uttalas med ɳ och "gården" med ɖ, precis som i naturligt tal.

    Fas 3–10 — Massiv expansion ✅

    Efter retroflexerna fortsatte arbetet i åtta ytterligare faser:

    • Fas 3–4: Vokalkorrigeringar — lång u (ʉː), bättre vokallängder, sje-ljud (ɧ) fixat genomgående
    • Fas 5–6: Grammatik och prosodi — ”de/dem” → /dɔm/, ”det” → /deː/, fyra svenska intonationsmönster
    • Fas 7–8: Egennamn och ortnamn — Göteborg, Trollhättan, Malmö, Karin, Andersson m.fl.
    • Fas 9–10: IT-termer och lånord — browser, screenshot, wifi, offline, IT-säkerhet
    • 1 197 ord i sv_list (från ~170 i originalet)
    • ~50 nya uttalsregler i sv_rules
    • Prosodijustering — bredare tonhöjdsvariation, naturligare vokallängder och förbättrad frågeintonation

    🔊 Lyssna — före och efter (fas 3–10)

    Dessa meningar visar förbättringarna från de senare faserna. Jämför systemets espeak-ng med vår förbättrade version:

    Mening Före Efter
    ”De gick till Göteborg på onsdag för att handla köttbullar.”
    de→/dɔm/, Göteborg, köttbullar
    ”Det är riktigt viktigt att barnen äter frukost varje dag.”
    det→/deː/, riktigt, viktigt
    ”Karin Andersson bor i Trollhättan och jobbar med IT-säkerhet.”
    Egennamn, ortnamn, IT-termer
    ”Vill du starta din browser och ladda ner appen?”
    Frågeintonation, lånord

    Fas 11–13 — Sammansatta ord, lånord och prosodi ✅

    • Fas 11: Sammansatta ord — 37 vanliga sammansättningar: köttbullar, busshållplats, parkeringsplats, vardagsrum, mataffär m.fl.
    • Fas 12: Lånord — 11 vanliga lånord: restaurang, garage, parfym, journalist m.fl.
    • Fas 13: Prosodiregler och suffix — 18 suffix-uttal och ordinaltal (13:e–31:a), vokalpar (glas/glass, ful/full)

    🔊 Nya ljudexempel (fas 13)

    Lyssna på den förbättrade svenska rösten med espeak-ng:

    Text espeak-ng (vår)
    ”Hej, jag heter Alma och jag pratar svenska.”
    ”Sjuksköterskan skötte sjuttiosju sjösjuka sjömän.”
    sje-ljud (ɧ)
    ”Kött och potatis med lingonsylt är en klassisk svensk rätt.”
    sammansatta ord
    ”Stockholm är Sveriges huvudstad med över en miljon invånare.”
    ”Flygande bäckasiner söka hwila på mjuka tuvor.”
    pangram
    ”Trettiotre trista tråkiga trollungar trampade trettiofyra trappsteg.”
    tungvrickare
    ”God morgon! Hur mår du idag?”
    frågeintonation
    ”Barnen leker i parken medan solen skiner.”

    Statistik

    • 1 197 ord i sv_list (från ~170 i originalet)
    • Retroflexer: ɖ, ɳ, ɭ, ʈ — alla implementerade
    • 4 svenska intonationsmönster (deklarativ, fråga, uppräkning, emfas)
    • Fonemfixar: sje-ljud ɧ korrigerat, lång u (ʉː) fixat
    • ”de/dem” → /dɔm/, ”det” → /deː/
    • ~50 nya uttalsregler i sv_rules
    • 42 vokalpar med korrekt kvantitetsdistinktion (glas/glass, ful/full)
    • Ordinaltal 13:e–31:a med korrekt uttal
    • 13 faser av förbättringar

    Status

    Alla CI-tester gröna. Pull requesten väntar nu på review från espeak-ng-teamet. Detta är den största förbättringen av det svenska uttalet i espeak-ng:s historia — ordlistan har gått från ~170 till 1 197 ord i 13 faser, med helt nya uttalsregler, retroflexer, prosodijusteringar, sammansatta ord, lånord och korrekt sje-ljud.

    Varför det spelar roll

    espeak-ng är inte den snyggaste talsyntesen, men den är den viktigaste. Den är fri, öppen källkod, och den enda TTS som alla Linux-användare har tillgång till utan extra kostnad eller molntjänster. För synskadade användare som förlitar sig på Orca är detta deras röst. Att den rösten ska uttala svenska korrekt borde vara en självklarhet.

    👉 Pull request #2364 på GitHub

  • libvisio-ng 0.6.0 och VSDView 0.5.0 — nu ännu längre före C++-versionen

    libvisio-ng 0.6.0 och VSDView 0.5.0 — nu ännu längre före C++-versionen

    Det har hänt en hel del sedan förra releasen. Både libvisio-ng och VSDView har fått rejäla uppgraderingar, och gapet till det gamla C++-baserade libvisio har bara ökat.

    libvisio-ng 0.6.0

    Den här releasen handlar mycket om att hantera fler av Visios visuella funktioner korrekt — saker som det gamla C++-biblioteket aldrig implementerade.

    Nya funktioner:

    • Rich text — formaterad text i shapes renderas nu korrekt med fetstil, kursiv, teckenstorlek och färg
    • Radiella gradienter — inte bara linjära längre, utan även radiella gradienter stöds nu fullt ut
    • Bildinbäddning — inbäddade bilder (EMF, PNG, JPEG) i .vsdx-filer extraheras och renderas i SVG-output
    • Type hints — hela kodbasen har fått type annotations, vilket gör det enklare att bidra och integrera
    • Sphinx-dokumentation — ordentlig API-dokumentation genererad med Sphinx
    • CI-pipeline — automatiserade tester och kvalitetskontroll vid varje commit

    Testsviten har vuxit från 96 till 102 tester. Varje test validerar att en specifik Visio-fil konverteras korrekt — det är ingen leksak.

    libvisio-ng finns nu på PyPI:

    pip install libvisio-ng

    Ren Python. Inga C++-beroenden. Inga systembibliotek att krångla med. Det bara funkar.

    libvisio-rs — Rust-porten

    Det som tidigare var ”nästa steg” är nu verklighet. libvisio-rs v0.1.1 är en fullständig Rust-port av libvisio-ng med C ABI via cbindgen-genererade headers — redo att droppa in som ersättare för C++ libvisio i LibreOffice och Inkscape.

    • C ABI — cbindgen-genererade headers gör det möjligt att länka direkt från C/C++-projekt
    • PyO3 Python-bindings — samma API som libvisio-ng, men med Rust-prestanda
    • Inkscape-extension — inskickat som MR #718
    • LibreOffice — enhancement proposal inskickat

    Installera via crates.io:

    cargo add libvisio-rs

    Koden finns på github.com/yeager/libvisio-rs och crates.io/crates/libvisio-rs.

    Jämförelse: libvisio-ng/rs vs C++ libvisio

    Det här projektet startade för att C++-versionen av libvisio (som LibreOffice använder) hade stagnerat. Ingen aktiv utveckling sedan ~2018, bristfälligt stöd för teman, gradienter, skuggor och textformatering. Här är den fullständiga jämförelsen:

    Funktion C++ libvisio libvisio-ng/rs
    .vsdx-stöd Grundläggande ✅ Fullt (teman, gradienter, skuggor)
    .vsd-stöd (binärt) Bra ✅ Fullt (NURBS, splines, bilder, lager)
    Temafärger
    Linjära gradienter Delvis
    Radiella gradienter
    Skuggor
    Skraffering/mönsterfyllning
    Rich text (blandade stilar) Delvis
    Bildinbäddning Delvis
    Konnektorer Grundläggande ✅ Full med routing
    Master shape-arv Delvis ✅ Fullt
    Hyperlänkar
    Rundade rektanglar
    Linjemönster (streckade m.m.) Grundläggande ✅ Fullt
    Fyllnadsmönster
    Pilmarkörer Delvis
    Tester Begränsat 102
    Språk C++ Python + Rust + C ABI
    Aktiv utveckling ❌ (senast ~2018)
    PyPI ✅ libvisio-ng
    crates.io ✅ libvisio-rs
    Homebrew ✅ (via VSDView)

    VSDView 0.5.0

    VSDView är den grafiska Visio-läsaren som bygger på libvisio-ng. Version 0.5.0 är en massiv uppgradering med 15 nya funktioner:

    • Zoom och panorering — scrolla och zooma fritt i diagrammet
    • Sökfunktion — hitta shapes och text i dokumentet
    • Shape-information — klicka på en shape för att se dess egenskaper
    • Mätverktyg — mät avstånd direkt i diagrammet
    • Export — spara som SVG, PNG eller PDF
    • Lagerhantering — visa/dölj lager
    • Minimap — överblick över hela dokumentet
    • …och mer

    Den stora förändringen under huven är att VSDView nu helt har ersatt C++ libvisio med libvisio-ng. Tidigare krävdes libvisio-tools som systempaket — nu är allt inbyggt. 4000 rader gammal parser-kod ersattes med en 30-raders wrapper mot libvisio-ng. Resultatet: bättre rendering, enklare installation, och stöd för allt som libvisio-ng klarar.

    Det finns också en Tauri-baserad nativapp (v0.2.0) med Alma TTS-integration.

    📦 Installation

    • macOS: brew install yeager/tap/vsdview
    • Windows: Ladda ner från GitHub Releases
    • Linux: .deb och .rpm i våra repos, eller pip install vsdview
    • PyPI: pip install vsdview

    Integration i ekosystemet

    Målet är att ersätta det ounderhållna C++ libvisio över hela open source-ekosystemet:

    • Inkscape: Extension inskickat som MR #718 — öppnar .vsd/.vsdx direkt i Inkscape via libvisio-ng
    • LibreOffice: Enhancement proposal inskickat för att ersätta C++ libvisio med libvisio-rs

    Med libvisio-rs C ABI och cbindgen-headers kan projektet fungera som drop-in-ersättare för det gamla biblioteket. Python-versionen (libvisio-ng) driver redan VSDView och Inkscape-extensionen, medan Rust-versionen (libvisio-rs) riktar sig mot LibreOffice och andra C/C++-projekt.

    Länkar

    libvisio-ng, libvisio-rs och VSDView är öppen källkod under GPL-3.0.

  • Alma — en svensk TTS-röst för barn med NPF

    Alma — en svensk TTS-röst för barn med NPF

    Jag har tränat en egen svensk TTS-röst med Piper TTS. Hon heter Alma, uppkallad efter min dotter, och är tänkt att användas i appar riktade till barn med NPF (neuropsykiatriska funktionsnedsättningar).

    Bakgrund

    Barnen i vår familj har alla olika varianter av autism, ADHD och språkstörning. De appar jag bygger åt dem (autismappar.se) behöver talstöd — men de befintliga svenska TTS-rösterna låter antingen robotaktiga eller är helt enkelt inte anpassade för barn. Jag ville ha en röst som känns varm, tydlig och trygg.

    Tekniken

    Alma är finskiktad (finetunad) ovanpå KBLabs svenska VITS-modell med hjälp av Piper TTS träningsramverk. Träningen kördes på en NVIDIA RTX 4080 i ungefär 5500 epoker — det tog några dagar, men resultatet blev bra.

    Piper är ett lätt, snabbt och helt lokalt TTS-system. Ingen molntjänst behövs. Det körs direkt på enheten, vilket är viktigt för integritet och svarstid — speciellt i appar för barn.

    🎯 Före och efter — röstjämförelse

    Här kan du höra skillnaden mellan de olika rösterna och våra förbättringar. Vi jämför fyra varianter: den omodifierade espeak-ng (systemets standardröst), vår förbättrade espeak-ng med retroflexer och bättre uttalsregler, Piper standard (sv_SE-nst-medium) och slutligen Alma — vår egna finjusterade röst med lånordsfix.

    Lyssna särskilt på hur retroflexerna (rd, rn, rt) och engelska lånord uttalas.

    Mening espeak (före) espeak (efter) Piper std Alma Web Speech
    ”Hej, jag heter Alma och jag ska hjälpa dig idag.”
    ”Barnen lekte i gården hela lördagen.”
    🎯 Retroflexer: barn→bɑːɳ, gården→goːɖen, lördagen→løːɖɑːgen
    ”Alla appar fungerar offline utan wifi.”
    🎯 Lånord: offline→åfflajn, wifi→wajfaj
    ”Kan du peka på den röda bollen?”
    Enkel barnvänlig mening
    💡 Nya exempelmeningar — visar fas 3–10
    ”De gick till Göteborg på onsdag för att handla köttbullar.”
    🎯 de→/dɔm/, Göteborg, onsdag, köttbullar
    ”Det är riktigt viktigt att barnen äter frukost varje dag.”
    🎯 det→/deː/, riktigt, viktigt
    ”Karin Andersson bor i Trollhättan och jobbar med IT-säkerhet.”
    🎯 Egennamn, ortnamn, IT-termer
    ”Vill du starta din browser och ladda ner appen?”
    🎯 Frågeintonation, lånord (browser, appen)

    Vad hör du?

    • espeak-ng (före): Systemets standardröst — robotaktig och med fel uttal av retroflexer. ”Barnen” uttalas med separata r+n istället för retroflex ɳ.
    • espeak-ng (efter): Vår PR #2364 — retroflexer (ɳ, ɖ, ʈ) fungerar nu korrekt. Hör skillnaden i ”barnen”, ”gården” och ”lördagen”.
    • Piper standard: Neural röst (sv_SE-nst-medium) — mycket naturligare, men uttalar engelska lånord bokstavligt (”offline” som det stavas).
    • Alma: Vår finjusterade röst med fonetisk förbehandling — lånord uttalas korrekt (”åfflajn”, ”wajfaj”) och rösten är optimerad för barn.

    Jämförelse: standardröst vs Alma

    Här nedan kan du lyssna på samma meningar upplästa av standardrösten (sv_SE-nst-medium) och Alma. Meningarna innehåller engelska lånord som offline, wifi, screenshot och browser — ord som ofta förekommer i apparna och som nu uttalas korrekt tack vare fonetisk förbehandling.

    ”Alla appar fungerar offline, utan wifi eller internet.”

    Standardröst:

    Alma:

    ”Du kan ladda ner uppdateringar och ta en screenshot av dina resultat.”

    Standardröst:

    Alma:

    ”Öppna din browser och klicka på länken i ditt email.”

    Standardröst:

    Alma:

    Nästa steg

    Alma-rösten är redo att integreras i apparna på autismappar.se. Planen är att använda henne som standardröst i de appar som riktar sig till yngre barn. Modellen exporteras som ONNX och kan köras helt offline — inget moln, ingen latens, ingen dataläckage.

    Längre exempel

    Här är ett längre stycke med blandning av vanlig svenska och engelska lånord. Alma pratar lugnt och tydligt, i ett tempo som passar yngre barn.

    Standardröst:

    Alma:

    Uttalförbättringar

    Ett stort problem med svenska TTS-röster är engelska lånord. Ord som offline, wifi, screenshot och email uttalas bokstavligt — vilket låter helt fel. I barnens appar förekommer dessa ord överallt, så det behövde lösas.

    Fonetisk förbehandling

    Lösningen är en enkel men effektiv preprocessing-pipeline: innan texten skickas till Piper ersätts cirka 30 vanliga engelska lånord med svenska fonetiska stavningar. Till exempel:

    • offlineåfflajn
    • wifiwajfaj
    • screenshotskriinsjått

    Samma pipeline funkar med både Piper och Web Speech API.

    espeak-ng: svenska uttalsregler

    Parallellt med den fonetiska kartläggningen har jag skickat in en pull request till espeak-ng med förbättrade svenska uttalsregler. Bland annat:

    • ✅ Korrekta sje-ljud (sj, skj, stj, sch)
    • ✅ Rätt hantering av -tion, gn-, dj-, hj-, lj-
    • ✅ Över 899 ord i den svenska ordboken (10 faser av förbättringar)

    espeak-ng är den fonemiserare som Piper använder under huven, så bättre regler där ger bättre uttal i Alma direkt.

    Alma i GNOME Orca

    Alma fungerar nu som röst i GNOME:s skärmläsare Orca via Spiel — GNOME:s nya talramverk. Det här är stort: för första gången kan svenska blinda och synskadade Linux-användare få en naturlig, neural svensk röst i sin skärmläsare.

    Spiel ersätter det gamla speech-dispatcher-systemet och stödjer både espeak-ng och Piper-röster via D-Bus. Det betyder att Alma, som är en Piper-röst, dyker upp automatiskt som valbar röst i Orca när speech-provider-piper är installerat.

    Spiel visar Alma-rösten som tillgänglig i terminalen på Ubuntu

    Vi har testat detta på Ubuntu 26.04 och Fedora 43. Spiel måste fortfarande byggas från källkod — det är inte paketerat i distributionerna ännu — men det fungerar. Alma hittas, väljs, och läser upp svensk text med sin vanliga varma röst, rakt in i Orca.

    Våra bidrag till Spiel-ekosystemet

    Det här är fortfarande tidigt — Spiel är under aktiv utveckling och infrastrukturen mognar — men riktningen är tydlig. En naturlig svensk röst i GNOME:s tillgänglighetsstack, helt lokalt, utan molntjänster. Det är precis vad som behövs.

    Ladda ner

    Alma-rösten finns att ladda ner fritt:

    Har du frågor eller vill testa rösten? Hör av dig!

  • libvisio vs libvisio-ng: Why We Built a Pure Python Visio Parser

    libvisio vs libvisio-ng: Why We Built a Pure Python Visio Parser

    When I started building VSDView — a GTK4 viewer for Microsoft Visio files — I initially relied on libvisio, the C++ library from The Document Foundation (TDF) that powers Visio import in LibreOffice. It worked, sort of. But as I pushed it harder with real-world diagrams, the cracks became impossible to ignore.

    So I wrote my own parser. It started as VSDView’s built-in rendering engine, and has now been extracted into a standalone library: libvisio-ng.

    Here’s why, and what the difference looks like in practice.

    The Problem with libvisio (C++)

    libvisio is a reverse-engineered parser. It was built primarily for LibreOffice’s document import pipeline, not for high-fidelity rendering. The limitations become obvious quickly:

    • No theme support — Visio’s theme system (QuickStyles, accent colors) is completely ignored. Shapes that rely on themes render as black outlines.
    • No fill colors — Most shape fills are simply missing. You get wireframes instead of diagrams.
    • No connectors/arrows — The connection lines between shapes? Gone.
    • No gradients or shadows — Visual polish completely absent.
    • Broken text positioning — Text lands in the top-left corner instead of being centered in shapes. Colors are wrong. Multi-line text collapses.
    • Dark theme destruction — If you’re running a dark desktop theme, libvisio renders white text on white backgrounds. Diagrams designed for light backgrounds become unreadable.

    Side-by-Side Comparisons

    Let me show you what this actually looks like. Same Visio files, rendered by both engines.

    Network Architecture Diagram

    A typical network topology with shapes, connectors, and labels:

    Network diagram rendered by libvisio-ng
    libvisio-ng (Python) — fills, connectors, proper text
    Network diagram rendered by libvisio C++
    libvisio (C++) — no fills, no connectors, broken text

    The difference is stark. libvisio-ng renders the full diagram with colored shapes, directional arrows, and properly formatted text. libvisio gives you a skeleton — outlines with misplaced, barely-legible labels and zero connection lines.

    Comprehensive Feature Test

    A test file exercising gradients, shadows, transparency, dashed borders, thick outlines, and connectors:

    Comprehensive test rendered by libvisio-ng
    libvisio-ng — gradients, shadows, transparency, arrows ✓
    Comprehensive test rendered by libvisio C++
    libvisio (C++) — missing fills, no shadows, no arrows

    Mikrotik Network Equipment Stencil

    A hardware stencil diagram with embedded images and detailed port layouts:

    Mikrotik stencil rendered by libvisio-ng
    libvisio-ng — full stencil with embedded images
    Mikrotik stencil rendered by libvisio C++
    libvisio (C++)

    Feature Comparison

    Feature libvisio (C++) libvisio-ng (Python)
    Shape fills (solid)
    Gradient fills
    Theme/QuickStyle colors
    Drop shadows
    Transparency
    Connectors & arrows
    Text centering/alignment
    Embedded images ⚠️ Partial
    Background pages
    Layer visibility
    Master shape inheritance ⚠️ Basic ✅ Full
    StyleSheet cascade ⚠️ Partial
    Binary .vsd support
    Zero C++ dependencies
    pip install

    Architecture: How libvisio-ng Works

    libvisio-ng is a pure Python library with minimal dependencies (olefile for binary .vsd format). For .vsdx files (the modern XML-based format), it has zero external dependencies — it reads the ZIP archive directly and parses the XML with Python’s standard library.

    The rendering pipeline:

    1. Parse ZIP — Extract pages, masters, themes, media, stylesheets, and relationships
    2. Resolve inheritance — Walk the master shape → stylesheet → theme chain to resolve every visual property
    3. Generate SVG — Convert Visio’s coordinate system to SVG paths, applying transforms, fills, gradients, shadows, and text layout
    4. Export — Optionally rasterize to PNG/PDF via CairoSVG or rsvg-convert

    The key insight that makes libvisio-ng work where libvisio doesn’t: Visio’s theme system is not optional. Modern .vsdx files store almost nothing as explicit colors — everything references themes via THEMEVAL(), QuickStyleFillColor, and accent indices. If you don’t resolve those references, you get black wireframes. libvisio-ng fully resolves the theme chain.

    Quick Start

    pip install libvisio-ng
    
    # Convert to SVG
    from libvisio_ng import convert
    svg_files = convert("diagram.vsdx", output_dir="output/")
    
    # CLI
    visio2svg convert diagram.vsdx -o output/
    

    Status

    libvisio-ng is at version 0.1.0 — early but already handling complex real-world diagrams significantly better than libvisio. It powers the rendering in VSDView 0.4.6 and is available as a standalone library on GitHub.

    If you’ve been frustrated by libvisio’s output quality — or if you need to parse Visio files in Python without C++ dependencies — give it a try.

  • makeBread — Recepthanterare för brödbakningsmaskiner

    Nytt projekt! makeBread är en enkel och snygg recepthanterare för brödbakningsmaskiner, byggd med PySide6/Qt6.

    🍞 Vad kan den?

    • 103 inbyggda recept — allt från klassiskt vitt bröd till glutenfritt och surdeg
    • Sök och filtrera — fulltext med SQLite FTS5
    • Favoritmarkering ⭐ — markera dina bästa recept
    • Slumpa recept 🎲 — när du inte kan bestämma dig
    • Enhetsomvandling — växla mellan metriskt, US cups och Imperial
    • Skriv ut — snyggt formaterade utskrifter
    • Bildstöd — lägg till egna bilder på resultatet
    • Svenska och engelska — fullt översatt

    📦 Installation

    # Via pip/pipx
    pipx install makebread
    
    # Via apt (Debian/Ubuntu)
    sudo apt install makebread
    
    # Via dnf/yum (Fedora/RHEL)
    sudo dnf install makebread

    📸 Varför?

    Alla receptappar är antingen överdrivet komplexa eller fulla av reklam. makeBread gör en sak och gör det bra: hålla koll på dina brödrecept. Ingen molntjänst, inga konton, bara en lokal SQLite-databas med dina recept.

    Öppen källkod under GPL-3.0. Senaste versionen är v0.3.0 med favoritfunktion och fullständig svensk översättning.

    Källkod och releases: github.com/yeager/makebread

  • Debian- och RPM-repos för översättningsverktyg

    Mina paketförråd för översättningsverktyg.

    Debian/Ubuntu (APT)

    echo "deb [trusted=yes] https://yeager.github.io/debian-repo stable main" | sudo tee /etc/apt/sources.list.d/yeager.list
    sudo apt update

    Fedora/RHEL (DNF)

    sudo tee /etc/yum.repos.d/yeager.repo << EOF
    [yeager]
    name=Yeager Tools
    baseurl=https://yeager.github.io/rpm-repo
    enabled=1
    gpgcheck=0
    EOF

    Paket

    Paket Version Beskrivning
    l10n-lint 1.8.0 Granska .po/.ts-filer (22 regler, testsvit)
    tp-lint 1.7.0 Translation Project linting
    po-translate 1.3.4 Massöversätt med AI/gratis tjänster
    po-diff 1.0.0 Jämför PO-filer (11 språk)

    po-diff

    Jämför två versioner av en översättningsfil:

    po-diff gammal.po ny.po
    po-diff -f html -o diff.html gammal.po ny.po

    Länkar

  • Kodi Subtitle Translator v0.8.0 – nu med stöd för externa undertexter

    Jag har släppt version 0.8.0 av Kodi Subtitle Translator med en efterfrågad funktion: stöd för externa undertextfiler!

    Nytt i v0.8.0

    • Externa undertexter – Översätt .srt, .ass, .ssa och .vtt-filer som ligger bredvid din mediefil
    • Välj källa – Dialog för att välja mellan inbäddade undertexter, externa filer eller bläddra till egen fil
    • Smartare detektering – Hittar automatiskt undertextfiler med samma namn som videon

    Så fungerar det

    När du spelar upp en film eller serie i Kodi:

    1. Tillägget detekterar om det saknas undertexter på ditt språk
    2. Du får välja källa: inbäddade, externa eller bläddra
    3. Undertexterna översätts automatiskt via din valda tjänst
    4. Resultatet cachas så du slipper vänta nästa gång

    Översättningstjänster

    Gratis (ingen API-nyckel)

    • LibreTranslate – Öppen källkod, kan självhostas
    • MyMemory – 1000 ord/dag gratis
    • Lingva Translate – Google Translate utan spårning

    Betalda (bättre kvalitet)

    • DeepL – Bäst kvalitet för europeiska språk
    • DeepL Free – 500k tecken/månad gratis
    • Google Cloud Translation
    • Microsoft Translator

    25 språk

    Tillägget stöder översättning till och från 25 språk inklusive svenska, norska, danska, finska, tyska, franska, spanska, italienska, portugisiska, polska, nederländska, ryska, japanska, kinesiska och koreanska.

    Funktioner

    • Automatisk detektering – Upptäcker saknade undertexter
    • Smart caching – Översättningar sparas lokalt
    • Flera format – SRT, ASS/SSA, WebVTT
    • Bevarad formatering – Timing och styling behålls
    • FFmpeg-integration – Extraherar inbäddade undertexter

    Installation

    1. Ladda ner ZIP från GitHub Releases
    2. I Kodi: Inställningar → Tillägg → Installera från ZIP-fil
    3. Konfigurera språk och översättningstjänst i tilläggsinställningarna

    Källkod

    Gratis och öppen källkod (GPL-3.0):

    🔗 github.com/yeager/kodi-subtitle-translator

    Feedback, buggrapporter och pull requests är välkomna!

  • Översättning av Boxee

    Jag har nu börjat att översätta mediaspelaren Boxee.

    Boxee är en funktionsrik mediaspelare baserad på öppen källkod (XBMC) och kan köras på datorer och dedicerade hårdvaruplattformar (D-Link Boxee Box, Iomega TV with Boxee samt upplåsta Apple TV). Det stora utbudet av anpassade program gör också detta till en intressant mediaspelare.

    (mer …)