KONSULTPROFIL Marco Fullstackutvecklare Sammanfattning Marco har 15 års erfarenhet av IT utveckling inom både Backend och Frontend. Marco är en bred utvecklare med avancerade kunskaper i språk som C/C++/ C#/Matlab och Java. Marco har även utvecklat ett eget SDK och behärskar plattformar som Windows, Linux, OSX, Windows RT, Android och iOS. Marco är som person lättlärd, innovativ och vetgirig som trivs med att jobba både i team och självständigt. Marco är social med båda fötterna på jorden och kommer snabbt in i sociala sammanhang. Marco startade sin karriär på Dice som senior render utvecklare/Grafik utvecklare med ansvar för 2D/3D special effekter i spel som exempelvis Battlefield 1942, Battlefield 2, Battlefield Bad Company, Rallisport Challenge 1 och 2. Under denna tid utvecklades Marco's intresse för programmering mot grafikprocessorn som ledd till starten av Marco's egna bolag GPU Systems. Bolaget skapade ett unikt utvecklingsverktyg - Libra SDK för programmering av grafikkort för effektivare beräkningar och uppmärksammades mycket i media. Marco har även arbetat som pedagog, skapat kurser och föreläst om Java för flertalet företagskunder, Marco har själv föreläst. Marco har dubbel examen från KTH och University of Wollongong. Uppdragshistorik 2008 – 2015 GPU Systems API Services (Produktutvecklare) Företaget arbetade med att förenkla programutveckling, tillgängliggöra GPU processorer och dess kraft genom befintliga utvecklingsverktyg som redan används för CPU processorer – detta uppnåddes genom att utveckla ett gemensamt gränssnitt och teknologi att driva både processorer och grafikkort. GPU Systems lanserade utvecklingsverktyget Libra SDK för att möjliggöra avlastning av beräkningar till grafikprocessorn mer effektivt än vad som tidigare kunnat göras. Libra API möjliggör mjukvaruutveckling både mot CPUer och GPUer oberoende av underliggande processortyp/arkitektur. Resultatet är mer nyttjande av processorkraft samt mer ihopkopplingsbara system till mjukvarulösningar, från spel till superdatorer. Tiden på GPU Systems fördelade Marco i tre större projekt: GPU Computing (Big Data processing) Heterogeneous Computing Realtime Cloud Computing IoT. Projekt GPU Computing, Big Data processing Inriktar sig på att accelerera mjukvaruutveckling, stora datamängder och mjukvara med hjälp av GPU processor/er. Att nyttja en processor eller flera via standard utvecklingsverktyg/gränssnitt. Projekt Heterogeneous Computing, Big Data processing. Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected] Inriktar sig på att accelerera mjukvaruutveckling, stora datamängder och mjukvara med både CPU och GPU processorer. Tekniken finns tillgänglig på alla de vanligaste plattformar PC/Server Windows, Mac, Linux Mobile/Tablet iOS, Android och Winrt. Projekt Realtime Cloud Computing, IoT Ny teknik att tillgå CPU och GPU processorer transparent för mjukvaruutveckling och mjukvara oberoende av teknisk miljö, cross-plattform samt kunna exekvera program på och mellan många olika typer av enheter och om önskas även sammankopplade. På mobiltelefoner och surfplattor till exempel iOS och Android kan ”GPU computing - Big Data” användas till att massivt förbättra app-prestanda, kapacitet och användarupplevelse. Tekniken finns tillgänglig på alla de vanligaste plattformarna. Utformade Java bindningar för Libra API att bygga Android appar. PC/Server Windows, Mac, Linux Mobile/Tablet iOS, Android och Winrt. Programmeringsspråk: C/C++, Libra, C#, Java, Matlab, CUDA, OpenCL, DirectX, OpenGL/ES Utvecklingsmiljöer : Microsoft Visual Studio IDE, Java Eclipse IDE Bibliotek : Libra, Java SE Development Kit (JDK) OS: Windows, Mac, Linux, iOS, Android och Winrt. Min Roll: Mjukvaruutvecklare/Arkitekt samt Team lead Media: http://computersweden.idg.se/2.2683/1.326431/marco-hjalper-amd-utveckla-superdatorer http://computersweden.idg.se/2.2683/1.191637/tunga-berakningar-med-grafikkraft http://computersweden.idg.se/2.2683/1.233133/99-procent-billigare ________________________________________________________________________ 2008-02 – 2008-10 Setred AB (Mjukvaruutvecklare) Företaget arbetade med att ta fram en ny typ av 3D monitor. En auto-stereoskopisk skärm (där glasögonen sitter fast på skärmen istället för på näsan), med fria rörelsezoner för betraktaren samt utrymme för multipla betraktare. Marco konstruerade en mjukvaruvideospelare som kunde spela upp .avi filer innehållandes stereodata (2 kameror att representera vänster och höger öga). Videospelaren i sin tur konsumerar ett beräkningslib för realtidsberäkning av stereobilderna för att generera djupinformation i realtid om själva objekten i varje bild från videoströmmen. Libbet använde sig av GPU computing med Libra API för GPU acceleration av ursprunglig algoritm som skrevs i C. Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected] Libra GPU koden kunde skrivas direkt i C++. Detta resulterade i ökad effektivitet i både mjukvaruutveckling processen samt bilduppdateringen som kunde minskas från tidigare 1000 ms per bild till 30 ms per bild. Programmeringsspråk: C/C++, Cuda, Libra, Utvecklingsmiljöer: Microsoft Visual Studio, OS: Windows Min Roll: Mjukvaruutvecklare ________________________________________________________________________ 2000 – 2007 Digital Illusions CE (Senior renderings utvecklare) Dice, Digital Illusions CE, en av Sveriges mest framstående tvspels/datorsspelstillverkare och studios som ägs idag av Electronic Arts. Marco arbetade som Senior renderings utvecklare i Core tech engine teamet som konstruerade och implementerade flertalet tvspel och PC motorer för dataspel. En spelmotor utgörs av flertalet realtidsbaserade grafik och fysiksystem m.m. Dice egna inhouse utvecklade motor kallas idag för Frostbite(tm). Teamet bestod av utvecklare, grafiker samt projektledning. Sammanställning, rapportering gjordes till utvecklingschef samt projektledning. Under sin tid på DICE ingick Marco i ett team för att serva många olika avdelningar inom DICE produktion. Teamet bestod av 20-25 personer med uppgift att utveckla tv/dataspelsmotorteknik för att stötta alla DICE studios produkter och speltitlar inom EA organisation. ________________________________________________________________________ 2005 – 2006 Avdelning: Battlefield Bad Company TnT group Marco utvecklade ett komplett system för specialeffekter till Frostbite spelmotor. Systemet hade en fysikdel (beräkningsdel) samt en render (grafikdel). Systemet kallas för Emittersystem och är en större komponent inom motorn kapabel att behandla många olika typer av partiklar/objekt för utformning av specialeffekter med en enad rendering pipeline för effektivt flöde av data. Systemet designades av Marco i samarbete med grafiker och programmerades av Marco att integrerades in i motorn och produktion. Systemet kopplades ihop med editeringsvertyg samt produktionsverktyg i motorn. (buildsystem, preprocess pipeline). Emittersystemet används än idag i produktion för EA Dice titlar och har ingått i ett flertal speltitlar, alltifrån Battlefield Bad Company fram till senare titlar som Star Wars. Emittersystemet använder både CPU och GPU kraft för att processa och uppdatera systemet. Programmeringsspråk: C/C++, DirectX, xbox assembly Utvecklingsmiljöer: Microsoft Visual Studio IDE Versionshantering: Perforce, SCons OS: PC and Xbox Min Roll: 2D/3D render programmerare Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected] ________________________________________________________________________ 2002 - 2004 Avdelning: Rallisport Challenge 2 Ett team om 30-35 arbetade agilt och hade veckomöten där var vi avrapporterade arbetet mot projektansvariga. Teamet hade som uppgift att skapa en ny 3D motor från grunden och en uppföljare till föregående Rallisport titel, Rallisport Challenge 2. Marco's roll som renderings programmerare var att uppdatera, samt skapa nya APIer och samtidigt förbättra de befintliga rendersystem från föregående spelmotor. Rendersystemen användes sedan av grafiker, designer och leveldesign ansvariga för att bygga spelet. Marco’s ansvarsområden i detta spelteam omfattade ca 20 motorsystem. Ansvaret i detta innefattade: design, utveckling, implementering, underhåll samt leverans mot beställare. Översikt av Marcos ansvarsområden: Projekt Particle system EmitterSystem och partiklar. Kamera orienterade “sprite” partiklar med rörelse och “shading”. Projekt Wheel skid system Avancerad pixelsortering med “stencilbuffern”, per-pixel “bumpmapping”, ljussättning samt självskugging effekter. Projekt Snow and Rain system. Tusentals med partiklar placerade runt omkring en spelkamera kombinerat med 2D grafikeffekter representerandes vind, blåst, dimma m.m Projekt Water droplets system Persistenta partiklar representerandes vattendropppar för vindrutor samt kameralins. Vindrutetorkning av droppar med hjälp av per-pixel stencilbuffer teknik. Project Billboard system. Ett kulisssystem med enkla preprocessing inställningar gällande upplösning och ljussättning. Förrenderade kulisser utifrån 3D modeller för träd utifrån flertalet kameravinklar, variabel upplösning beroende på minnesåtgång och typ av spelbana. Projekt Sky and Cloud system Himmel box rendering med inställingsbara molnlager kombinerat gentemot en bakgrundsgradient för himmelsfärg. Projekt Tree/billboard lighting system. Multipla ljuskällor och självskuggning. Projekt Tree/billboard sway system. Systemet utför en per-pixel alpha-blend mellan träd objekt och kuliss polygoner att noggrant matcha “boundingboxar” och kuliss rektanglar för en icke-märkbar (LOD) övergång. Projekt Lens flare system Rallybil solblänkeffekter med tonemapping och occlusion. Användes för gatulampor likväl. Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected] Projekt Undergrowth system foundation Ställa upp kamera orienterade längor av “sprites” (polygon rectanglar), med svaj matris för enklare vindrörelser. Projekt Sidescreen system. Ett enkelt system att rendera många upplysta/dimmade kulisser effektivt. Målet är att uppnå ytterst få render anrop och ändringar av mjukvaru/hårdvaru inställningar på grafikkort. Projekt Animation system Gpu skelett transformationer och ett åskådarsystem för slumpmässig färgläggning av klädesplagg och publikbeteenden. Projekt Client/Server foundation Editor tools of Rallisport Challenge 2 Editorverktyg med “tool rendering” redskap. Projekt Minimap system Olika enklare renderings verktyg för att rendera spelet i väldigt hög upplösning för bättre bilder för tidsskrifter, röntgensyn verktyg, “overdraw/fillrate” debugging verktyg att identifiera eventuella ihopsättningar av pixelbelastningar för olika spelsituationer. Programmeringsspråk: C/C++, DirectX, xbox assembly Utvecklingsmiljöer: Microsoft Visual Studio IDE Versionshantering: Perforce OS: PC and Xbox Roll: 2D/3D render programmerare ______________________________________________________________________ 2002 Avdelning: Battlefield 1942, Rallisport Challenge 1 PC På denna avdelning arbetade 60-100 personer, några I teamet jobbade med Rallisport PC shaders, att “porta” Rallisport Xbox till PC och resten av teamet var fokuserade på spelet Battlefield. Vi arbetade agilt och hade veckomöten och rapporterade till projektledare och programmeringschefer. Följande projekt var Marcos ansvarsområden: Projekt Terrain system optimizing Förbättrad använding av dynamiska vertexbuffers att sända terräng data bättre i realtid till grafikortet samt att förhindra “stalls”. Projekt RLE compressed bit-lightmap system for Battlefield terrain Ljuskartorna användes som parametrar/information till objekt i rörelse närmandes/avlägsnandes skuggzoner inom spelkartan/spelvärlden. Projekt Water system Foundation render system for BF 1942. Animerade per-vertex nornalvektorer samt per-pixel ljussättning shaders skrivna i HLSL. 2 lager godtyckliga texturer i inställingsbar rörelse för grafiker kreativitet. Projekt Optimizing / rewriting shaders Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected] Shaders från RSC systemen som behöver skrivas om för att fungera korrekt på PC version av spelet. Programmeringsspråk: C/C++, DirectX, xbox assembly Utvecklingsmiljöer: Microsoft Visual Studio IDE Versionshantering: Perforce OS: PC Min Roll: 2D/3D render programmerare ________________________________________________________________________ 2000 – 2002 Avdelning Rallisport Challenge 1 Marco's teams uppgift var att skapa en tvspelsmotor teknologi och utvecklingsmiljö anpassat för ett rallyspel från Microsoft som heter Rallisport Challenge. Spelet var tillsammans med Halo en av launch titlarna till Microsofts nya spelkonsoll som döptes tilll Xbox. Teamet var 25 personer och bestod av producenter, designers och utvecklare. Marcos roll som rendering utvecklare var att utveckla rendering system och API’er till spelmotorn som sedan användes för själva skapandet av spelet. Följande projekt var Marco's ansvarsområden. Projekt Renderer API Användes i Battlefield 1942 och Rallisport Challenge. APIet syfte var att bistå som gränssnitt till renderingskod samt att abstrahera bort beroenden i motorn gentemot specifika tillverkar APIer som DirectX och OpenGL el. liknande. APIet kunde matas från diverse system i motorn för att sända polygoner, render data samt att sätta texturer, inställningar/tillstånd till grafikkort. Projekt Track/Terrain rendering. Polygon rutnät med per-pixel ljussättning shaders skriva i HLSL. Per-vertex reflektioner med hjälp av “cubemap” med färdiginkodad vektor data om solen i kombination med uträknad halv vektor samt normal vektor. Projekt Water system. Animerad per-vertex normal vektor processing med per-pixel ljussättning shaders skrivna i HLSL. Projekt Particle System Användes i Battlefield 1942 och Rallisport Challenge. CPU och GPU belastning. Projekt Lensflare system. 2D/3D transformationer “spritar längs med en påle”. Ett system att visa på kamera/solartifakter. Projekt Wheel skidmark system Polygonala spår skapade utefter fordon, objekt i rörelse. Render systemet utövade dynamiska vertexkällor att optimera rörelse av polygon och data till grafikchip. Projekt Animation system Animationssystem för att utföra transformationer/viktning(ben påverkan) gällande skelettuppdatring. Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected] Projekt Billboard render system Starta ett enklare system genom att rita många enkla polygoner snabbt. Projekt Snow and rain system. Många partiklar I rörelse inom en elliptisk sfär fastsatt runt spelkameran. System tog hänsyn till spelvärlden att inte snöa/regna t.ex under broar tak. Programmeringsspråk: C/C++, DirectX, xbox assembly Utvecklingsmiljöer: Microsoft Visual Studio IDE Versionshantering: Perforce OS: PC and Xbox Min Roll: 2D/3D render programmerare ________________________________________________________________________ 1999 PowerPlay Systems, IT-jobb Java, St Leonards Sydney. Marco's uppgift på PowerPlay Systems var att konstruera en Java-kurs för de anställda från olika företag i närområdet. Kursens syfte var att introducera Java och JDK plattformen att skapa intresse för Java och förståelse för hur man snabbt och enkelt med hjälp av Java kan tillverka mjukvara att lösa små enkla och vardagliga problem inom IT samt bygga frontends med Java Swing och AWT. Kursen bestod av föreläsningar samt programmeringsuppgifter att närmare bekanta sig med Java miljön och programmeringsspråket. Marco konstruerade vidare en IT lösning för PowerPlay Systems där ett hardcopy formulärsystem digitaliserades. Formuläret gjordes med Java som en Frontend applikation som beroende på innehåll pratade med en Backend sida byggt med Java servlets + Apache Web Server + Databas uppkoppling för lagring/hämtningar av uppgifter. Programmeringsspråk: Java Utvecklingsmiljöer: Kawa JDE Java Bibliotek: Java JDK 1.1, Java AWT, Java Swing, Java Applets, Java Servlets Versionshantering: ingen OS: Cross-plattform Min Roll: Pedagog och Utvecklare Kompetenser, tekniker & metoder Kompetensnivå 5 § § § § Software Engineering/Programming – 15+ års erfarenhet av mjukvaruutveckling. Främst realtidssystem i C/C++. Render Systems – 7 år+ erfarenhet av utveckling av render system till tvspelsdatapelsmotorer på EA Dice och AAA speltitlar att levereras mot miljontals användare. GPU Computing – jobbat med att utveckla och ta fram gpu computing teknologier att främja industrin. Cloud Computing – jobbat med att utveckla och ta fram cloud computing teknologier. Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected] § § § § § § § § § § § § § § § System Architecture – designat och byggt 50+ render mjukvarusystem. Distributed Systems – lång erfarenhet och förståelse kring distribuerade beräkningar. High Performance Computing – jobbat med att ta fram teknologier som tjänster inom området HPC för effektivisering av branschen. C/C++ - jobbat med C/C++ i över 15+ år och är det språk som jag behärskar bäst. Java - arbetat 7 år med Java och gjort bland annat Android appar och webblösningar. Lärar- assistent på KTH med Java kurs, föreläst om Java för tre företag under studietiden och skapat kurser. C# - Har jobbat med C#, speciellt med appar/demoprogram som behövts göras samt bygga gränssnitt och språkbindingar. Libra API – Har skrivit många demos och libra appar samt utfört uppdrag för kund. DirectX/OpenGL/ES - jobbat ofta med DirectX och OpenGL för att kommunicera med GPUer. CUDA/OpenCL – Har jobbat mycket med CUDA och OpenCL under tillverkning av GPU Systems tjänster och produkter. Objective-C arbetat med iOS plattformen och byggt demos / appar och använder mig då av Objective-C i kombination med C/C++. Matlab utvecklat ett helt matlab gränssnitt och biblioteks bindningar att arbeta mot native teknologier. Gjort kunduppdrag med matlab som utvecklingsmiljö med portning av befintligt matlab script till libra matlab för acceleration av GPU beräkningar. 7 års erfarenhet. Windows, Mac, Linux, iOS, Android – Har jobbat och byggt kod för alla de vanligaste operativsystemen samt att stödja även olika varianter av både windows som linux/unix. Testdriven utveckling/debugging: definiera testkod som implicit driver implementation/utveckling. Jobbar alltid med ”asserts” i C/C++ ihop med debuggern som ”skriker till” för att säkerställa den iterativa processen. I java kan jag t.ex. använda mig av Junit. Software Teams – 10+ år erfarenhet att jobba i software teams, bygga, konstruera och leverera mjukvarusystem som färdiga produkter mot marknaden. Video games – Har jobbat 7 år med dataspelmotor tillverkning och medverkat i att ta fram ny teknologi till titlar som Battlefield, Battlefield 2, Battlefield Bad Company, Rallisport Challenge 1 och 2. Kompetensnivå 4 § § § § § Mobile Technology – Har tagit fram GPU computing samt Cloud Computing tjänster att sammankoppla och tillgå PC, mobiltelefoner samt surfplattor med mer prestanda och användarupplevelse. Image Processing – Har god förståelse om image processing, jobbat med image transforms, sobel filter, fft:er och allmänt intresserad av signalbehandling, beräkningar som omfattar både grafik som ljud. Machine Learning – har studerat på högskoletiden machine learning i form av neurala nätverk, bildigenkänning för t.ex. självstyrande fordon. Architecture – Under utvecklingprocess behövs, skapas en bild av de hårdvaruarkitekturer man utvecklar för. t.ex, PC, xbox, PS4, CPU, GPU, som ligger till grund för en kontinuerlig diskussion kring utformande av en mjukvaruarkitektur – och är en nödvändighet för skapande av skalbara och effektiva mjukvaru/hårdvarusystem. Open Source – känner till Open Source och använder om lämpligt/möjligt. Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected] § § § § § § § § § § § § § § § § § § § PaaS, IaaS – har jobbat med PaaS, IaaS att tillgå produkter/teknologier på ett enkelt och tillgängligt sätt och för många användare. Android – programmerat flertalet appar i Android med Java, OpenGL, C/C++. Mycket inhouse-appar för att testa systemet men också skarpa demos till Libra SDK. iOS Development – har programmerat flertalet appar i iOS med C/C++, Objective-C. Se Libra SDK samples från GPU Systems för iOS. Object oriented design – Har lång programmeringserfarenhet och förståelse för objekt-orientering i designsyfte. 15+ år och involverar de flesta programmeringsprojekt jag sysslat med. Embedded software – Har utvecklat teknologier/tjänster för inbäddad mjukvara att tillgå utökad datorkraft och programmerbarhet. Visual Studio – Har använt mig av Microsoft Visual Studio IDE för programmering 15+ år. Ett robust verktyg för programmering samt projekthantering av kodbas. Eclipse – Van användare av Eclipse IDE att programmera mest i C/C++ eller Java. Unix/linux – Har jobbat med unix/linux system med start under högskoletiden 1999 då vi byggde en filhanterare i unix som examensarbete. Samt sedan jobbat på senare år med unix/linux på GPU Systems projekt. Mobile Applications – har portat GPU Computing SDK till mobiler och surplattor. HTML/HTML5- känner väl till HTML och HTML5 Scalability – Programmerar med skalbarhet i åtanke, vill säga utan hårda beroenden mot plattformar, specifika hårdvaror eller specifika Apier. Sikte på många enheter och användare. Algoritmer – har jobbat med render algoritmer. Exempelvis inom området GPGPU, t.ex. för rekursiv reduktion av parallella datamatriser under begränsade hårdvarugränssnitt som OpenGL. Ex. när shared memory access saknas till hårdvara men finns närvarande under andra gränssnitt som t.ex. CUDA. Libra Teknologi, som jag arbetat med möjliggör automatiskt och dynamiskt design av olika typer av algoritmer och algoritmkomponenter utifrån förutsättningar hos underliggande hårdvara Artificial Intelligence – är bekant med olika AI koncept som path finding, neurala nätverk. Big Data – har jobbat med Big Data i 8 år och tagit fram verktyg att tillgå Big Data utifrån vanliga programmeringsspråk och för många olika typer av hårdvaruplattformar. MySQL: Jag har programmerat med MySQL i samband med affärssystem, licenssystem att inkludera flertalet användare. Version control: Har använt Perforce och Svn som versionshantering av programkod. Scrum/agil metodik: Jag har arbetat agilt och i scrum liknande projekt miljöer för en effektiv och iterativ utvecklingsprocess. Projektledning: Jag är strukturerad och medveten kring projektutveckling, Att kunna ta arkitektbeslut och exekvera. Gillar att ta på mig teamansvar och leder gärna team likväl ingår i team och utvecklar mjukvarusystem mot gemensamt uppsatta mål. ASP.NET: Jag har jobbat med ASP.NET för att bygga backends för gpusystems website som involverar affärssystem, kundvagn, kreditkort hantering etc, användardatabaser samt licens generering/validering och registreringssystem för kunder. Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected] Kompetensnivå 3 § § § § § Shell Scripting – Stöter på scripts ofta under arbetets gång och använder scripting för att lösa temporära problem kring byggmiljö eller t.ex. generering av kod. Script funkar bra till fil behandling, ”pipa” processer, data, filer, processa kataloger, sortera, scanna m.m Javascript: Jag har jobbat med javascript i t.ex. samband med asp och gpusystems website för att göra enklare frontend funktioner och kortare programsnuttar att koppla ihop javascript med java samt nativekod. Har god förståelse över hur man skriver kod i en javascript miljö. Python – känner till språket. Perl – känner till språket. Serialisering/XML: Jag har serialiserat / deserialiserat data i XML format el. liknande vid behov. Utbildning, Kurser & Certifieringar 1999-2000 Australia. 1995-1999 Magisterexamen, Master in Computer Science, University of Wollongong, Högskoleexamen, KTH, Kista, Datateknik 120p. Språk Svenska Engelska Finska Modersmål Flytande Medel Atiendo Consulting Tel: 08-34 50 05 www.atiendo.se [email protected]