26 år i yrket · Egenfö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 merVisa mindre
- C++
- Parallelisering
- Python
- Linux
- IRIX
- MySQL
- Filformat
- Confluence
- JIRA
- Yocto
- Felhantering
- Kommunikationsprotokoll
- TDD
- BDD (Behavior Driven Development)
- Pipes and Filters
- Remote Debugging
- C++
- Parallelisering
- Python
- Linux
- IRIX
- MySQL
- Filformat
- Confluence
- JIRA
- Yocto
- Felhantering
- Kommunikationsprotokoll
- TDD
- BDD (Behavior Driven Development)
- Pipes and Filters
- Remote Debugging
- 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 merVisa mindre
- 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 merVisa mindre
- 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 merVisa mindre
- 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 merVisa mindre
- 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 merVisa mindre
- 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 merVisa mindre
- 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
Liknande profiler
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.