Archive for the ‘Nörderier’ Category

Fantastisk filmfestival 2016

december 11, 2016

Även i år besökte jag Fantastisk Filmfestival i Lund för att koppla av med en uppsjö av genrefilmer. I år såg jag nog färre långfilmer än tidigare år men vägde upp det hela med att delta i Fantastisk Filmquiz och att se gäng kortfilmspaket.

  • HeadshotHeadshot är en smutsig actionfylld film från Indonesien. Huvud personen flyter upp på en strand med en kula i huvudet och inget minne. Efter en lång konvalescens kan han lämna sjukhuset men hans förflutna kommer ikapp honom och hotar de nya vänner han skaffat sig. En okej action-thriller men inte mycket mer än så.
  • Bieffekterna – En svensk biohacking-film. Jag vill gilla den här mer än jag faktiskt gör. Efter att Julias pojkvän Erik diagnostiserats med cancer tvingas Julia och Rebecka att ta sitt forskningsarbete, med att få celler att åldras långsammare, bortom de flesta moraliska gränserna. Det får bieffekter.
  • Egomaniac – Att vara regissör med förkärlek till genrefilm och dessutom kvinna visar sig vara…besvärligt. Den ständiga kampen mot finansiärer, skådespelare och ett manus som hela tiden glider iväg från originalidéen…
  • Kaijyu Mono – Ett jättemonster attackerar Japan! Som tur är kan man med hjälp av kemikalier sätta en jättebrottare att slåss mot detta monster. Filmen innehåller utöver gigantiska brottare, spioner, cosplay-professorer och rätt dåliga effekter, vem vill inte se sådant?
  • Diverge – En jättebra film! Mänskligheten är i spillror, ett virus har decimerat jordens befolkning och civilisationen har fallit. En man försöker skydda sin sjuka fru från vildmarkens faror medan han jagar efter botemedlet. Det visar sig dock snabbt att andra har egna funderingar på hur man kan råda bot på farsoten som härjar. Filmen påminner en aning om De tolv apornas armé (jag har inte sett den sen 90-talet så jag kan mycket väl ha fel).
  • Hentai Kamen 2 – En ganska fånig film, men halv-rolig. Filmen är svår att beskriva så jag låter bli.
  • This Papier-Mâché Boulder is Actually Really Heavy – En mycket charmig, men en aning lång, hyllning till 50-, 60- och 70-talets science fiction. Under en filmvisning på ett konvent sugs tre killar in i filmens värld. De har alla olika inställningar till science fiction, en är nörd-arketypen, och de två andra är inte riktigt intresserade. tillsammans måste de slåss mot ondskans makter genom en ström av scener som alla är bekanta.
Introduktion av Kaijyu Mono

Introduktion av Kaijyu Mono, tokyo förstörs av en hummer, kan ingen göra något?!

Av de kortfilmer jag såg var nog Sputnik den jag gillade mest. En Kosmonaut råkar ut för missöde och måste se till att kapseln brinner upp i atmosfären för att dölja misslyckandet från omvärlden. Under de få varv han har att leva får han kontakt med en flicka från USA som leker med sin pappas radioutrustning.

Stort tack till filmfestivalens besättning och volontärer, ni är fantastiska allihopa!

En ny nivå av nördighet

november 11, 2016

Efter att ha lagt alla (500 stycken) Dominion-kort i plastfickor (nördighetsnivå: hög) passade de längre spellådans fack. Detta ledde till en väldig oreda. Dock hittade jag en insats till kartongen på the broken token anpassat för kort i plastfickor. (nördighetsnivå: extremt hög)

 

dominion1

dominion2

dominion3

dominion4

Efter en del konstruktion och flygande träflisor fick alla kort plats i lådan på ett behagligt sätt. Satsen var dock inte enbart till Dominion så det finns inte ett fack för varje korttyp utan vissa får dela fack. Detta är inget större problem och i det stora hela är jag nöjd med lösningen. (Definitivt bättre än att ha högar liggandes huller om buller i en kartong)

 

(Skriva ett blogginlägg om detta, nördighetsnivå utanför skalan)

Eudyptula-utmaningen

januari 31, 2016

Who is behind this?

A set of convoluted shell scripts that are slow to anger and impossible to debug.

I slutet av november fick jag höra om Eudyptula-utmaningen, och har sedan dess försökt beta av de uppgifter som har tickat in över e-post.

Den stora utmaningen från början var att konfigurera e-posten korrekt. Html-formaterade e-postmeddelanden är förbjudna och gmails webmail rekommenderas inte. Det slutade med att jag installerade Mutt, kommandoradsbaserad e-postklient. (Bitvis besvärlig men fullt fungerande.)

Efter det lilla skriptet hade godkänt min förfrågan om att deltaga började uppgifterna trilla in. Jag kan inte gå in i detaljer om uppgifterna eftersom det skulle bryta mot reglerna. Lite svävande kan jag säga att jag hitintills har genomfört fyra uppgifter av varierande slag. Jag har fått bygga en enkel modul och kompilera min egen kärna utifrån Linus git-repository. Jag har blivit tvungen att läsa lång torr dokumentation och jag har fått söka på nätet.

Jag har inte alltid lämnat in en acceptabel lösning på första försöket utan fått kritik och ledtrådar för att kunna fortsätta arbetet. Kritiken kommer alltid på ett bra sätt som inte fått mig att känna mig dum utan endast pekar ut knasigheter eller brister. Hela utmaningen är väldigt rolig och trots det lugna tempot i början lär jag mig mer än jag trodde.

Det som är bitvis problematiskt är att ibland tar det tid innan feedback lämnas eller att en korrekt lösning godkänns. Uppgift fem lämnades in den 15:e Januari och jag väntar fortfarande med spänning på att få reda på ifall jag klarat den eller inte.

Remember, this is not a race, there is no rush, if tasks take a while to
be graded, enjoy the time to go do something else.  There is a lot more
in life other than Linux kernel programming.

… Ett litet skript med svar på allt …

C64-programmering

maj 26, 2015

För ett par veckor sedan hittade jag cc65, en c kompilator för 6502-processorn. 6502-chip och dess varianter hittas i många retro-datorer däribland Commodores C64 (MOS6510). Tillsammans med boken Programming the Commodore 64, ett antal hjälpsamma hemsidor kom jag snabbt igång med ett litet hello world-program.

Installationen är relativt enkel:

Klona git-arkivet

git checkout https://github.com/cc65/cc65.git

gå till katalogen och bygg kompilatorn

cd cc65
make

Ifall man vill kan man installera den i systemet

sudo make install prefix=/usr/local/

När kompilatorn är installerad är det bara att börja programmera

#include 

int main(void)
{
    printf("Hello World!");
    return 0;
}

Programmet kompileras sedan enklast med

cl65 -t c64 hello.c -o hello.prg

När programmet är kompilerat kan det föras över till en fysisk c64 (exempelvis med uberCasette eller 1541 Ultimate). Dock har jag inte kommit så långt ännu utan kör mina program i vice.

Hello World

När man lär sig mer om c64ans olika minnes regioner kan man börja med diverse enkla effekter på texten:

Text som blinkar i regnbågens färger är inte alls lika imponerande som stillbild.

Text som blinkar i regnbågens färger är inte alls lika imponerande som stillbild.

Se koden här, den är kort och ganska enkel men har ett par rader assembler.

Nästa steg blir att utforska bitmap mode, avrottshantering och kanske lite sköna vågformer i SID-chippet.

Pycon Sweden 2015

maj 16, 2015

I tisdags gick den numera årliga python konferensen pycon sweden av stapeln. Likt förra året var det en fantastiskt trevlig upplevelse.

pyconsweden

Första dagen

En stor del av föredragen behandlade data-analys och datorinlärning. Mycket av detta gick mig över huvudet men intressant att få lite insikt i vilka möjligheter det moderna samhället ger till att samla och analysera data. Också intressant var att gå igenom hur man tränar upp ett neuralt nätverk för bildanalys. Föredragen var väldigt tekniska och eftersom de var relativt korta var de rätt övergripande och gick inte jättedjupt.

Ett annat föredrag som jag tyckte var intressant var föredraget om U2F, en standard för tvåfaktor-autentisering. Dain Nilsson som stod för föredraget arbetar för Yubico och därför var särskild fokus på deras lösning YubiKey. YubiKey är en usb-dongel som agerar som ena faktorn i autentiseringen och verkar vara mycket smidig.

Kvällen

Efter sista föredraget bjöds det på en gratis drink i baren och folk minglade. Jag pratade med diverse människor, en amerikan, en finländare som jobbade med databaser och ett helt gäng andra. Vi åt middag ett gäng och hamnade i slutändan på Oliver Twist.

Dag Två

Andra dagen inleddes med ett föredrag av Kate Heddleston om etik och moral. Vad är vårt ansvar som programmerare när tekniken vi bygger används för hatbrott, förföljelse, riktad reklam, etc? Inga raka svar gavs men det är frågor som måste lyftas fram och diskuteras öppet.

I övrigt var andra dagen lite mer blandad än den första. Ett av de mer intressanta föredragen handlade om Python i inbyggda system. Presentatören använde python i produktionskod men listade mest problem användningen av python resulterade i. Generellt kändes det ganska negativt.

Konferensens sista föredrag var Python for Humans, en diskussion om hur pythonmoduler bör skrivas. Föredraget grundades i PEP20, som är språkets riktlinje men som frångåtts i mångt och mycket. Tanken är att det ska finnas ett (och gärna endast ett) intuitivt, lätt sätt att åstadkomma något. Mycket tankeväckande och nästan inspirerande.

Föredragen spelades in och kommer inom kort läggas ut på hemsidan.

Batteribyte eller ”En studie i våld”

mars 9, 2015

Min eeePC (1005 ha) har sedan ett par månader haft problem att hålla tiden, utöver detta så fick jag ett meddelande om att inga Bios-inställningar var gjorda och borde göras (tryck F1 för att gå till bios inställningarna, Tryck F2 för att gå vidare med default-inställningar) vid varje uppstart. En annan effekt var att ifall strömsladden kopplades i medan datorn var avstängd startade den upp.

Det stora problemet var dock att den inte höll tiden eftersom detta allt som oftast resulterade att senaste skrivning i filsystemet låg i framtiden vilket krävde en manuell körning av fsck. Detta tar tid.

I veckan tog jag mig för att prova byta CMOS-batteri för att se ifall det var det som var problemet.

ML1220

Batteriet som krävs är det något udda ML1220 som kan köpas med praktisk kontakt på Ebay. i eeePCn ligger detta batteri nästan, men inte riktigt, underst. För att göra det hela ännu besvärligare verkar eeePCn designad för att sättas ihop men inte för att plockas isär. Jag är osäker på ifall jag hade klurat ut allt ifall jag inte hittat en hygglig guide på nätet.

Mitt största problem var allt våld som krävdes:

  •  Plocka ur batteriet och bänd upp fyra byglar i batteriutrymmet. Våld krävs, men för mycket våld är för mycket och resulterar i katastrof (hemligheten är lagom mängd våld).
  • Stick ner ett smalt verktyg i tangentbordets överkant (vid F1) och bänd upp detta. Lagom våld…
  • Skruva bort alla synliga skruvar och stick in ett smalt verktyg i skarven mellan övre delen och nedre delen av plast höljet. Bänd med mer våld än vad som verkar okej tills överdelen kommit loss överallt utom på ett ställe. Inse att det finns en skruv under en tejpbit. Skruva upp sista skruven och bänd lite till så att överdelen av ytterhöljet lossnar helt.
  • Leta upp CMOS-batteriet och bänd bort blåtands-modulen (tror jag det kan vara) som är tejpat över kontakten.
  • Byt CMOS-batteri och montera ihop datorn igen
  • Inse att det ligger en massa skruvar på skrivbordet som borde varit fastskruvade någonstans inuti det nu helt stängda chassit. Åter till bändandet…
Väl inpackat och fasttejpat

Väl inpackat och fasttejpat

Tiden håller sig än så länge, det verkar varit ett lyckat ingrepp.

 

 

Merry Chipmas

december 22, 2014

God Jul allesammans!

Jag har arbetat färdigt för det här året och lever en tillbakalutad tillvaro med glögg russin och saffranskorpor. Julmusiken har snurrat sedan första advent och börjar bli lite uttjatad.

Merry Chipmas!

Merry Chipmas!

Turligt nog har mikrokollektivet släppt Merry Chipmas 2014, en ny samlingsskiva med julinspirerad chipmusik! Dessa kantiga vågformer sprider en oändlig mängd julstämning till alla med öppet hjärta.

Tidigare års utgåvor finns också för de som får mersmak

tree

God Jul allihopa, ha det fint, drick glögg och umgås med nära och kära!

pickle

september 25, 2014
Dillinlagda gurkor*

Dillinlagda gurkor*

Till mitt lilla spel ville jag lägga in möjligheten att spara och ladda spel och funderade länge på hur man gjorde det på bästa sätt. Jag hittade efter ett tag pickle i pythons standardbibliotek som visade sig vara ett enkelt sätt att hantera detta på.

Det pickle-modulen gör är att serialisera python-objekt till en fil. Med detta menas att pickle omvandlar objektet till en serie bytes som sedan kan skrivas till fil. Man kan jämföra det med att i C dumpa en struct via

typedef struct {
int pos[2];
int size[2];
char name[256];
} data_t

data_t d;
write(file, d, sizeof(d));

Detta fungerar för struct:ar som enbart innehåller data, men innehåller den referenser blir det hela mer komplicerat och kräver särskild implementation. Eftersom python ser allt som objekt, blir Pickle lite mer intelligent och serialiserar all data som lagras i objektet samt alla andra objekt som objektet hänvisar till (rekursivt hela vägen ner till basobjektet object) samt funktionerna (kod är också objekt) som ingår i objektet.

För att spara all data i mitt spelarobjekt räcker det med

pickle.dump(player, open(player.save_slot + "/player.data", 'wb'))

vilket ser ganska enkelt ut, tyvärr finns det komplikationer. När jag försökte detta första gången fick jag följande felmeddelande

TypeError: can’t pickle Surface objects

Detta beror på att objektet måste ha bland andra metoderna __getstate__() och __setstate__() för att läsa ut samtliga objekt i objektet och pygame-objekten saknar detta (åtminstone Surface och Sound och i dessa fall är det nog vettigt att hantera utanför pickle pga. datamängden).

För att gå runt det här problemet måste de felande objekten raderas från listan av objekt som sparas och sedan manuellt återställas när objekten laddas in igen. Detta görs genom att implementera en egen variant av __getstate__() och __setstate__():

def __getstate__(self):
print 'getting state!'
state = dict(self.__dict__)
#remove unpicklables
state = {s:state[s] for s in state if s != pygame.Surface and s != pygame.Sound}
return state

def __setstate__(self, state):
self.__dict__ = state
self.a = animate.animationGroup()
self.restore_unpicklables()

När pickle.dump sparar objektet anropas mitt objekts __getstate__() och innan uppslagsverket med alla objekt returneras plockas alla objekt som inte kan serialiseras bort (här pygame.Surface-objekt och pygame.Sound-objekt). När sedan objektet skall återställas kallar pickle.load()__setstate__() för att återställa objektets interna uppslagsverk anropas funktioner för att återskapa de borttagna objekten.

Det här metoden att hantera sparfiler på har både brister och fördelar men fungerar bra under utvecklingen och tog en halvtimme att skriva ihop. Den stora fördelen var att jag snabbt kunde komma igång och få någonting som fungerar. Den stora nackdelen är att spelarobjektets blir exakt som det var när det sparades och ifall variabler eller nya funktioner tillkommit kommer dessa saknas vilket kan leda till strul. Sedan bör man nämna att picklade objekt är relativt osäkra i och med att allt lagras i ett helt öppet format och inga kontroller genomförs innan datan laddas in.

* Bilden kommer härifrån, rekommenderas för inspiration för heminlagda gurkor!

Kodtäckning i vim

juni 12, 2014

Jag börjar sakta men säkert komma igång med enhet/integrationstest av den kod jag skriver. Det hjälper och är inte allt för besvärligt när man kommit in i tankesättet. Jag använder mig av gtest och lär mig sakta men säkert dess funktioner.

13 Test och allt funkar, men vad säger det?

13 Test och allt funkar, men vad säger det?

Frågan man bör ställa sig är hur mycket av koden som faktiskt körs av mina tester och vilka olika vägar genom funktionerna som testas, dvs vilken kodtäckning har mina test.

gcc inkluderar verktyget gcov för att generera den här typen av information. Efter att ha lagt till kompilatorflaggorna -fprofile-arcs -ftest-coverage genereras gcov-filer när mina tester körs. Och när man sedan kör

gcov [filnamn.c]

får man en kort sammanfattning samt en gcov-fil

File 'filnamn.c'
Lines executed:64.90% of 510
viacode.c:creating 'viacode.c.gcov'

Den skapade *.gcov filen innehåller information om hur många gånger varje kodrad i filen har exekverats. För att gör det smidigare att använda ville jag ha in resultatet i min editor vim. Efter lite googlande hittade jag ett vim-skript som med lite modifieringar resulterade i detta:

" Based on Gautier DI FOLCO's vcov.vim found in
" https://groups.google.com/forum/#!msg/vim_use/tk9sG714b3I/LyMnXOQAqpMJ
"
" Modified by Åke Forslund <ake.forslund@gmail.com>

hi gcovCovered ctermbg=2
hi gcovNotCovered ctermbg=1

function! Setcov(filename)
exe ":sign unplace *"
for line in readfile(a:filename)
let d = split(line, ':')
let c = substitute(d[0], " *", "", "")
let l = substitute(d[1], " *", "", "")
if c >= 100
let c = '*'
endif
if '-' != c && c !~ '#'
exe ":sign define c" . c . " text=" . c . " texthl=gcovCovered"
exe ":sign place " . l . " line=" . l . " name=c" . c . " file=" . expand("%:p")
elseif c =~ '#'
exe ":sign define cd text=# texthl=gcovNotCovered"
exe ":sign place " . l . " line=" . l . " name=cd file=" . expand("%:p")
endif
endfor
endfunction

function! Unsetcov()
exe ":sign unplace *"
endfunction

map <F11> :call Setcov(expand(@%).".gcov")<cr>
map <F12> :call Unsetcov()<cr>

Skriptet finns på github med.

När jag nu trycker på F11 får jag in information om hur många gånger en viss rad anropas, alla rader som inte exekveras överhuvudtaget markeras i rött och rader som inte räknas in markeras i vitt.

gov-data Visualiserat i vim.

gcov-data Visualiserat i vim.

Det fungerar finfint och hjälper mig extremt mycket i mina taffliga försök att skriva relevanta testfall. Ytterligare funktioner kan med all säkerhet vara önskvärt och min plan är att slipa det ytterligare. T.ex hantera en saknad .gcov-fil på ett snyggt sätt.

PyCon Sweden 2014

maj 30, 2014

Tisdag till Onsdag förra veckan gick första upplagan av PyCon Sweden av stapeln och ett par hundra python intresserade människor trängde ihop sig i KTHs Q-hus för att lyssna på föredrag och umgås. Jag var där, lyssnade på intressanta föredrag och pratade med ett gäng intressanta personer.

Administrativt fungerade det mesta bra, finfina luncher och bra info (även om schemat släpptes rätt sent). Inga katastrofer och stämningen var bra. Lunchuppehållen var rätt långa vilket gav tid till att umgås och prata med folk.

Pythonistas på grönbete.

Pythonistas på grönbete.

Föreläsningarna var överlag intressanta och innefattade många olika ämnen, allt ifrån att bygga ett tag-in-system för ett gym till hur kryptografi fungerar på internet och vad svt pejl sysslar med.

Den i särklass bästa föreläsningen var Kenneth Reitz föredrag om den splittring som håller på att ske i Python. Skillnaderna mellan python2 och python3 skapar sprickor i python-gemenskapen. Dels mellan användare av de olika varianterna (min mjukvara kan inte köra på din dator för att du har en äldre version av python), och dels mellan användare och utvecklare (de flesta användare använder fortfarande python2 medan utvecklare är mer intresserade av python 3). Enligt en snabb överslagsräkning är det endast 4.3% av användarna som använder python3. Detta är problematiskt då det lämnar mycket buggar i bibliotek som portats till python3 till och med i standard biblioteket finns det mycket oegentligheter. Lösningen är enkel men svår, vi måste engagera oss. Vi måste göra vad vi kan för att ena vår gemenskap. Stöd python3, stöd python2, ansträng dig, rapportera de buggar du hittar!

På tåget hem reflekterade jag över hur fantastiskt det är med den gemenskap som finns. Alla dessa människor som rest in för att hålla ett föredrag utan att få mer än fri entré till konferensen. Alla dessa smarta människor som tar den tid det krävs för att utbilda och dela kunskap med sådana som mig. Alla dessa människor som har slitit i veckor för att fixa alla luncher, lokaler, scheman och alla andra detaljer som skall klaffa.

Ett stort tack till arrangörerna, föreläsare och deltagare!