En programmerares vardag…

…eller ”Eclipse borde förmodligen tas ut och skjutas på en bakgård en regnig natt och liket borde förses med blyvikter och dumpas i Marianergraven”

Jag skriver en hel del embeddedkod, det är sånt jag, av någon orsak, har en fallenhet för. Min målmiljö brukar handla om KB när resten av världen gärna slänger sig med MB, GB, TB eller tom (om man jobbar på Google i alla fall) EB. Ett A4 innehåller ca 1-2 KB och när jag programmerar pratar vi tex om RAM-storlekar som motsvarar några ark A4 när den dator du sitter vid just nu har RAM som motsvarar några tiotals bokhyllor med pärmar.

Det ställer en del krav på utvecklingsverktyg och en av de saker jag ofta använder är ett speciellt interface som gör att man kan ansluta sig rakt in på CPUn via en så kallad JTAG och se (eller i alla fall göra avancerade gissningar om) vad som händer i verkligheten när kod spårar ur. Alla som utvecklar på tillräckligt låg nivå måste i praktiken använda den här typen av verktyg, för även en vanlig PC/Mac har ett kort ögonblick i början när man slår på den (inte slår på den pga att den råkade formattera om hela ditt dokument utan slår till strömmen, alltså) då den är komplett ovetande om sin omgivning och inte vet hur man kommunicerar med hårddisken, nätverket, kan visa saker på skärmen eller ta tangentbordsdata.

När man är på de nivåerna måste man alltså ha specialverktyg och för att man ska kunna jobba effektivt kräver det att man inte bara har en JTAG utan även att allting samarbetar smidigt i en så kallad IDE (Integrated Development Environment) som hjälper dig att se exakt vilken rad kod CPUn exekverar och vad som går på tok. En sån utvecklingsmiljö är Eclipse. Jag ska berätta lite om Eclipse.

Eclipse är ett enormt monster skrivet i Java och en av de riktigt balla sakerna med Eclipse är att man kan använda sig av plugins för att utöka funktionaliteten. Det finns tex en plugin som gör det möjligt att ansluta till en GDB-server (Gnu DeBugger); ett fristående program som kommunicerar med din JTAG, så att man kan ladda ner ny kod i CPUn, köra den och spåra vad som händer. Problemet med Eclipse är att pluginsystemet har fler repositories (ställen att ladda ”pluggarna från”) än Beatrice Ask har ogenomtänkta idéer om nya lagförslag så att hitta rätt repo innebär ofta att man går googla tills man hittar en howto som beskriver precis hur man gör … om man kör en äldre version av Eclipse.

Alltså får man improvisera och experimentera tills man lyckas banka in de olika pluggarna tills de sitter fast hjälpligt. Det är lite som en action-scen i en tecknad film där det läcker vatten ur ett rör, så den tecknade figuren stoppar fingret i hålet och då börjar det läcka nån annanstans i stället. Då stoppar den tecknade figuren in ett finger i det hålet, varpå det kommer vatten någon annanstans! Då stoppar den tecknade figuren in en tå, varpå det läcker nån annanstans, ny del av figuren stoppas in nånstans varpå det läcker på ett nytt ställe och situationen upprepar sig tills den tecknade figuren står i en synnerligen absurt komisk ställning men det inte läcker någonstans alls. Tills det börjar spruta vatten ur öronen…

Lite så är det att installera plugins i Eclipse: Du installerar plugin A och B. Det funkar. Sen installerar du plugin C, då slutar plugin A att funka plus att Eclipse nukar dina inställningar, rakar din katt samt sprider rykten om att du är pedofil. För att råda bot på detta avinstallerar du plugin C, men då börjar plugin B att måla hakkors i badrummet och plugin A tipsar polisen om att du smugglar knark.

I ett desperat försök att få ordning på allting avinstallerar du plugin A och B samt återinstallerar dem igen, men då har de bumpat versionerna så att de inte längre är kompatibla och du måste installera om hela Eclipse, vilket får din dator att sjunga ”And aaaaiiiaaaa will always love yoouuuuuuuiioouuuuu….” samtidigt som den sätter eld på din hårddisk och skickar ett mail i ditt namn till Hells Angels där det ser ut som om du kallar dem för fjollor och bögar.

När du till slut får alla pluggar att funka som du vill (eller i alla fall tillräckligt bra för att du inte ska orka bråka mer) kommer nästa problem; att få Eclipse att fatta vilken kompilator du vill använda! Embedded är lite speciellt här eftersom det finns massor av olika arkitekturer (AVR, ARM, MIPS, PIC, SuperH etc etc etc) och varje arkitektur behöver (minst) en speciell uppsättning kompilatorer, länkare och andra verktyg. För att göra saken ännu roligare finns det GNU toolkit, IAR, Clang osv, så på nåt sätt måste du berätta för Eclipse vilken uppsättning av dessa verktyg du har. I Eclipse kan du välja mellan olika grundval (Cross GCC, Gnu autotool toolchain, Linux GCC, Cygwin GCC etc etc etc) och det är inte helt uppenbart vilket val som är rätt.

Ungefär såhär tenderar det att fungera:
– Jag: Ok, jag provar toolchainval A och pathen till verktygen är X.
– Eclipse: Jag hittar inte includefilerna.
– Jag: Includefilerna ligger på patharna Y och Z.
– Eclipse: Ok, jag kan inte bygga pga <reason 1>.
– Jag: Ok, då provar jag toolchainval B.
– Eclipse: Jag hittar inga verktyg.
– Jag: De ligger på pathen X.
– Eclipse: Jag hittar inte includefilerna.
– Jag: Includefilerna ligger på patharna Y och Z.
– Eclipse: Ok, jag kan inte bygga pga <reason 2>.
– Jag: Ok, då provar jag toolchainval C.
– Eclipse: Jag hittar inga verktyg.
– Jag: De ligger på pathen X.
– Eclipse: Jag hittar inte includefilerna och du får inte addera egna pathar. Pilutta dig!
– Jag: Ok, då provar jag toolchainval D.
– Eclipse: Jag hittar inga verktyg.
– Jag: De ligger på pathen X.
– Eclipse: Jag hittar inte includefilerna.
– Jag: Includefilerna ligger på patharna Y och Z.
– Eclipse: Ok, jag kan inte bygga pga <reason 3>.
Iterera in absurdum.

När du äntligen lyckats bygga koden och ansluta till JTAGgen kommer nästa problem; du måste få Eclipse och JTAGgen att snacka. Jag ska bespara er detaljerna, men låt oss säga att Eclipse numera klarar av att bygga koden korrekt, ladda ner binären via JTAG samt köra den! En gång. Sen uppstår massa roliga fel som slutar med att CPUn gör exception error (CPU-snack för ”Hörrö Gösta, det sket sig stor tid! Skärp dig!”) tills jag startar om GDB-servern. Detta måste jag göra varje fucking gång!

Så varför försöker jag inte fixa det då? Jo, för att just nu funkar allting och jag är livrädd för att om jag petar på nånting i inställningarna kommer Eclipse säga ”Hej. Du måste vara ny här. Vill du utveckla lite Java-kod med mig?”. Glömde jag nämna att Eclipse egentligen är en miljö för Javautveckling och att även möjligheten att utveckla i andra språk är plugins…? En annan sak Eclipse har plugins för är kopplingar till Subversion och GIT. Do you feel lucky, punk?

Jag fick allt det här att funka alldeles utmärkt förra året, den gången fick jag det tom att funka så bra att jag inte behövde starta om GDB-servern! Eftersom det funkade så bra så tänkte jag att jag skulle spara configgen så jag slapp göra om allting nästa gång. Eclipse lägger en mapp som heter ”.settings” i varje projektfolder där Eclipse sparar sin config, smidigt! Utom, då, för kompileringsverktyg, debuggerinställningar och alla de där andra sakerna som tar några dagar att reda ut för att Eclipse är så förbannat uppfuckad.

Exakt var Eclipse sparar den configgen vete fan men även om jag visste det skulle det nog inte hjälpa så mycket för när min dator gav upp (moderkortet kastade in handduken) och jag fick installera om allting (OS, Eclipse, you name it) så hade Eclipse ”utvecklats” så att ingenting längre såg ut som det gjorde tidigare, vilket gjorde att den howto jag följde förra gången inte längre var till någon som helst hjälp. Hade jag sparat configfilerna och försökt mata Eclipse med den hade Eclipse nog inte längre nöjt sig med att raka katten…

När Eclipse verkligen funkar är den guld, problemet är bara att sannolikheten att man får Eclipse att funka 100% perfekt på alla områden samtidigt är ungefär lika stor som att alla de som måste gå och prata i den vita porslinstelefonen hinner dit i tid samt att ingen missar målet när denne kaskadspyr våldsamt på en klassfest i gymnasiet där någon har en snäll morbror som försett festen med fri sprit i tillräcklig kvantitet för att alkoholförgifta en mindre håla i övre Norrland.

I nästa projekt ska jag prova en annan IDE. Jag har väldigt svårt att tänka mig att det kan bli sämre.

Integritetsvandalism, sardines och uppgivenhet…

Jag borde säkert ha skrivit om sardines. Jag borde säkert protestera högre mot övervakningsstaten som rullas ut. Jag borde säkert … väldigt mycket, men det känns så totalt meningslöst att fortsätta skrika.

Därför är det tacksamt att andra orkar. Kjell Häglund orkade. Det är med en uppgiven, frustrerad, ja direkt förbannad ton, men han orkade. Läs det, det är riktigt, riktigt bra och jag skriver under varenda ord.

Amen.

Själv känner jag mig allt mer uppgiven och i ett samhälle där till och med sysadmins ska kunna tvingas agera spioner mot sina egna arbetsgivare (hur nu det ska funka när samma personer ofta får skriva på NDAs som förbjuder dem att just sprida information till extern part återstår att se) så finns det bara två saker man kan göra om man har minsta jädra ryggrad kvar i ett land infekterat av en politisk elit som lider av total brist på genuint intresse för vad som är bäst för samhället och utvecklingen:

  1. Lämna branschen.
  2. Lämna landet.

Jag är inte, av olika orsaker, beredd att lämna landet så konsekvensen blir att jag just nu aktivt försöker hitta en annan primär inkomstkälla än IT så att jag kan ha IT som en sidosyssla eller hobby jag kan avveckla om så krävs.

Jag vet, tyvärr, att jag inte är ensam och dessutom, hur många multinationella företag kommer tex ha kvar någon IT-avdelning i Sverige om de vet om att den är bemannad av potentiella Quislingar? Vad detta kommer innebära för Sverige rent ekonomiskt kan vi bara spekulera i, men det lär knappast vara positivt i längden. Kjell skriver:

Sverige var en gång världens mest spännande it-land. När industrisamhället hade börjat tappa fart stod en ny, hyperkreativ världselit av visionära ingenjörer och entreprenörer redo att kugga i.

Var. Gången tid. Förlorad tid. En chans sumpad pga Bodström, Persson, Ask, Reinfeld och alla andra glada oförstående Integritetsvandaler.

Om du är en entrepenör som har ditt sikte inställt på att göra karriär genom att bygga upp ett nytt företag inom IT så har jag bara ett råd att ge:

Fly.

Jag börjar verkligen gilla Clang!

Clang verkar tyvärr fortfarande brista vad gäller ARM-stödet så jag kör gcc för att kompilera ARM-binärerna, men däremot har jag börjat använda Clang för att köra gtest och det är väldigt trivsamt. Clang har tex den goda vanan att vara väldigt petig med syntaxen (felet ovan hittas tex inte alls av gcc trots -Wall) vilket, imo, är en mycket bra sak för att få en snygg och koncis kod.

Det var bara det. Jag har inget mer att säga mer än att om du inte har provat på Clang utan tex kör gcc av gammal vana när du kompilerar rekommenderar jag verkligen att du i alla fall provar på Clang. Om du är lite orolig för att byta kompilator bara sådär (vilket ofta kan bli lite kämpigt för redan existerande projekt) kan du alltid börja med att använda Clang för tex testfallen (för du gör väl testfall för din kod?).

Polisen och SÄPO ska stoppa våra terrorister!

Så ska då polisen och SÄPO då äntligen få tillgång till FRAs signalspaning så de en gång för alla kan få bukt på den terroristplåga som drabbat landet. Vår balanserade och väl pålästa justitieminister Beatrice Ask meddelar att:

– Det är viktigt att Säkerhetspolisen och Rikskriminalpolisen kan få tillgång till information om utländska förhållanden som inhämtas genom signalspaning, säger justitieminister Beatrice Ask i ett pressmeddelande.

– Därigenom stärks Sveriges förmåga att förebygga och förhindra terrorism och sådan grov gränsöverskridande brottslighet som kan hota väsentliga nationella intressen.

Som ni ser så är det enbart spaning mot utlandet som ska bedrivas, svenskarnas eget privatliv är därmed garanterat att inte kränkas. Tyvärr finns det förstås alltid rötägg i alla organisationer, så för att vara på den säkra sidan kommer här ett förslag på hur den orolige medborgaren kan garantera sig med hängslen om man inte riktigt tror att Asks livrem kommer hålla byxorna på plats. Lösningen heter Tails, eller The Amnesic Incognito Live System, och jag tänkte visa hur ma kan installera det under VirtualBox för att slippa ha en dedikerad maskin för det utan kan fortsätta köra den Windows, Linux eller OSX man är van vid.

I de skärmdumpar som följer har jag installerat VirtualBox i en XP som i sin tur kör i en VirtualBox som går i en Linux, men jag tänkte att fler är familjära med XP (plus att min VirtualBox i Linux är fullständigt nedlusad med olika ”maskiner” så det blir inte så överskådligt då) så XP it is! I en VirtualBox… I en Linux… MEN I ALLA FALL!

Uppdatering! Ola konstaterade i kommentarsfältet att texten utgår från att alla vet vad tex VirtualBox är och om man inte vet det blir det rätt maffigt att förstå vad allting handlar om. Här kommer en kort förklaring för att råda bot på det.

  • VirtualBox: VirtualBox är en mjukvara i vilken man kan köra virtuella maskiner. Det betyder att VirtualBox ”härmar” en PC och dess komponenter på ett sånt sätt att man kan installera ett operativsystem, tex Windows, och köra det precis som man gör på en fysisk dator. Man kan så att säga köra en dator i en dator, vilket är det som gör det möjligt att köra Linux i Windows som i det här fallet.
    Det finns fler typer av mjukvaror som kan köra virtuella maskiner, tex kvm, vmware, xen mm, men VirtualBox är den som jag upplever som mest användbar för såna här saker plus att av alla såna här system jag provat på är VirtualBox den som är lättast att komma igång med.
  • Linux: Alla har säkert hört om Linux, men för att vara på den säkra sidan så kör jag en kort introduktion av Linux med. Linux är ett fritt operativsystem som utvecklas helt öppet över Internet med bidrag både från privatpersoner och företag (tex IBM). Linux är alltså inte ett program (som tex Word) utan själva systemet (som Windows eller OSX som körs på Macintosh).
    Fast ska man vara riktigt petig är Linux bara själva kärnan i ett UNIX-kompatibelt system. UNIX å sin sida… Err, nä, skit i det. Vet ni vad UNIX är så behöver jag inte förklara, vet ni inte vad UNIX är så spelar det nog egentligen ingen roll för den här textens uppgift. Ni kan nog sova gott ändå. 😉
  • Tails: Linux är egentligen bara en liten del av det som behövs för en fungerande dator, men att installera Linux och alla andra saker som behövs är ett otroligt tidsödande arbete så därför finns det distributioner som i princip är sammanställningar av olika mjukvaror som gör att man snabbt och enkelt kan installera ett fungerande Linuxbaserat operativsystem på sin dator utan att vara en IT-expert eller behöva ägna dagar åt det.
    Eftersom Linuxvärlden inte kan komma överens om den optimala sammanställningen finns det ett ANTAL olika distributioner (detta kan vara rätt förvirrande ibland), de flesta av dessa är väldigt generella sammanställningar men vissa är väldigt specialgjorda för en dedikerad uppgift. Tails är en sån specialgjord distribution som alltså har som uppgift att försöka göra dig så anonym som möjligt när du är uppkopplad mot nätet.
  • Live-CD: Normalt sett brukar man bara använda CD (eller DVD) för att installera program från, men en så kallad Live-CD är alltså ett system som körs från själva CD:n. Det har flera fördelar, tex betyder det att man kan låna en dator och köra ett eget system på den utan att behöva förändra hårddisken på den lånade datorn. I Tails fall är fördelen dels det men även att det är svårare att infektera en dator som kör från en Live-CD eftersom man inte kan ändra innehållet på CDn. Får man in virus eller andra otäckheter på sitt system så kommer därför alla såna saker försvinna nästa gång man startar om just för att det inte finns några filer som kan infekteras.
    På senare tid har det dessutom dykt upp Live-USB eftersom USB-stickor är mycket snabbare att köra från än en mekanisk CD-spelare, men det är tekniskt lite stökigare att få till med…
  • TOR: TOR står för The Onion Router som försöker göra din trafik anonym genom att transportera den ”lager på lager” i olika krypterade tunnlar. Man skulle kunna säga att det påminner lite om de där magikerna som lägger en boll i en av tre koppar och sen snabbt försöker lura publiken genom att skyffla runt de tre kopparna väldigt fort så att publiken inte längre ska veta var bollen ligger. Fast sen finns det en större magiker som har stoppat den mindre magikern i en av tre större koppar och skyfflar runt dem i sin tur och sen är det en ÄNNU större magiker som…
    TOR är ingen absolut säkerhet. Det finns en del svagheter i systemet, men det gör det i allla fall väldigt mycket svårare att spåra trafiken just för att den hela tiden skyfflas runt men det är också denna omskyffling som gör systemet långsamt. Den största svagheten är om man surfar mot okrypterade siter (dvs de som börjar med http i stället för https) eller kör tex oskyddad imap (i stället för imaps) i sin mailklient, så tänker man inte på såna saker när man använder TOR ska man nog främst se det som en rökridå snarare än ett skydd.

Hoppas att det här gör resten av inlägget LITE klarare i alla fall…

Börja med att ladda ner och installera VirtualBox, det finns färdigkompilerat för Windows, Linux, OSX och Solaris och är tänkt för precis den här typen av uppgifter. Det är dessutom rätt enkelt att installera och alla som installerat ett program i respektive system borde inte ha några bekymmer med det. Klicka OK, Next och Install på lämpliga ställen och var glad. 🙂

När du är klar med installationen borde du få upp nåt i stil med det här.

Som synes är den vänstra vita ramen (där dina ”maskiner” ska synas) helt tom. Det råder man enklast bot på genom att klicka på ”New”.

Jag har döpt maskinen till Tails så jag kommer ihåg vad det är för nåt men det går att döpa den till precis vad som helst, tex Nisse. Tails är en Linux baserad på Debiandistributionen, därav att jag valt de inställningarna. Det ger VirtualBox lite mera info om vad det är den förväntas köra och kan göra en del antaganden och förändringar baserat på det. Hur mycket det påverkar vet jag faktiskt inte, men det kan inte skada att välja rätt. 😀

Klicka sen Next så kommer du till minnesinställningar.

Virtuella maskiner är precis som ”vanliga” maskiner. Har de för lite minne kommer det gå långsamt att köra men det är lite farligt att bara dra på max eftersom då kommer alla program som körs i värdsystemet (dvs det OS du egentligen kör på din PC) få väldigt ont om minne i stället. Det här kan man dock ändra i efterhand så känner du dig osäker kan det vara smart att lämna värdet på det rekommenderade tills vidare.

Virtuella datorer har virtuella hårddiskar. I praktiken innebär det att det skapas filer på din dator som för den virtuella maskinen ser ut som om det vore äkta, fysiska hårddiskar. Tails är dock designat att boota från CD eller USB-sticka så i praktiken behövs ingen hårddisk så det är egentligen skit samma om man vill ha en hårddisk eller ej. Fördelen med att ha en hårddisk är att man har en lagringsplats som är permanent mellan sessionerna, fast det går att lösa på smartare sätt i VirtualBox när man blir lite mer varm i kläderna.

Eftersom det handlar om virtuella maskiner är det väldigt enkelt att experimentera loss, testa att installera en andra maskin parallellt med den första på ett annorlunda sätt, ta bort installationer igen etc. Det bästa sättet att lära sig är att testa runt lite och eftersom just Tails bootar från en CD kan man inte ha sönder nånting heller hur vilt man än beter sig. Och ja, man kan förstås lägga till eller ta bort en hårddisk i efterhand…

Grattis, du har nu skapat en virtuell maskin i din dator! Du kan nu välja att skapa en till om du känner för det, gå in i inställningar för maskinen och ändra på ”hårdvaran” eller ”slå på strömmen”. Tryck på Start.

VirtualBox kommer poppa upp lite olika dialoger när du börjar köra en ny maskin. De flesta kan du bara klicka i ”Do not show this message again” och vara glad för du kommer inte märka nån skillnad i alla fall, men just den här bör du läsa och förstå. Om du kör ett OS i en virtuell maskin som inte hanterar den virtuella miljön sömlöst (som det så vackert heter) så kommer OSet sno din muspekare och vägra släppa ifrån den. Det kan vara väldigt irriterande om man inte hänger med på vad som händer eftersom det inte finns något uppenbart sätt att sno tillbaka den igen! VirtualBox använder högra ctrl-tangenten (givetvis inställbart) för att man alltid ska kunna återfå kontrollen så det är viktigt att komma ihåg det! Just Tails hanterar dock detta snyggt, så där kommer det bara fungera av sig själv.

Om du inte gjort det innan är det för övrigt hög tid att ladda ner Tails nu. Eftersom du nu håller på att förbereda dig för att köra Tails i en virtuell maskin finns det två sätt att ladda CDn, antingen bränner du en fysisk CD i din brännare på normalt sätt eller så monterar du den iso-fil du laddat ner som en virtuell CD. En fysisk skiva har fördelen att den inte går att infektera med trojaner och annat (men är du så paranoid ska du nog inte köra Tails i en virtuell maskin utan i en dedikerad PC i stället) medans en virtuell CD har fördelen att Tails kommer bli mycket snabbare eftersom man slipper läsa från den långsamma CD-läsaren.

Om du tänker använda en fysisk CD kan du låta dialogen stå kvar på D:, stoppa i skivan och trycka Start. Om du vill använda iso-filen direkt får du trycka på den lilla folderikonen med grön pil och välja iso-filen.

UPPDATERING: I skärmdumpen ovan är det version 0.12.1 av Tails som visas, men det har kommit en ny version, 0.13, eftersom det visat sig att 0.12.1 inte är säker. Ladda mao ner version 0.13 (eller vad det nu är som är senaste versionen) när du laddar ner!

Här har jag markerat ISO-filen i fråga och här syns också det jag talade om innan; att det finns smartare sätt än en virtuell hårddisk om man vill lagra filer mellan sessionerna. S: är min delade folder som alla mina virtuella maskiner delar och som ligger direkt på min fysiska maskin så det är lätt att flytta filer mellan mina olika system. Det är dock lite utanför dagens övning att sätta upp en sån så det får ni lura ut själva. Det är faktiskt inte speciellt svårt, bara pilla runt lite i inställningarna så kommer ni troligen på hur man gör! 😉

Sen är det bara att titta på när ens nya virtuella maskin bootar. En stor fördel att köra två OS på det här sättet, det ena inuti det andra, är att man slipper välja antingen eller. Den klassiska lösningen för att kunna köra Linux och Windows på samma maskin är att man kör så kallad dual boot, dvs att man får välja vilken man vill starta när man slår på strömmen, men det här gör det möjligt att använda båda samtidigt. Väldigt mycket mera praktiskt.

När Tails har startat kommer du mötas av en väldigt enkel inloggningsskärm.

Här kan man välja språk och lite andra nationella inställningar. Tyvärr finns det inte möjlighet att välja svenska mer än vad gäller tangentbordslayoten, men när du valt det trycker du bara Login. Efter ett tag kommer du få upp en varning om att det kan vara ett säkerhetsproblem eftersom du kör i en virtuell maskin.

Om du tex kör Windows i normala fall och du får tex trojaner i din Windows så kan de otäckheterna förstås lyssna av inte bara det du gör i din Windows utan även vad du gör i Tails. Ska man vara riktigt säker ska man förstås köra direkt på en PC utan VirtualBox (helst från en CD som det inte går att ändra datat på heller) men det är ju lite omständigt så för de flesta vill jag påstå att det duger utmärkt att köra det i VirtualBox.

Det är dock värt att hålla i minnet att dina virtuella maskiner aldrig är säkrare än den ”riktiga” datorn. Själv har jag valt att vara lite försiktig med vad jag kör i mitt primära OS och har tex bara installerat flashstöd i en Firefox som sitter väl inkapslad i en virtuell maskin som har hand om sånt där osäkert elände (just Adobe har en lång tradition av att släppa mjukvara med säkerhetsläckor vilket gör att jag inte gärna litar på dem). Det blir lite omständigare att hålla reda på var man vill köra vad men eftersom datorn är mitt arbetsverktyg så vore det en mindre katastrof om min primära Linux blev infekterad eller saboterad!

Säkerhet är ofta en avvägning mellan bekvämlighet och skydd. Var man drar gränsen måste man avgöra själv, men ju viktigare och känsligare data man hanterar, dess mer bör man nog vara beredd på att offra en del bekvämlighet.

Om allt nu funkar som det ska så kommer du till slut få upp en browser som ser ut såhär!

Längst upp i statusraden för Tails finns det en liten ”statuslök”, bara nån cm hög eller så. Så länge den är grön är du uppkopplad mot TOR och allting du gör i Tails (surfar, läser mail, chattar etc) kommer alltså gå över TOR-nätverket och därmed väldigt svårt att spåra eller avlyssna, även för FRA. Det finns förstås aldrig nåt som är 100% omöjligt, men det är i alla fall FÖRBASKAT mycket mera omständigt än om du kör utan TOR. Om du dessutom bara tex uppsöker siter som kör krypterat (dvs att det står https: i stället för http: i URLen) så är det klipp omöjligt för någon utomstående att se vad du gör utan att de infiltrerar antingen din dator eller den site du besöker.

För att försöka åskådliggöra hur stor skillnaden är så använde jag ett program som avlyssnar nätverket för att ge ett exempel på hur trafiken ser ut med och utan TOR. Såhär ser det ut om man surfar till DN med en vanlig browser i Windows.

10.0.2.15 är Windowsdatorn själv, men alla övriga namn som dyker upp här är alltså dels, förstås, DN själva men i övrigt är det ”extrasiter” som lägger till tex annonser och annat på DNs hemsida men även spårar dina surfvanor etc.

Så förutom att tex FRA klart och tydligt kan se exakt vilken site du surfar till (och, om trafiken inte är krypterad, vilken data som skickas) så är det många andra aktörer som tjänar pengar på att kartlägga vad du sysslar med när du är online. Om du nu surfar i Tails i stället och all denna trafik (vilket då alltså inte är begränsat till just surfande) går via TOR så är det här vad en utomstående kan se.

10.0.2.15 är datorn, 10.0.2.255 är en lokal broadcast som råkade slinka med (det är bara lite automatisk administration av mitt lokala nät, inget att bry sig om) men alla övriga IP-nummer är servrar som handhar TOR-nätverket. Det är anonyma servrar som gör sitt bästa att obfuskera allting maximalt för att göra det så svårt som möjligt för en utomstående att klura ut vad som pågår. Nu finns det förstås aldrig någon garanti att någon anonymisering är absolut, men det är väldigt mycket bättre än inget!

Denna obfuskering kommer dock med ett pris, det brukar inte gå så jättefort att koppla upp sig via TOR så det är tex inte direkt nåt man använder för att spela onlinespel eller se på streamad video via. Det är dock användbart för tex folk som bor i diktaturer som vill meddela omvärlden vad som händer och med det övervakningsklimat som sakta växer fram här i väst med loggar och data som sparas i flera år är det kanske inte så himla roligt att lämna efter sig sökhistorik där man googlat på begrepp som kan se väldigt suspekta ut, tex om man vill skriva en blogpost om något känsligt ämne som inte är riktigt politiskt korrekt.

Fast vill man bara SURFA via TOR kan man nöja sig med att installera deras TOR-riggade browser. Det har jag beskrivit hur man gör här.

Shatter – hur man säljer på 2000-talet

Vad får man om man tar gamla klassiska breakout

och kombinerar med grafik från de riktigt coola demoreleaserna?

Tja… Shatter kanske?

Jag köpte Shatter för ett drygt år sen när Steam sålde ut det billigt och har ingen aning om hur många timmar jag spelat det. Det är klart vanebildande. Ok, spelidén är väl ungefär densamma som för ca 45 år sen (ja ok, det har tillkommit lite grejor) men grafiken och kanske ännu mer musiken gör det till en helt annan upplevelse idag än då.

Det är perfekt musik att lyssna på när man hackar med, problemet  är att den inte finns på Spotify (som brukar vara min primära musikfix här i livet) och på Grooveshark finns det bara ett par låtar så jag duckade runt lite och hittade faktiskt musiken lyssningsbar på Bandcamp. Fast att hålla reda på en speciell websida för ett visst album är ju bara jobbigt, så vafan…

Dessutom; jag köpte Shatter för 2 sketna Euro och tycker att jag haft roligare än så med spelet så jag tyckte jag kunde visa min tacksamhet för ett utmärkt spel genom att köpa och ladda ner musiken med. Det är inte direkt några förmögenheter det handlar om heller.

Jag förstår inte varför det är så svårt för den etablerade nöjesindustrin att fatta galoppen. Gör det enkelt att hitta, gör det enkelt att prova och, framför allt, gör det enkelt att ladda ner i de format kunden vill ha utan massa DRM och trams som gör att det måste spelas upp i en viss utrustning. Det är dags för den gamla Internetfientliga underhållningsindustrin att tänka om!

Det borde inte vara rocket science, faktiskt. Det handlar ju bara om IT…

Farbror Google vill bara ditt bästa…

Det kan nog inte vara många som missat att Google nu tänker förändra sin policy så man får en enhetlig policy för alla sina tjänster. Rent generellt så tycker jag att det låter som en bra grej, men det som är lite oroväckande är att det tydligen (och det har inte framkommit riktigt lika tydligt från Googlehåll) också kommer innebära att din historik i de olika tjänsterna kommer samköras så att Google kan få bättre detaljinformation om vem du är och vilka vanor du har.

Helt förvånande är det kanske inte. Google är, trots allt, ett kommersiellt företag och de lever på att samla och indexera information. Att de inte, likt IT-hamstrar, samlar på sig så mycket de kan om så många de kan utan försöker att uppvisa en viss måttfullhet ändrar inte det faktum att de förmodligen vid det här laget vet mer än rätt många vet om sig själva.

Idag är alltså rätt mycket av den informationen fortfarande fragmenterad över flera oberoende tjänster, men i och med policyförändringen kommer man kunna samköra mer information än tidigare vilket har potentialen att kunna vaska fram obehagligt många nya små bagateller om oss som individer. Bagateller som tillsammans kan bli en rätt komplett kartläggning.

Det är lätt att tänka att ”Äh, jag har inget att dölja” och sen känna att det här inte är nån fara eller att man försvinner i bruset. Problemet är att är det nånting datorer är bra på så är det att sortera ut signalen ur bruset och gräva fram information om dig som du troligen inte ens visste om själv att du spred.

Every time you go shopping, you share intimate details about your consumption patterns with retailers. And many of those retailers are studying those details to figure out what you like, what you need, and which coupons are most likely to make you happy. Target, for example, has figured out how to data-mine its way into your womb, to figure out whether you have a baby on the way long before you need to start buying diapers.

Google ses ofta som ”The good guys” och till viss del håller jag med. De verkar verkligen anstränga sig för att följa sitt måtto ”Don’t be evil”, men problemet är att ”Don’t be evil” inte automatiskt implicerar ”Be good” och jag tycker mig se allt oftare att Google gärna befinner sig i gråzonen däremellan. I Googles policydokument kan man läsa att:

Din integritet skyddas på samma sätt som tidigare

Målet är att ge dig så mycket öppenhet och valmöjlighet som möjligt med hjälp av produkter som Google Översikt, Annonspreferenshanteraren och andra verktyg. Våra sekretessprinciper har inte ändrats. Och vi kommer aldrig att sälja eller dela dina personliga uppgifter med andra utan ditt tillstånd (förutom i undantagsfall då vi måste göra det på grund av en giltig begäran från en domstol).

Så låt oss säga att vi verkligen tror på att Google menar vad de säger så innebär ändå det faktum att de sitter på världens förmodligen största samling med indexerad personlig data en möjlighet för tex myndigheter att kräva att Google lämnar ut information. Det har hänt förut och kommer med största sannolikhet hända igen.

Min farhåga med det här är alltså egentligen inte att Google kommer missbruka situationen utan att andra kommer kräva att få ut informationen så de i stället kan missbruka den. I det läget kommer Google hävda Force Majeure och lämna över den begärda informationen, även om de förmodligen gör det motvilligt.

Så även om jag på många sätt ändå gillar Google och kommer ha svårt att helt leva utan deras tjänster så kommer jag ändå göra fyra saker framöver:

  1. Radera min sökhistorik hos Google eftersom den egentligen inte är till nån nytta för mig själv.
  2. Börja använda andra söktjänster i stället, tex DuckDuckGo (och stänga av ”Search suggestions”).
  3. Sluta vara slentrianmässigt inloggad på Google utan ha en dedikerad Googlebrowser när jag behöver vara inloggad (troligen en Chromebrowser i en väl inkapslad virtuell maskin).
  4. Försöka hålla lite mer koll på hur mycket information Google (och andra) tjänster faktiskt slentrianmässigt sparar om mig (det är mer än man tror).

Det är möjligt att det kan ses som lite nojigt, men det måste vara upp till var och en hur pass mycket information man sprider om sig själv. Även om jag inte planerar att bli en IT-eremit så är jag ändå inte helt bekväm med att läcka information utan någon som helst kontroll eller något uppenbart syfte. Kan jag se en fördel med att jag delar med mig av privat information är det förstås en helt annan femma.

Som jänkarna säger, YMMV.

Hur blir du datorsäker?

Det blir allt tydligare att regeringen inte har några som helst skrupler att fortsätta öka avlyssnandet tills man når, eller passerar(?), nivåerna i forna DDR. Jag tycker det är rätt olustigt, för att uttrycka det milt, för även om jag kanske egentligen inte har något att dölja så är jag inte heller speciellt exhibitionistisk av mig. Jag föredrar att få vara i fred och tror att denna tendens att övervaka folket kommer leda till fler brott, inte färre. Det är också bevisat till leda att all form av insamlad information läcker och det enda som hjälper mot informationsläckor är att inte samla in informationen till att börja med.

Det näst bästa är att se till att även om informationen läcker så bör den vara så oanvändbar som möjligt och det enklaste sättet att göra det är att se till att man håller sina datorer uppsäkrade (så man undviker trojaner och spyware) och genom att se till att så mycket som möjligt av den information man anser vara privat är nödvändigt krypterad. När du kommunicerar med din bank sker det alltid via https och starka krypton, jag tycker faktiskt inte det är mer än rätt att vi även skyddar vårat privatliv på samma sätt.

Jag tycker datorsäkerhet är intressant. Inte intressant som att jag har snöat in på det totalt och försöker bli expert på det, men jag har en hälsosam relation till det och försöker att hålla datorer och lösenord så säkra att de ska agera ett litet större hinder än bara ett litet fartgupp rakt in på mina hårddiskar. Alla system kan förstås alltid bli säkrare och för militära organisationer finns det ofta incitament att dra saker och ting till sin spets, men det är att ta i för privat bruk.

Min erfarenhet, både privat och från att haft säkerhetsansvar i mitt jobb, är att den svagaste länken i princip alltid är användaren, dels hur användaren beter sig och dels vilka lösenord man väljer. Jag tänker inte diskutera farliga beteenden i den här postningen (men läs gärna tex den här artikeln) utan enbart skriva om vettig lösenordhantering.

Just vad gäller lösenord har det kommit många bra råd genom tiderna, men ofta hänger råden med för länge och passerar sitt bäst före-datum. Klassiska råd brukar vara saker som:

  • Använd inte namnet på någon person i familjen
  • Använd inte namnen på husdjuren
  • Använd inte ord som kan hittas i ordböcker

Osv. Ofta föreslog man i stället att man skulle göra lösenord som tex:

  • Använder första (eller andra) bokstaven från varje ord i en mening
  • Blandar siffror och små/stora bokstäver
  • Använder specialtecken

Skitbra råd. För 10-20 år sen. FULLSTÄNDIGT värdelösa, på gränsen till farliga, råd idag!

Så kallade dictionary attacks är idag old school och ofta är det lättare att helt enkelt knäcka korta lösenord med brute force. Dvs, enkelt förklarat, man testar med ”a”, ”b”, ”c”, ”d” osv, sen med ”aa”, ”ab”, ”ac” osv, vidare till ”ba”, ”bb”, ”bc” osv. Man hamrar på tills man tar sig in. Vanligtvis brukar algoritmerna vara lite smartare än så och börjar ofta med populära lösenord först för att öka oddsen, men det handlar fortfarande om att hamra på tills man lyckas i stället för att försöka gissa sig fram.

Så, katastrofala lösenord för 10 år sen var saker som:

  • Majken (min mormors namn)
  • Kenzo (en av våra hundar)
  • Volvo (om man kör en sån)

Hade man minsta lilla koll på en persons privatliv kunde man ofta testa sig fram med såna ord och skrämmande ofta var det framgångsrikt. Just detta fick säkerhetsexperter att föreslå att man skulle blanda små och stora bokstäver, siffror och specialtecken så tex Kenzo blev k3Nso. På den tiden attackerna ofta utfördes av människor eller väldigt enkla algoritmer som baserade sina försök på ordlistor var det väldigt effektivt, idag betyder det att tiden det tar att knäcka lösenordet ökar från nån sekund till sekunder. Knappast mycket att hurra för.

Så hur skriver man ett bra lösenord idag? Det finns bara en sak som rår på brute force och det är längd. Ju längre lösenord eller lösenfraser man tar till, dess fler bittar blir det att få rätt och tiden det tar att knäcka ett lösenord ökar exponentiellt. Som ren bonus blir lösenorden också ofta lättare att komma ihåg, väl så viktigt.

Om vi börjar enkelt och väljer ett slumpmässigt ord och bygger vidare på det så kommer ni förstå hur det funkar:

  • Barbie: ”Your password is very commonly used. It would be cracked almost instantly.”
  • b4rbi3: 8 sekunder
  • Barbie med: 412 år
  • b4rbi3 m3d: 32 år
  • Barbie med en: 147 000 000 år
  • b4rbi3 m3d_en: 122 000 000 år
  • Barbie med en smurf: 18 000 000 000 000 000 000 år.
  • b4rbi3 m3d_en sMurF: 5 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 år

Som ni kan se så är det inte säkert att obfuskering faktiskt alltid är bättre, men däremot är längd alltid en vinnare. Även om det är fullt vanliga ord så gör längden att det blir väldigt svårt att brute force-knäcka meningen och om man kombinerar det med en lite småknasig mening och lite inslängda ”konstiga tecken” så gör man även dictionary attacks svåra att genomföra. Det kan räcka med att byta ut enstaka tecken i vissa ord mot siffror så skyddar man sig oerhört effektivt mot attacker, men primärt är, som sagt, längd.

Den gamla tumregeln att 8 tecken är en bra längd stämmer inte med verkligheten längre! 8 tecken är en piss i havet och en modern dator knäcker ett valfritt sånt lösen på, i bästa fall, några timmar. Ett datorkluster behöver förmodligen bara några minuter eller sekunder för att knäcka det. Jag skulle vilja påstå att idag är 12 tecken minimum och 16 (eller mer) är att rekommendera.

Om du känner att du saknar fantasi för att komma på ett lösenord som inte är väldigt typiskt ”du” (och därmed lättgissat av folk som känner dig) kan du alltid utnyttja en av de tjänster som finns på nätet att slumpmässigt generera någonting som förhoppningsvis är relativt lätt att komma ihǻg. När jag tex bad den siten att generera ett slumpmässigt lösenord så fick jag tillbaka ”Coexist Beluga”, vilket bedömdes att hålla ungefär 10 000 000 000 år om en av dagens skrivbordsdatorer fick i uppgift att knäcka det. Det innebär förstås att även om man dedikerar ett enormt datorkluster så är uppgiften orimlig att lösa inom vår livstid och det är ganska rimligt att anta att säkerheten kommer vara så pass bra att när lösenordet väl kan knäckas så är det ointressant att göra det.

Fast man behöver förstås inte överdriva heller. Välj lösenord som är lätta (men långa) att komma ihåg och som ändå ger så många nollor i den uppskattade tiden det tar att knäcka dem att uppgiften blir lagom orimlig. Målet bör inte vara att göra det omöjligt att komma åt datat utan att det ska vara så svårt och omständigt att knäcka det att det är lättare att gå på dig som person i stället, dvs så du får veta att säkerheten är komprometterad och tex kan skrota dina gamla nycklar och lösenord och byta dem mot nya. Användaren är alltid en svag länk och vettig datorsäkerhet handlar mer om att se till att övriga länkar alltid är starkare. Att göra tex lösenorden oändligt starka är bortkastat så länge som man fortfarande är beroende av den säkerhetsmässigt svaga användaren.

Att veta när säkerheten är knäckt är minst lika viktigt som att investera i säkerhet till att börja med. Att tro att ett system är säkert utan att vara medveten om att tex ett lösenord är knäckt, eller kan knäckas utan större besvär, är en farligare osäkerhet än att inte ha någon säkerhet alls!

Jag har passerat någon form av gräns…

Jag brukar alltid skriva ut elektronikscheman om jag ska läsa dem för typiskt brukar det vara svårt att få överblick på en skärm eftersom man måste zooma in för att kunna se alla detaljer och då ser man ju, förstås, bara en liten bit i taget. Dvs det är så det brukar vara. Inte den här gången.

De två skärmarna till vänster agerar tillsammans som en enda stor skärm med en upplösning på 2048×1280 och ca 28″ storlek. Vid den upplösningen händer uppenbarligen nånting väldigt intressant för plötsligt har jag lättare att få överblick över konstruktionen och signalvägarna på skärmarna än vad jag får på utskriften. Detta trots avbrottet i mitten pga att det är två separata skärmar i stället för en kontinuerlig yta…

En 2560×1440-skärm (eller två) hamnade just nu ännu högre upp på önskelistan än det varit innan! Eller kanske ett helt batteri 1920×1080-skärmar vridna 90 grader! Undra hur många grafikkort man (praktiskt) kan trycka in i en dator…

När har man tillräckligt med skärmyta…?

Jag vet inte när man har tillräckligt, men det senaste tillskottet var inte otrevligt alls, kan vi säga. 🙂

Första försöket gick sådär. Mitt primära kort, ett nVidia GeForce 9800 GT,  har två utgångar (tre egentligen, men den kan bara aktivera två i taget) men jag hittade ett gammalt Voodoo Banshee 3D blaster PCI (tillverkat nån gång i slutet av förra århundradet) och tänkte att det borde ju funka bra som den tredje utgången. Trodde jag ja. Maskinen tvärhängde i boot och jag lyckades inte lösa det så i brist på bättre hypoteser spekulerade jag runt att det kanske hade passerat bäst före-datum och hystat in handduken för gott. Alltså letade jag runt lite på prisjakt och hittade ett nVidia GeForce 8400 GS på gammal hederlig PCI och jag trodde i min enfald att det skulle fungera smärtfritt mtp att korten är så pass lika att de kör med samma drivare. Hej vad jag bedrog mig.

Jag mäcklade in kortet på den sista lediga PCI-platsen, drog igång maskinen och den vrålhängde. Det yttrades en del intressanta fraser som förmodligen skulle fått en frikyrkopastor att tappa talförmågan i i alla fall 10 sekunder. Lite google gav vid handen att andra lyckats bättre, men att de inte körde nåt så uråldrigt som en gammal Fedora 13 så jag gjorde som jag brukar göra när mina distar blir FÖR uråldriga; petade på yum för att få den att peka på ett nyare repo och sa åt den att uppgradera sig. Konfliktlistan blev allt annat än nådig. När det blev uppenbart att jag skulle få riva upp himmel och helvete för att få det att funka så kändes det lite som nä, det är nog dags att storstäda och kanske ta och byta från IDE till SATA som jag funderat på ett tag (jag har tom en trave diskar som bara väntat…).

Nya diskar mao. Från en gammal 500 GB Bluepoint IDE till ett smärre batteri blandade diskar, en gammal 200 GB Spinpoint till Windows (för spel), en 40 GB SSD som root och ett mirrorset på 2×2 TB som /home till linux. Eftersom jag börjat köra mer och mer i virtuella miljöer tänkte jag att det kunde vara smart med ett STABILT OS i botten! CentOS 6.2! What could possibly go wrong…?

Låt oss bara konstatera att CentOS är lite FÖR stabilt för att ha roliga finesser ämnade för vågade experiment utanför datorhallen. Så det fick bli Fedora 15 eftersom jag behövde få igång datorn och det är, trots allt, RedHat-releaser jag kan bäst. Sagt och gjort, trattade in Fedora, konstaterade att maskinen numera bootade igen men dock blåvägrade att hitta två grafikkort.

Efter lite googlande hittade jag att nouveau-drivaren (den fria för nVidiakort) tydligen inte supportar sånt så det blev att trycka in nVidias egen. Den hittade ett grafikkort.

Mer googlande. Nånstans hittade jag en text som påstod att grafikkort inte alltid gillar att dela IRQ med andra kort och om man byter PCI-plats så kan det lösa sig. Så jag gjorde det. Det hjälpte inte.

Mer googlande. Någon påstod att man kunde labba med kernelparametrarna ”pci=nommconf”, ”idle=poll” och ”maxcpus=1” för att få det att funka. Jag provade och lyckades lobotomera min maskin från en dual core till single core, men fortfarande bara ett grafikkort.

Mer googlande. Hittade ett litet obskyrt forum där någon påstod att kernelparametern ”vmalloc=256M” skulle lösa biffen. Startade upp maskinen, den startade bara en skärm. Gick in i nvidia-settings och där fanns det … TVÅ GRAFIKKORT! Pillepillepilleställainpillepi*KABLAM* sa X-serven och jag blev utloggad.

Okeeeej? Logga in igen, pillepillepillep*KABLAM*

Inte pilla på den mao. Logga in igen, pillepillepillepillespara. Pillepillepillep*KABLAM* Repetera några gånger.

Avsluta med att editera xorg.conf manuellt för att rotera de två sidoskärmarna 90 grader. Det är riktigt trevligt att ha skärmar som sas är textorienterade, det har jag saknat ibland sen jag körde Mac. Rätt många saker (mail, pdf, surf etc) gör sig faktiskt imo mycket bättre i stående format så att bara kunna slänga ut ett sånt fönster på sen sidoskärm och maximera det är himla smutt. 🙂

Det här trodde jag, i min enfald, skulle ta en halv dag. Det var igår jag trodde det. Det tog hela dan igår och det mesta av idag så med parley i helgen och allt så har jag inte alls fått mycket gjort på sistone och min todolista har växt, ehm, lavinartat. Nu måste jag dessutom dra in alla program jag vant mig vid att ha, typ thunderbird, emacs, utvecklingsverktyg etc som plötsligt saknas, så jag är lite eeeeefter. Gah.

Datorer. Näst efter jurister är de civilisationens värsta förbannelse.

Den där känslan att nästan, men inte riktigt, begripa vad fan man håller på med…

Ponera följande:

Du har en kund som utvecklar en produkt. Denna kund sitter på en annan kontinent, de har anlitat dig för att utveckla mjukvaran till den MCU som sitter på kretskortet, det finns en irriterande jobbig deadline som kommer krypande och skiten bara FUNKAR inte. Eftersom deadlinen sakta kommer allt närmare så finns det inte riktigt tid att skeppa över ett kort, dessutom är nyttan av det begränsad eftersom det är ohyggligt svårt att utveckla på det kortet eftersom den MCU som sitter på kortet är så liten att det är svårt att lägga in vettigt debugstöd. Så du bygger en mockup för att utveckla på och när du ändå är igång tar du en rätt så mycket större MCU så att det finns gott om plats att lägga in tester och ha sig, helt enkelt för att det blir enklare så. Eller, ja, i teorin i alla fall.

Du utvecklar, sliter, justerar och allting fungerar utmärkt och stolt skickar du över programmet bara för att få veta att det funkar över huvud taget inte alls där borta på den andra kontinenten (ibland ger MCUn livstecken ifrån sig, men de är komplett stokastiska och ger inga ledtrådar) och eftersom det inte finns någon programmerare därborta är det näst intill omöjligt att lista ut vad som går fel. Alla elektriska signaler du ber dem mäta stämmer och det borde funka, men nånting gör att det lik förbannat inte riktigt faller på plats, så att säga. Det finns ju den där uppenbara skillnaden att den MCU du jobbar på visserligen är snarlik men det finns ändå vissa skillnader. Det är då den dyker upp, den där lilla naggande känslan att det förmodligen, troligen är det som gör att nånting inte funkar som det ska trots att koden är skriven samt dubbel- och trippelcheckad för att den ska klara av att ta hand om de där skillnaderna.

För det mesta är det kul och utmanande, men just i tankeprocessens ”vargatimme”, när man bara anar problemets vidd och art men inte riktigt har kopplat en dubbel Nelson på det, just den tidpunkten kan vara oerhört frustrerande. Dvs precis som nu. Man vet att det enda som krävs för att man ska lösa problemet är tid, det är svårt att säga exakt hur mycket tid det kommer ta, plötsligt kommer man bara inse vad det är som strular och likt Professor Balthazar så får man en snilleblixt, studsar bort till sin mackapär och bara fixar det. Just like that.

 

That’s what I do, jag utvecklar mjukvara för och löser problem i hårdvara jag ofta inte ens har sett.

Det är en utmaning. Har du en utmaning får du gärna höra av dig.