Basic personligt

Daniel Brahneborgs blogg

Datadriven kod

Det finns en bunt kod som har stört mig ett tag. Det är ett par funktioner som plockar ut enskilda fält från mottaget data, ungefär som att få ett personnummer, och därifrån plocka ut födelsedatumet, skiljetecknet, löpnumret och checksiffran. De olika fälten är numrerade, så blir de enklare att hålla ordning på. De olika funktionerna plockar ut olika grupper med fält.

Koden såg ut ungefär som nedan. Ibland med 1-2 rader till. Varje sådan där grupp med kod repeterades sedan för varje fält, där det enda som ändrades var just fältnumret.

rc = get_field(diverse parametrar, bland annat fältnumret);
if (rc != OK) return rc;

Om indatat tar slut, eller om det är något fel på det (till exempel att det kommer en bokstav när man förväntar sig enbart siffror), returnerar get_field() något annat än OK, varvid det hela avbryts. Den anropande funktionen kan då skicka tillbaka lämplig felkod, eller vad som nu behövs göras.

Och visst, det hela funkar. Dessutom är det minimalt med administrativ kod runt omkring, så det går tämligen snabbt.

Tyvärr så innebär den här konstruktionen att det blir ganska jobbigt att ändra något i anropet till get_field(), eftersom det skulle kräva ändringar på uppåt 100 ställen. Mängden kod gör det också nästan omöjligt att upptäcka misstag, om till exempel en sådan där if-sats plötsligt skulle försvinna.

Istället används nu ett par olika listor med fältnummer, en lista för varje typ av data som ska hanteras. En generell funktion gör anropet till get_field() och vad som mer ska göras. Framför allt syns det nu mycket tydligare vilket data som förväntas, eftersom man bara behöver titta på en lista med fältnummer istället för massor med kod som är full med upprepningar.

Prestandamässigt är det också ett steg i rätt riktning, om än kanske inte så mycket. Det är mindre mängd kod, vilket gör att en större del av applikationen kan ligga i cpu’ns cache. Dessutom får man nu en väldigt liten loop istället för en lång serie med instruktioner, vilket gör att koden kan ligga kvar i den pyttelilla turbosnabba cachen, om det nu finns någon sådan. Det kanske gör större skillnad i språk som Java, som då kan hotspot-optimera den här biten, eller vad de nu gör nuförtiden. Inget av det är kanske ens mätbart var för sig, men med tillräckligt många sådana här småförbättringar märks det till slut skillnad.

För att skriva om de där grupperna med kod genom att ta bort allting utom just fältnumret, använde jag självklart Vims macrofunktionalitet: “q bokstav gör-ändringen-och-gå-till-nästa-ställe q” för att spela in, och sedan “@bokstav@@@@@…” för att ändra en grupp i taget. Att göra det manuellt fanns inte på kartan.

Det här visar också på en av mina gamla käpphästar, den om generell kod. En generell funktion på fem-tio rader (de två-fyra raderna från originalkoden plus loopen runt listan) är och förblir enklare att skriva, och framför allt att läsa och debugga, än hundratals mer specifika rader. Det är bara en fråga om att lägga generaliteten på rätt nivå, och utnyttja de tillfällen där flera funktioner skiljer sig ovanligt lite.

February 18th, 2014 Posted by Daniel Brahneborg | blogg | no comments

Amazons fina leveranser

Men alltså, Amazon är ju helt fantastiska.

Jag beställer en CD från UK. Den skickas med DHL, till min hemadress. De gör ett leveransförsök till en fucking hemadress mitt på dagen, vilket ju inte går så bra. DHL hör aldrig av sig. Nästa gång jag hör något från Amazon är någon dag senare, då CD’n är tillbaka i UK, och att jag då ska få tillbaka mina pengar. Annars hade de ju kunnat ringa mig eller nåt, gjort ett nytt leveransförsök till mitt jobb, eller så hade jag kunnat jobba hemifrån på förmiddagen, osv. Hade de ringt innan de gjorde första försöket, hade det inte ens kostat någonting extra. Det finns massor med företag i området som lämnar ut paket åt både posten, fucking DHL själva, Schenker, och allt vad det är. Det är liksom inte ett problem att lämna paketet inom gångavstånd från min bostad, så jag kan hämta den när jag själv har tid. Men nej då, det är tydligen enklare att skicka tillbaka det till en annan tidszon. Bra tänkt.

Jag lägger en ny beställning, men sätter den här gången mitt jobb som mottagaradress. Om de ska försöka leverera mitt på dagen, är sannolikheten lite högre att jag är där än hemma. Enligt deras “status på din order”-sida så skickades det den här gången via “Post DK”, eftersom skivan den här gången tydligen skickades från Danmark istället. Fullt logiskt. Nu fick jag en länk till en sida som visade när paketet gick iväg, och att det i morse hade kommit till Segeltorp. Splendid. Leverans idag, kanske?

Så sitter jag i godan ro vid min dator, hackar min kod och äter min choklad, varpå jag får ett sms. Titta, jag har ett paket att hämta ut på Daglivs, det paketutlämningsställe som ligger närmast jobbet. Från Amazon. Undrar vad det kan vara.

Such logistik. Very psykbryt.

February 18th, 2014 Posted by Daniel Brahneborg | blogg | one comment

Val

Nu när det är superdupernakendödschocksvalår, så kan vi väl fira det tillsammans genom att skilja på orden “val” och “alternativ”?

Ska man välja mellan två saker, så har man ETT VAL. I detta val, så har man två ALTERNATIV.

Nej, man har inte två val. Man har ett.

Se där, det var väl inte så svårt?

February 13th, 2014 Posted by Daniel Brahneborg | blogg | no comments

Dåliga TV-serier

Vad tusan är det med alla nya tv-serier numera? Patetiskt skådespeleri, krystade och konstiga plots, karaktärer som inte engagerar för fem öre, serier som försöker framstå som action, men mest bara består av folk som står rätt upp och ned och pratar, pinsam “skratta åt”-humor, förutsägbara skämt och twists, osv. Gärna kryddat med lite misandri på toppen, dessutom.

Har alla manusförfattare gått ut i strejk nu igen, eller vad är det som har hänt?

February 9th, 2014 Posted by Daniel Brahneborg | blogg | 2 comments

Standardavvikelse

För länge sedan argumenterade jag för att även en liten skillnad i genomsnitt för mäns och kvinnors respektive egenskap kunde få väldigt stora effekter längst ut på kanterna. Inte förrän ganska nyligen insåg jag att standardavvikelsen, dvs bredden på den där normalfördelningskurvan, kanske har en ännu större effekt. Ju längre ut man kommer, desto större blir ju då skillnaden mellan kurvorna. Att vissa egenskaper då får en enorm snedfördelning mellan könen, blir då inget mer än en självklar och naturlig bieffekt.

February 8th, 2014 Posted by Daniel Brahneborg | blogg | no comments

|