Basic personligt

Daniel Brahneborgs blogg

Biff i Lund

Inför ett nära förestående besök i Lund så började jag kolla runt efter bra köttrestauranger, men det var enklare sagt än gjort. Först kollade jag pastan.nu, som faktiskt inte handlar om pasta, men däremot bara om Stockholm. På TripAdvisor fanns bara en köttrestaurang i Lund, Luthra. Den verkar dock vara ersatt med en indisk restaurang sedan ganska länge.

Jag hade frågat på Facebook, men utan resultat. I morse frågade jag @JensRyden på twitter, och då hände det saker. Han bodde dock inte i Lund som jag trodde, men istället skickade @lobbin frågan vidare, vilket även blev retweetat av @techper och @Receptomaten. Jens skickade också frågan vidare, varpå både @PernillaFyhr och @ellanfellan föreslog nya restaurangen MEAT. Sedan spårade diskussionen ur lite grand, men det är ju sånt som händer. Jag var offline under den här tiden, så när jag kom tillbaka och såg flera skärmsidor med mentions om det här så blev jag nästan lite rörd. Fantastiskt.

En liten sökning hittade en artikel i Sydsvenskan, som gav bra vibbar. Jag gillar folk som vill någonting. En närmare titt på menyn avslöjade att de först hade Wagyubiff och sedan mörk chokladmousse. Jag har på något sätt svårt att tänka mig någon restaurang som skulle kunna toppa det.

September 25th, 2011 Posted by Daniel Brahneborg | blogg | 2 comments

Episk löparkarriär

Förra hösten köpte jag ett par joggingskor, inspirerad av allas vår Linda. Det blev dock inte så många pass innan det blev vinter, men ändå. Jag var igång. Det blev vår, och så småningom kom jag ut igen. Ganska korta rundor på några km, men de blev oftast alltid lite längre, och hastigheten gick långsamt uppåt.

Jag nådde ett av årets mål, att springa i en timme. Jag hann 7 km, så att orka 3 till kändes inte som någon stor sak. Whee, heja mig!

Bara någon vecka senare gav mitt ena knä upp, och belönade mig med en vansinning smärta om jag sprang mer än någon km. Att gå var dock inga problem, så jag fick nöja mig med det. Så länge som jag tog det lite lugnt, så några konditionshöjande powerwalks var det aldrig tal om.

Nu i september hade knät slutat värka, så jag vågade mig ut igen. Det fungerade ganska bra. För att ge knät lite mer dämpning köpte jag ett par FiveFingers, som gör att man springer lite mer på framfoten än att dunsa hårt ner på hälen. Jag började försiktigt med bara någon km eller två. Visserligen fick jag träningsvärk utan dess like i vaderna, men det var ju inte så oväntat. Men knät var nästan helt tyst. Strålande.

Efter kanske totalt fyra-fem pass så började nu min häl protestera. Samma som förut, att gå är inget större problem. Minsta lilla joggingsteg och det känns som om någon sticker in en kniv rakt in i foten. Ja, det var årets löpträning det. Lite sur och bitter? Nej, hur menar du nu? Morr.

Jag är glad att jag aldrig anmälde mig till något lopp nu under hösten, för det hade jag ändå inte kunnat vara med på. Framför allt hade Hässelbyloppet varit kul eftersom jag först växte upp där och sedan har bott i området i 15 år som vuxen. Även längre och större lopp skulle vara kul, mest för sakens skull.

Det som gör det hela ännu mer ironiskt är att inte en enda gång under de typ tre år som jag tränade shorinjikempo, var jag borta från något pass på grund av en träningsskada. Blåmärken och någon ond tå eller två ibland, men inget som inte gick över till nästa dag. Men att bara jogga lite grand ger mig upprepade träningspauser på över en månad på grund av smärtor. Är jag ensam om att tycka att det är på gränsen till sjukt?

September 24th, 2011 Posted by Daniel Brahneborg | blogg | 9 comments

En typisk arbetsuppgift

Det är inte alltid så lätt att förklara vad jag jobbar med, mer konkret. Att bara säga “underhåll av en sms gateway” är lite väl abstrakt. Istället tänkte jag nu försöka beskriva uppgiften jag jobbar med just nu. Folk vars videoapparater blinkar 0:00 göre sig icke besvär.

Bakgrund

Vårt program, EMG, kan skicka och ta emot sms och mail på lite olika sätt. Om man tar emot ett meddelande som mail, och ska skicka ut det som sms, finns det två alternativ. Den enkla lösningen är att sätta avsändaren till typ “Tandläkaren”, fast då går det inte att svara. För att mottagaren ska kunna svara, kan EMG plocka en adress från en pool med specialnummer. När svaret sedan kommer till det pool-numret, kan man använda det tillsammans med mottagarens nummer för att se att svaret ska slussas vidare till dentist@example.com. Precis samma princip som IP-trafiken genom en router. Internet svarar till routern, som baserat på portnumret skickar det vidare till rätt dator på insidan. Inget nobelpris här, direkt.

Varje mottagare har därför en lista med vilka nummer i poolen som har använts, och vad den ursprungliga avsändaren hade för adress. Eftersom varje mottagare har sin egen lista, behövs bara en poolstorlek på 10, kanske högst 100 nummer. Fler aktiva dialoger än så har man sällan. Det duger fint med linjära sökningar, eftersom det är så små datamängder. Enkel kod är bättre än komplicerad kod.

Sedan kommer en kund och behöver en pool på 1 miljon nummer. Hoppsan.

De enkla (=lösta) problemen

Att lagra 1 miljon nummer i en lista är inga större problem. Några MB hit eller dit. De är alltid i sekvens, så listan går enkelt att packa om det skulle behövas.

Ofta vill man återanvända samma nummer för samma avsändare till samma mottagare, så när Kalle får meddelande nummer två från sin tandläkare så används samma nummer i poolen som förra gången. I alla fall om det är inom samma aktiva dialog. Det här är ganska lätt fixat med en (hash-)tabell, nycklat på adressparet. När Kalle ska till tandläkaren 5 år senare får han en ny pooladress, men det gör ju ingenting.

Samma sak när det kommer svar som ska mappas tillbaka. Det är inte fler än några miljoner dialoger på gång samtidigt, så en tabell fungerar där också.

Ett svårare problem

Inom den period som räknas som “aktiv”, dvs ett par dagar, kan det gå några miljoner sms till nästan lika många mottagare. Att lagra 1 miljon översättningsposter någon miljon gånger, går självklart inte, och är slöseri med minne. Så hur ska man veta vilket nummer i poolen man ska använda när det kommer ett ny avsändare, om inte Kalle (längre) har sin egna lista med alla 1 miljon nummer, där det står vilka som används och vilka som är lediga?

Att bara plocka “nästa” nummer från poolen går inte, eftersom aktiva dialoger ska hållas levande. Antingen behöver man då en ledig adress, eller den som är äldst. I det senare fallet kapar man helt enkelt det numret, så att svar går till den nya avsändaren. Tough luck.

Dagens uppgift är just den här “hitta nästa adress i poolen”-funktionen. På grund av prestandakraven så får det inte finnas några sökningar av typen “funkar nr 1? nähä, funkar nr 2? nr 3? osv” för fler än kanske 5-10 steg. Detta oavsett om alla adresser är lediga, om bara en del av dem är upptagna, eller alla är upptagna (om man har en liten pool).

Överväxeln

Glömde jag att säga att allting dessutom är multitrådat, dvs att det kan ske dussintals skrivningar och läsningar mot de här listorna samtidigt? Därför måste de se till att de inte pillar i samma data samtidigt, men de får ändå inte låsa hela modulen eftersom all parallellism då försvinner. Det, i sin tur, dödar nämligen prestanda. Tänk en affär där det visserligen finns massor med kassörskor, men där alla använder samma kortläsare. Oacceptabelt.

Så det gäller att hitta rätt datarepresentation, som möjliggör snabbast möjliga algoritmer. Med krav som gör att ingen av de “självklara” lösningarna längre är godkända alternativ, utan där man får leta lite för att hitta vilka saker som kan gå snabbt. Det brukar alltid gå att köpa prestanda med hjälp av mer minne, men när minnet inte räcker så behöver man vara lite listig. Några listor kommer t.ex. alltid kunna vara små, vilket går att utnyttja. I verktygslådan finns arrayer, hashtabeller och självbalanserande avl-träd.

Än så länge har jag faktiskt ingen större aning om hur jag ska vrida och vända på det här datat för att algoritmerna ska uppfylla alla krav. Fortfarande inget man får nobelpris för, men inte heller något man gör på autopilot direkt.

Vi söker för övrigt fortfarande en till C-programmerare, för just den här typen av saker.

September 23rd, 2011 Posted by Daniel Brahneborg | blogg | 4 comments

Small Island Chocolate Fail

Via Groupon fick jag för ett tag sedan köpa ett presentkort på choklad värt 250 kronor, och bara betala 100. Choklad är lite grand en egen budgetpost i min ekonomi, så det lät ju bra. Idag kom jag äntligen dit.

Jag kollar runt, och hittar några intressanta sorter. Bland annat en ren criollo, som är min favoritböna. Under tiden kommer några andra kunder in, visar upp en lapp, och blir då hänvisade till hyllorna på två små väggar. Jag kollar med kassörskan, och jo då, Groupon-saken gällde bara där. Fail nummer 1.

De enda märken jag känner igen på specialhyllorna är sådana som jag inte vet att jag gillar. Eftersom jag dessutom bara äter ren choklad och inte fyllda med nötter och skal och annat trams blir det inte så många kakor kvar. Jag hittar tre, och går till kassan. Nähä, då gällde det bara några av hyllorna på ena väggen, inte ens hela. Fail nummer 2.

Jag frågar om de har någon sort som är ren criollo, men möts mest av ointresse och nonchalans. Hur svårt hade det varit att säga “om du gillar criollo så ska du välja de här, och även om den inte är med i grouponerbjudandet så bör du testa den här sorten”? De hade kunnat få merförsäljning på många hundralappar där. Men icke. Fail nummer 3.

Jag hittar i alla fall en tredje sort, visar upp koderna som jag har sparat i min mobil, och får ett “vi behöver referenskoden också”. Dvs den där tredje siffran, som inte har behövts på några andra ställen. Fail nummer 4.

En liten hemlis när det gäller säkerhet: Koder blir inte säkrare för att de är flera. Det är den totala längden som spelar roll. När de i det här fallet är sammanlagt 15-20 tecken långa, finns det ingen som helst möjlighet att fejka dem. Att dela upp det på tre olika sekvenser, som står på lite olika delar av kupongen, är fullständigt meningslöst. Groupon-puckon.

Till slut ger hon sig i alla fall, skriver upp koderna, och jag kan gå därifrån.

Kommer jag handla via Groupon fler gånger? Nej, inte om det inte är någonting som jag ändå redan har velat ha. Det har varit alldeles för struligt att hitta datum och tider som passar, och ska de börja strula om att det bara gäller yttepyttesmå delar av sortimentet också, så får det fan vara. Det brukar inte vara speciellt många procent av en affärs utbud som jag är intresserad av, och ska de sedan börja köra med delmängder blir det inte så mycket kvar.

Kommer jag handla i den där chokladaffären fler gånger? Nej, inte under några som helst omständigheter. Först en korkad ledning som kör med “bara delar av sortimentet”-trams och sedan personal som saknar kunskap både om choklad och försäljning är mer än jag orkar med.

Nu ska jag tröstäta lite choklad.

September 17th, 2011 Posted by Daniel Brahneborg | blogg | 4 comments

Artikeln om maraton

I ett nummer av “Världens vetenskap” var det en artikel om vad som händer när man springer maraton. Det var två saker där som jag tyckte var anmärkningsvärda.

Först så stod det att efter ungefär 30 km kommer “väggen”. Anledningen till detta var att då tog kroppens glykogenreserver slut, och man började ta energi från fett istället. Under den omställningen fick man ofta ont i huvudet, precis det som händer de första dagarna för de som börjar äta LCHF. Att köra “train low, race high”, dvs träna på lågkolhydratkost och tävla på kolhydrater låter allt mer som en bra idé. Om kroppen redan vet hur den ska plocka energi från fettet så borde problemet med väggen vara ett mindre problem, kan man tycka.

Vidare stod det att efter uppåt 10 km hade man kommit in i lite rytm, och borde då ha en puls på 130-140. Öh, va? Min “jogga  på plan mark”-puls ligger på 160-170, 190-200 i uppförsbackar. Tror jag har en bit kvar innan jag har fått ordning på min kondition.

September 10th, 2011 Posted by Daniel Brahneborg | blogg | 2 comments

Lite LCHF-teori

Nej, det börjar bli läge för lite LCHF-teori. Saker som vad det är tänkt att kosten ska göra, varför, och hur.

När man äter alla former av kolhydrater (ber om ursäkt för grammatiken där), omvandlas dessa till slut till socker, och blodsockret höjs. Att långvarigt ha ett högt blodsocker värde är väldigt farligt (det är därför ickemedicinerade diabetiker blir blinda, får amputera kroppsdelar osv), så kroppen skickar ut insulin för att trycka in det i fettcellerna. Det kan ta 2-3 timmar, varpå blodsockret sjunker. Ett sjunkande blodsocker upplevs som hunger, varvid man äter igen. Helt i onödan, man kan nämligen både ha ett ganska högt blodsocker, och egentligen inte vara speciellt hungrig. Om man är diabetiker måste man tillföra det här insulinet manuellt, men principen är densamma.

Så, det finns två problem. Dels är ett sjunkande blodsocker inte speciellt kul, och för diabetiker är dessutom ett höjt blodsocker dåligt. Den uppenbara lösningen blir ju då att inte äta någonting som höjer blodsockret, dvs alla former av kolhydrater. Då återstår protein och fett. Att äta extra mycket protein är både svårt och såvitt jag har förstått inte alltför nyttigt i längden. Dessutom är det dyrt. Återstår fett. Fett behövs för att kroppen ska fungera som den ska, innehåller nyttiga vitaminer, ger långvarig mättnad, och en massa annat. Bra animaliska fetter ger även bättre blodvärden. Gary Taubes har skrivit om flera studier där folk fick äta 500-1000 kalorier mer än de behövde, fast i rent fett. De gick inte upp ändå, så det verkar finnas ganska stora marginaler.

Beroende på hur känslig man är, ungefär som om diabetes inte är en boolean utan ett decimaltal mellan 0 och 1, så reagerar kroppen olika snabbt och mycket på olika sorters kolhydrater. Gröna blad funkar alltid, liksom broccoli och blomkål. Tomater funkar för vissa. Med “funkar” menar jag alltså att det inte höjer blodsockret så mycket att man får en kännbar dipp några timmar senare. Det ska inte heller frisätta så mycket insulin att energin i fettcellerna blir inlåst, för då verkar även det fett man äter vara svårare att bli av med. Det är bara att prova sig fram.

Som bieffekt blir kroppen bättre på att plocka energi från de fettlager man har, och hjärnan ställer om sig att drivas på ketoner. Det är om något, enbart positivt, eftersom fettlagren inte tar slut i första taget. Tillståndet kallas ketos, och verkar uppskattas av de flesta.

Det som gör det hela lite problematiskt, är människor har ett väldigt starkt sockerbehov. När det enda söta som fanns var några bär under en väldigt kort period av året, var det ett bra sätt att garantera att vi fick i oss bra och enkel näring. Även om strikt LCHF gör att man blir känsligare för söta saker och därmed nöjer sig med mycket mindre mängder, verkar suget aldrig riktigt försvinna. De små muffins som Espresso House har kan jag själv inte äta, för känns som att äta rent socker, eventuellt uppblandat med extra fruktos och sirap. Fullständigt vidrigt.

Därav de LCHF-recept på efterrätter och kakor som Linda irriterade sig på häromdagen. Man får lite sötsmak, men inte så man kräks. Sötar man med sukrin eller agavesirap får man ingen blodsockerhöjning alls, vilket är ännu bättre, eftersom man då slipper dippen några timmar senare.

Tyvärr är sockerbehovet hos mig periodvis lite för starkt, så jag äter diverse saker som jag inte borde, även om jag vet att jag efteråt kommer ha en mage som försöker vända sig ut och in, och ett huvud som gör att jag helst vill amputera allting söder om hårfästet. Jag har fått lära mig att hålla nere mängderna och tillfällena, helt enkelt. Det är ett lågt pris för att i övrigt ha friheten att äta när man har tid och lust.

September 8th, 2011 Posted by Daniel Brahneborg | blogg | 19 comments

Skor

I juni lyckades jag ju nå ett av årets löparmål, att springa kontinuerligt i en timme. Veckorna efter det blev dock bara kortare sträckor, och i slutet av juli gav mitt ena knä upp. Jag fixade att springa 1 km, men sedan var det obönhörligen stopp. Att gå var inga större problem, men den extra belastningen vid jogg fanns verkligen inte på kartan.

Så knät fick vila under augusti, medan jag googlade runt på nätet efter löptekniker, och pratade med lite erfaret folk i ämnet. Ganska snabbt dök ju FiveFingers-skor upp. Eftersom det är så tunn sula så kan man inte sätta i hälen först, utan måste hålla sig på främre delen av foten. Det ger lite mer svikt, och är snällare mot knäna. Det blev aldrig av att jag faktiskt köpte några, däremot.

Häromdagen såg jag en video med Usain Bolt, och då slog det mig att man ju borde kunna jogga i normala skor på samma sätt, utan att hela tiden landa på hälen. Så, igår begav jag mig ut på en liten 3 km-runda. Samma tempo som förut, runt 7 min/km, fast nu utan hälar. Knät muttrade lite, men jag klarade mig hela vägen hem. Senare på kvällen muttrade knät lite till, men inte alls som förut. Najs. Dessutom var det intressant att behöva vara så pass medveten hela tiden, och inte bara tugga på som vanligt.

Idag vaknade jag till träningsvärk av guds nåde, i varenda muskel söder om knät, både på framsidan och baksidan av benet. Hoppsan, det krävde visst lite ansträngning det där.

Jag kollade runt efter FiveFingersskor i sportaffärerna igår, men det var nästan slut överallt. Tydligen fanns inte bara en modell, utan tre. Storlekarna var helt puckade, så den som satt bäst var en dammodell storlek 39, när jag har 40-41 i vanliga fall.

Jag googlade lite idag, och upptäckte att det tydligen finns 10 olika modeller, några i “extra bred” version. De som verkar mest intressanta är Speed (med snörning) och Flow Trek (extra varma). De senare skulle nog vara bäst nu, så kan jag ha dem under hösten.

De modeller jag provade igår satt så pass olika att jag ju helst skulle vilja prova båda modellerna i flera olika storlekar. Visserligen kan man skicka tillbaka skorna om det är fel storlek, men det gör det ju omöjligt att testa två storlekar parallellt. Det kanske är bättre att vänta tills i vår, när utbudet i affärerna är bättre igen? De var verkligen jättemysiga, den stund jag provade dem igår.

September 4th, 2011 Posted by Daniel Brahneborg | blogg | 3 comments

|