Basic personligt

Daniel Brahneborgs blogg

Generation 64

Även om jag själv använde en ABC 80 och en Spectravideo 328, kändes det naturligt att förbeställa boken “Generation 64” när jag hörde talas om den, eftersom det ändå fanns många Commodore 64 i min omgivning. Ganska tidigt i texten dyker just ABC 80 upp som en av de maskiner som beredde väg för C64, vilket var kul att se.

Pedagogiskt och fint börjar boken med en ordlista. Redan där märks det att författaren vet vad han pratar om. Urvalet är bra, och beskrivningarna både korrekta och relevanta. Inget “modermodemet, det som är själva hjärtat i hårddisken”-trams.

Boken är därefter framför allt en samling personporträtt av mer och mindre kända människor, hur de kom i kontakt med C64 och vad de gjorde med den. Många igenkännande skratt blir det, minst sagt. Som det där att sitta med tidningar och rad för rad skriva av programkod.

Några av kommentarerna i de här porträtten sticker ut lite extra. Framför allt är det många som nämner kunskapstörst, olydighet och viljan att hitta och övervinna maskinens gränser. De kunde utforska, experimentera och lära av varandra, dessutom utan minsta risk att något skulle gå sönder. En reset-knapp senare så var ju allting återställt. Hand i hand med det följer att den här världen är en ren meritokrati. Gör du bra grejer, får du ökad självkänsla och stiger i aktning hos andra. Ålder, kön, utbildning, bostadsort osv, är irrelevant. Hårt men rättvist, på något bra sätt.

Även på andra sätt lärde sig folk saker som kom till nytta senare i livet. De som drog nytta av att floppydrivern 1541 hade en egen cpu och minne lärde sig parallell programmering, och de som var med i grupper för att knäcka spel och göra demos, lärde sig att arbeta i team. De som börjar med att rita grafik pixel för pixel, får förmodligen en annan förståelse och känsla för sådant än om man börjar med en modern version av Photoshop. Ägnar man flera år åt att analysera cpu-cykler i handjagad maskinkod, får man ju alldeles uppenbart en annan känsla för prestanda och skalbarhet än om man börjar med Lisp.

Ja, jag har sedan länge lite extra respekt för personer som ägnat dagar och nätter, i vissa fall innan de knappt var tonåringar, till att kartlägga och lära sig det regelverk som en sådan här maskin representerar, och sedan ännu fler dagar och nätter åt att hitta sätt att utnyttja dess styrkor och hitta workarounds för dess svagheter. Jag gillar den nivån på passion och viljestyrka. Visserligen har jag inga siffror på det, men jag har en bestämd känsla av att de som låg långt fram här, även har en bra position i samhället som vuxna.

Bokens formgivning är riktigt snygg, och författarens kärlek och respekt för C64 går inte att ta miste på. Nostalgifaktorn är ibland enorm. Tänk filmen “Radio Days”, ungefär. Plus att den handlar om folk som var mer eller mindre som mig själv under mina tonår.

Det som ju kan vara värt att fundera på är vad det finns för motsvarande miljöer för dagens barn och ungdomar, det kommer ju behövas bra programmerare även i framtiden.

September 28th, 2014 Posted by Daniel Brahneborg | blogg | 5 comments

Kundanpassningar

Kund: Vi vill ha en ny funktion.

Vi: Ok, vilken version kör ni?

Kund: 5.4.

Vi: Varsågod, här är en uppdaterad 5.4 med er nya funktion.

Kund: Funktionen fungerar inte.

Vi: *funderar lite* Vad säger programmet att den är för version?

Kund: 5.5, som vi laddade ner från er för ett år sedan.

Dafuq? Hade de glömt sitt morgonkaffe idag?

September 24th, 2014 Posted by Daniel Brahneborg | blogg | no comments

Min egen valkompass

Om det nu skulle bli nyval så småningom, tänkte jag hjälpa till med en egen liten valkompass.

Är du nazist? Rösta på SD.

Äter du kattungar till frukost som du betalt med pengar du stulit från hederliga arbetare? Rösta på M.

Tycker du svenska skolan är bäst i världen, och ska bli ännu bästare? Rösta på FP.

Är du bonde eller bor runt Stureplan? Rösta på C.

Vill du att kulturarbetare ska svälta ihjäl? Rösta på PP.

Vill du ha högre bidrag? Rösta på S.

Vill du inte att jorden ska gå under så att alla dör av svält inom ett par decennier? Rösta på MP.

Är du kommunist och vill förbjuda privat ägande? Rösta på V.

Hatar du män och vill att alla kvinnor ska få det bättre på alla sätt och vis? Rösta på Fi.

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

September 15th, 2014 Posted by Daniel Brahneborg | blogg | no comments

Podcasten @Kodsnack om trådar och lås

Jag har lyssnat på podcasten Kodsnack ett tag, och kom idag fram till avsnittet om trådar. De gnäller i början en del om att i C så är det inte förutsägbart i vilken ordning saker och ting händer, vilket när det handlar om multitrådning skulle vara synnerligen dåligt. Det gjorde mig lite förvirrad, för det är ingenting som jag någonsin har stött på. Detta trots drygt 10 (eller är det 12 nu?) år i precis den världen. Vårt SMS-program är skrivet i ren C, kör multitrådning via Posix-api’et, och har i produktion flera hundra, ibland ett par tusen trådar igång samtidigt. Alla trådar både skriver och läser. Programmet körs i Linux, 32- och 64-bit, och Solaris, både för X86 och Sparc. Alla lås funkar. Alla buggar som har sett ut som att saker inte blir låsta i rätt ordning, har berott på andra saker. Pekaren till själva låset har varit NULL, det fanns andra trådar som missade att ta rätt lås, olika trådar tog olika lås, och allt vad det nu har varit. Men låsen i sig har alltid funkat. Något annat vore inte acceptabelt, och skulle göra all multitrådning omöjlig.

De har helt rätt i att det är närapå omöjligt att debugga kraschar. I Unix kan man alltid få en core-fil när ett program kraschar, så man såg vad det höll på med när det dog. Har man tur så är det någon null-pekare som man försöker följa, men har man fått ett race condition där datat helt enkelt har blivit överskrivet och gått sönder, är de nästan helt värdelösa. Ibland kan man få en hint till vilka moduler som kan tänkas vara inblandade, men det är ingenting som går att lita på.

Som jag skrev om i våras, så krävs lite fingertoppskänsla för att använda rätt typ av lås. Det är här mitt förtroende för högnivålösningar går sönder. Om de ska vara säkra måste de vara defensiva, och tar därmed onödigt starka lås. Visst, det blir enklare att programmera med, men jag är skeptisk till att man kan behålla prestandan. Har man otur får man ett globalt lås på halsen, och då kan man få en skillnad på flera tiopotenser.

De tar upp det viktiga med ägarskap av minne, någonting jag tror att jag inte riktigt insåg innan mina “const”-projekt förut. Data som kommer “const”-markerat har man absolut inte ägarskap till, och svaret på frågan huruvida man kan spara en egen pekare till det, för att inte tala om huruvida man kan släppa det, blir självklar: Nej.

Trådpoolar är absolut en bra idé. För många år sedan fick jag tipset att se trådar som bilar. Det går mycket snabbare att ringa efter en taxi när man ska någonstans, än att köpa en bil, åka dit man ska, och sedan sälja bilen efteråt. Ännu snabbare är det så klart med en privatchaufför med egen bil, om man nu behöver göra samma typ av resa regelbundet. Är uppgiften tämligen kort och avgränsad, som t.ex. att köra en SQL-fråga, blir det både effektivt och med minimal risk för race. “Kör den här SQL’en,” – “Ok, här är resultatet.” Just för databasfrågor är de förvisso nu utbytta mot en connectionpool istället, men ändå. Det visar bara på vikten av att välja rätt verktyg i varje situation. Eller snarare, vikten av att faktiskt kunna välja.

September 3rd, 2014 Posted by Daniel Brahneborg | blogg | no comments

|