Hoppa till innehållet
Daniel Markus, Software Engineer

26 år i yrketEgenföretagare

Daniel Markus

Software Engineer

  • Kvadrat Tech Stockholm

Daniel är mjukvaruingenjör med över 27 års erfarenhet med fokus på C++. Han fokus på icke-funktionella krav och tydlig kommunikation mellan projektets intressenter.

Han har huvudsakligen arbetat med C++ inom styr- och reglerteknik samt databaser, med särskilt intresse för backendarkitektur, Domain-Driven Design, Pipes and Filters och parallellisering. Han har även erfarenhet från embedded-miljöer: kommunikationsprotokoll, realtidsprogrammering, minnesbegränsningar, intrinsics och felhantering.

Daniel är nyfiken, kundfokuserad och nyttjar en bred teknisk grund för att strukturera nya utmaningar. Han bidrar gärna med visualisering, presentation och mentorskap för att sprida kunskap i teamet.

Visa mer
  • C++
  • Parallelisering
  • Python
  • Linux
  • IRIX
  • MySQL
  • Filformat
  • Confluence
  • JIRA
  • Yocto
  • Felhantering
  • Kommunikationsprotokoll
  • TDD
  • BDD (Behavior Driven Development)
  • Pipes and Filters
  • Remote Debugging

Kurser & certifieringar

  • Documenting Software ArchitecturesSoftware Engineering Institute · 2017
  • Situational LeadershipGBS Corporate Training · 2016
  • GROW CoachingGBS Corporate Training · 2016
  • Software Architecture: Principles and PracticesSoftware Engineering Institute · 2012

Uppdrag

  • OHB Sweden

    nov. 2022 – juni 2025

    Software Engineer Stockholm

    OHB Sweden utvecklar avancerade rymdsystem där extrem tillförlitlighet och verifierbarhet är avgörande för att system ska fungera i kritiska miljöer över lång tid.

    Teamet utvecklade mjukvara för flera rymdapplikationer i en nära realtidsmiljö, där utmaningen var att säkerställa icke‑funktionella krav – särskilt reliability, testability och functional completeness.

    C++17 och Python användes för utveckling. Utvecklingen skedde i Visual Studio och all kod plockades från Git och körs på Jenkins. Enhetstesterna körs i gtest.
    Fokus är för tillfället icke-funktionella krav, primärt Reliability, Testability, och Functional Completeness.
    Reliability är främst felhantering, och Testability är systemtester där Daniel strukturerat testerna för att så effektivt som möjligt verifiera felhanteringen men även funktionella krav för att uppnå Functional Completeness.
    Refaktorisering och testning av kommunikationsprotokoll.
    Under kravhanteringsarbetet använder Daniel Doors för att se vilka tester som behövs skrivas.

    Visa mer
    • Linux
    • Agile
    • Kravhantering
    • Jenkins
    • Git
    • TDD
    • Unit testing
    • Integration testing
    • Visual Studio
    • Real time programming
    • Doors
    • Felhantering
    • Kommunikationsprotokoll
    • Python
    • C++17
    • C++
    • gtest/gmock
    • BDD (Behavior Driven Development)
    • Multithreading & Concurrency
  • MSAB

    aug. 2018 – juli 2022

    Software Engineer Stockholm

    MSAB utvecklar programvara för digital forensik där stora datamängder från källor ska extraheras, tolkas och struktureras med hög tillförlitlighet.

    Teamet utvecklade backend‑funktionalitet för dataextraktion, där utmaningen låg i att hantera komplex modularkitektur, versionsberoenden och bakåtkompatibilitet samtidigt som nya funktioner kontinuerligt introducerades i ett C++‑baserat system.

    Daniel implementerar flödesdiagram, med och utan state machine i en Pipes and Filters-design som möjliggör parallellisering genom multitrådning. Detta för att kunna stödja olika versioner av filformatet och utnyttja hårdvaran effektivt.

    Utvecklingen sker i C++17 i Visual Studio och all kod versionshanteras i Perforce och Git.
    Exempelprogram skrevs för att visualisera tekniken och dess för- och nackdelar samt historik.
    Utmaningar inom bakåtkompatibilitet och versionshantering analyserades, där ett antal olika modulimplementationer behöver stödjas och lösas med designmönster för kombinatorik. Fördelen med detta ger att generella verktyg kan byggas upp mot modulerna. Det ger också möjlighet att göra Low-level optimization med Intrinsics för de plattformar som har stöd för det.
    MSAB använde sig av proprietär kod som behöver sin egen miljö och körs i Docker.
    En dokumentationsstruktur presenterades för att underlätta tillägg av ny dokumentation i Confluence.
    Daniel höll presentationer om nya C++-funktioner och diskuterar var i produkten de kan användas.

    Visa mer
    • Agile
    • Git
    • Perforce
    • TDD
    • Unit testing
    • Docker
    • Visual Studio
    • Felhantering
    • Filformat
    • Parallelisering
    • C++17
    • Confluence
    • State Machines
    • C++
    • Intrinsics
    • gtest/gmock
    • BDD (Behavior Driven Development)
    • Low-level optimization
    • Pipes and Filters
    • Multithreading & Concurrency
  • Leica Geosystems

    mars 2011 – aug. 2018

    Technical Lead Stockholm

    Agil transformation - Den stora utmaningen som Technical Lead var att kombinera vattenfall och agil utveckling, samtidigt som Leica var tvungna att dedikera tid för teknisk skuld.
    Tillsammans med produktledning diskuterades hur korskompileringen av produktens operativsystem kunde stabiliseras.
    Denna diskussion ledde senare till en dokumenterad förbättringsanalys och migration till byggsystemet Yocto.
    Ett tydligt vattenfallsprojekt blev en utmaning som antogs för att lägga till funktionalitet för att skydda naturreservat. Här blev det av största vikt att hitta balansen mellan agil utveckling och vattenfall för att hinna klart innan kundens projekt startade.

    Andra ansvarsområden
    Unga personer anställdes och integrerades med mycket parprogrammering, egna miniprojekt, och gemensamma kodnings-sessioner där man gick igenom olika programmeringstekniker.
    Ett försök att introducera Domain-Driven Design gjordes tillsammans med produktledningen. Ett Python-script togs fram för att hitta de definierade domänerna i C++-koden och visualisera deras beroenden.
    Tillsammans med utvecklare och produktledning jobbades en metod fram i Jira för att förtydliga produktkraven samtidigt som en bättre kontroll över teknisk skuld och mjukvaruunderhållet uppnåddes.
    Tillsammans med Leicas duktiga UX-expert och domän-expert jobbade Leica fram ett antal personas till deras produkt och en user journey togs fram för att förenkla kommunikationen mellan produktledning och utvecklingsteamet.
    I samarbete med test-teamet förbättrades rapporteringen i Jira för att samtliga intressenter lättare skulle kunna följa upp ärenden.
    Systemet var i behov av en översikt av mjukvaruarkitekturen och tillsammans med personalansvarige startades en arkitekturgrupp som utbildade sig hos SEI.

    Visa mer
    • Agile
    • Pair programming
    • UX
    • JIRA
    • Waterfall
    • WBS
    • Confluence
    • Domain-Driven Design
  • Leica Geosystems

    mars 2011 – aug. 2018

    Technical Lead & Software Engineer Stockholm

    Leica Geosystems utvecklar avancerade system för mätning, positionering och byggautomation där mjukvara, hårdvara och användarupplevelse måste samverka effektivt.

    Teamet utvecklar maskinstyrningssystem som visualiserar byggritningar, referenspunkter, och utfört arbete. För vissa maskintyper styrs även hydrauliken vilket ger semi-automatisk styrning. Teamet lade till funktionalitet till systemet för grävmaskin, schaktmaskin, väghyvel, och hjullastare.

    Daniel jobbade som både Technical Lead (se roll nedanför) och software engineer.

    All utveckling sker i C++11 i Linux. Verktyg såsom GDB, Valgrind, Git, SVN, QMake, Scons, Bash, gtest, TeamCity, Confluence, och Jira användes.
    Då många beräkningar görs, och olika hårdvara arbetar samtidigt, så designades systemet för multitrådning och parallellisering.
    Systemets kinematik behövs skrivas om från början då nya krav tillkommit. Detta löses med Affin Transformation och annan matematik från robotindustrin.
    Japansk text behövs i GUI:t för den japanska marknaden men det är svårt då vårt grafiska ramverk ännu inte har stöd för Unicode, men det gick att få in katakana.

    Uppkoppling till mobilt bredband - För att överföra data, uppgraderingar, och kraschdumpar till och från kundens system så utvecklades en koppling via mobilt bredband.
    Implementerat med ett USB-modem som styrs med en state machine.
    Denna uppkoppling kan även användas för Remote Debugging med GDB Server, och för att debugga själva uppkopplingen körs Remote Debugging via RS-232.

    Testutveckling - Daniel jobbade mycket med att förbättra felhanteringen och underlätta felsökning vid en eventuell systemkrasch.
    Då krasch hos kund lättast felsöks med kraschdumpar så implementeras Google Breakpad i produkten och stöd i byggsystemet för att få fram rätt symboler till kraschdumparna.
    Daniel jobbade hårt på att automatiskt få upp kraschstatistik i Socorro, och bidrog även till open source-projektet Yocto för underlätta kopplingen.

    Utveckling av ny hårdvara
    Tillsammans med utvecklare, produktledning, och test-team arbetades en kravspecifikation fram som sedan presenterades och diskuterades med vår hårdvarudesigner.
    Testning av hårdvaruprototyper skedde i koordination med test-teamet och ett antal dedikerade betatestare.

    Som technical lead - se nedan beskrivning.

    Visa mer
    • Embedded Systems
    • Linux
    • Agile
    • Valgrind
    • Eclipse
    • Git
    • TeamCity
    • Pair programming
    • Bash
    • TDD
    • Unit testing
    • GDB
    • SCons
    • Mobile Broadband
    • Linux - Shell Scripting
    • RS-232
    • SVN
    • JIRA
    • WBS
    • C++11
    • Yocto
    • QMake
    • Linux korskompilering
    • C++
    • Pyhon
    • Kinematics
    • GDB server
    • Linux From Scratch
    • gtest/gmock
    • Google Breakpad
    • Remote Debugging
    • Socorro
    • Affine Transformation
    • Crash Reporting
    • Multithreading & Concurrency
  • Karolinska Institutet

    juni 2003 – juli 2010

    Software Engineer Stockholm

    Karolinska Institutet forskar inom bedriver avancerad forskning inom cell och molekylärbiologi där analys av stora genetiska dataset är centralt för att förstå sjukdomsmekanismer.

    Teamet arbetade med analys av genuttryck kopplat till kliniska data, där utmaningen var att integrera databaser med analysverktyg och hantera kontinuerligt föränderliga datamodeller samt beräkningstunga analyser.

    Visualisera korrelationen mellan patientgrupp och genuttryck
    Allt utvecklas i Java SE och versionshanteras i SVN.
    För att visualisera korrelationen mellan patientgrupp och genuttryck skapades en koppling mellan MySQL och Agilent GeneSpring.
    Kopplingen hade ett eget GUI så att dataset enkelt kunde väljas för visualisering. Under uppdraget kom krav på nya databasparametrar som skulle läggas till i befintliga databaser.
    Vissa parametertyper fanns det redan stöd medan andra krävde programmering för att läggas till. I en befintlig databaskoppling behövdes nya parametrar läggas till programmeringsmässigt.
    Krav på nya parametrar kom kontinuerligt och databaskopplingen refaktoriserades till WYSIWYG-GUI så att de nya parametrarna lätt kunde läggas till.

    Parallellisera tunga beräkningar
    Det behövdes även hjälp att parallellisera vissa tunga beräkningar i en tid då korskompilering mellan 32 bitar och 64 bitar var vanligt.
    Genanalys med programmet PLINK utfördes av forskare men kunde parallelliseras med MPI för att utföra analyserna fortare.
    Kopplingen till MPI programmeras i C++.

    Visa mer
    • MySQL
    • Eclipse
    • SQL
    • MPI
    • SVN
    • Java SE
    • Parallelisering
    • C++
    • Agilent GeneSpring
    • PLINK
  • The Electronic Farm

    juni 1999 – dec. 2002

    Software Engineer Spain

    The Electronic Farm utvecklar produkter för TV och filmindustrin. Video- och filmredigeringsmjukvara för efterbearbetning och broadcast. Produkten fokuserade på videoredigering och maskinrumsförenklingar.

    All utveckling sker i C++ i Irix, och versionshanteras i CVS. GUI:t skrivs i Tcl/Tk.
    De verktyg som används är MIPSpro kompilatorsvit, GDB och Make.

    Ett interface mot disk skapas för att kunna skriva olika typer av filer. Ett internt filformat skapades som kan skriva tillräckligt fort på mekaniska diskar.
    Daniels stora fokus är att skriva ett interface för Silicon Graphics videokort där utmaningen är att anpassa minnets ringbuffer, synkronisera videobilderna mot systemklockan, samt att erbjuda stöd för olika videokort med olika egenskaper som t.ex. komprimering. Detta sker med multitrådning för att klara av realtidskraven för de olika hårdvarorna.
    Ett interface implementerades till RS-422 Sony 9-pin protocol för att styra videobandspelare såsom Digibeta.
    Till våra mässor på IBC och NAB behövdes ett antal produktstationer planeras och skapas med separat maskinrum och möjlighet att dela utrustning mellan olika visningar.

    Visa mer
    • Tcl/Tk
    • CVS
    • Make
    • Real time programming
    • GDB
    • IRIX
    • Kommunikationsprotokoll
    • Memory Management
    • Filformat
    • C++
    • RS-422
    • Tcl script
    • Video/audio-strömning
    • Sony 9-pin Protocol
    • Multithreading & Concurrency

Utbildning

  • M.Sc. Datateknik

    1995 – 2012

    KTH

Kompetens · nivå och år

Tekniker

  • C++
  • Parallelisering
  • Python
  • Real time programming
  • Linux korskompilering
  • Microservices
  • UX
  • Java SE
  • MPI
  • Tcl/Tk

Plattformar

  • Linux
  • IRIX
  • MySQL

Produkter

  • Filformat

Verktyg

  • Confluence
  • JIRA
  • Yocto

Metoder och processer

  • Felhantering
  • Kommunikationsprotokoll
  • TDD
  • Domain-Driven Design
  • Kravhantering
  • WBS

Övrigt

  • BDD (Behavior Driven Development)
  • Pipes and Filters
  • Remote Debugging
  • Sony 9-pin Protocol
  • State Machines
  • Affine Transformation
  • Agilent GeneSpring
  • Google Breakpad
  • Intrinsics
  • Kinematik
  • Mobil modemuppkoppling
  • PLINK
  • Socorro
  • Video/audio-strömning

Den som känner Daniel

Theodor Wahlgren

Theodor är Daniels kontaktperson på Kvadrat.