Archive for juni, 2012

pylint

juni 30, 2012

Pylint är ett verktyg för att utföra statiska tester av python-kod. Statiska tester innebär att koden läses igenom manuellt och kontrolleras mot en standard. I grund-konfigurationen testas koden mot PEP8 men regler kan läggas till och tas bort som det passar.

Jag testade pylint på mitt parallax-projekt och efter första körningen fick jag massor av varningar, brott mot standarden samt ett regelrätt fel:

Messages by category
--------------------

+-----------+-------+---------+-----------+
|type       |number |previous |difference |
+===========+=======+=========+===========+
|convention |21     |21       |=          |
+-----------+-------+---------+-----------+
|refactor   |1      |1        |=          |
+-----------+-------+---------+-----------+
|warning    |293    |293      |=          |
+-----------+-------+---------+-----------+
|error      |1      |1        |=          |
+-----------+-------+---------+-----------+

Detta ledde till en slutpoäng på -81.43/10, uppenbarligen har jag lite att göra ifall standarden ska uppfyllas.

En av de enkla varningarna var

W: 49: Found indentation with tabs instead of spaces

men detta löses rätt snabbt genom en snabb sök-och-ersätt.

Något som såg besvärligt ut var den långa raddan varningar om icke-använda importerade objekt

[...]
W: 22: Unused import K_HOME from wildcard import
W: 22: Unused import GL_ACCUM_RED_SIZE from wildcard import
W: 22: Unused import BLEND_RGB_MIN from wildcard import
W: 22: Unused import K_RIGHT from wildcard import
W: 22: Unused import GL_RED_SIZE from wildcard import
W: 22: Unused import HAT_RIGHT from wildcard import
W: 22: Unused import color from wildcard import
W: 22: Unused import K_GREATER from wildcard import
[...]

dessa orsakades av den generösa importeringen av bra att ha definitioner

from pygame.locals import *

Lyckligtvis var lösningen enkel eftersom ingen av dessa definitioner användes så raden togs prompt bort.

Ett regelrätt fel hade också smugit sig in

E: 47:parallaxSurface.addLevel: Undefined variable 'message'

message returnerades i en exception handler

     try:
            image = (pygame.image.load(imagePath))
        except:
            printf "couldn't open image:", imagePath
            raise SystemExit, message

Problemet löses snabbt genom att ändra printf-raden till

            message = "couldn't open image: " + imagePath
            printf message

Meddelanden märkta C indikerar brott mot standarden. T.ex

C: 55: Line too long (81/80)

Detta är ett klassiskt meddelande som härstammar från tidernas begynnelse när terminalerna endast var 80 tecken breda och för att koden skall läsas lätt på samtliga plattformar skall denna längd inte överskridas.

När ovanstående problem lösts landade slutbetyget på 3.24/10!

Utöver ett par enkla varningar återstod ett par besvärliga feltyper:

C: 23:parallaxSubSurface: Missing docstring

R: 23:parallaxSubSurface: Too few public methods (0/2)

C: 35:parallaxSurface.__init__: Invalid name "parallaxLevels" (should match [a-z_][a-z0-9_]{2,30}$)

De första två rör klassen parallaxSubsurface och den saknade dokumentations-strängen* är lätt ordnad men Too few public methods meddelandet säger egentligen att mitt sätt att använda en klass för att organisera information är fel och jag måste nog fundera ett tag innan jag gör något.

Det sista meddelandet säger att mina variabelnamn strider mot standarden. Jag är väldigt förtjust i camelCase, men för lite extra poäng gör jag mycket!

Resultatet av övningen kan ses i denna commit. Skillnaden är inte särskilt stor men läsbarheten är en aning bättre samtidigt som ett regelrätt fel har lösts. Det slutgiltiga resultatet jag uppnådde var 9.68, det återstående felet är refaktoreringsförslaget pga. att min hjälpklass saknar metoder. Denna ska jag fundera på och se ifall jag kan göra samma sak på ett annat sätt som är lika tydligt. Jag måste säga att jag blev positivt överraskad av det här verktyget och kommer fortsätta använda det i mina python-projekt.

* docstring är en del av pythons inbyggda dokumentationssystem. Dokumentation av en klass läggs in som en sträng först i klassen (precis efter den deklarerats). Samma sak gäller för moduler och funktioner.

På Github

juni 25, 2012

Jag har sedan ett år funnits på Github men har bara använt kontot på riktigt sedan ett par månader tillbaka. Jag har endast två repositories upplagda än så länge, en fork av Kristian Rumbergs podcastfs samt pyparallax (mitt egna enkla bibliotek för att rita parallax-bakgrunder). Mer kommer nog vad det lider så kika gärna in på http://github/forslund, skapa ett konto och gör lite arbete åt mig!

 

Föresemester-semester

juni 14, 2012

Del 1 I vilken jag sover mig norrut, tåg står still och en frukost överraskar

Det var en lördag strax efter klockan två, jag och min reskamrat sitter på en buss mot Alvesta och samtalar kring granskott (ni vet de lysande ljusgröna). Helt plötsligt somnar jag och vaknar upp precis när bussen svänger av in mot vårt delmål.

Efter lunchen har vi fortfarande gott om tid så med en blå resväska i släp beger vi oss mot en geocache som ligger lagom nära stationen. Vi tar oss över järnvägsspåren och trotsar en arg gås för att få tag på denna skatt men det går vägen och vi knatar till tågstationen och väntar ut de sista minuterna.

Slutmålet för resan är ett besök i mitt föräldrahem samt samkväm över brädspel hos en god vän. Planen är att möta upp norrlandståget i Stockholm och åka det ända till Umeå där vi byter till lokaltåget till Nordmaling.

Väl på tåget somnar jag snabbt och vaknar långt senare, långt norrut, och tänker tanken ”Vad bra det går, andra tågresan nu utan problem”. Direkt jag tänkt tanken ångrar jag mig, men det är försent. Tåget saktar in och snart står vi still i en mörk tunnel och får veta att det är grova signalstörningar kring Stockholm.

Tåget kör in på perrongen 21:10, 90 minuter sent, lyckligtvis ligger Norrlandståget i samma träsk av signalstörningar och beräknas inte in förrän 22:00. När avgångstiden närmar sig skjuts tiden upp tjugo minuter, och detta upprepas ett antal gånger. Under den här tiden har vi blivit ett brokigt gäng av försenat folk, en student som gärna skjuter upp en uppsats, en ung tjej med två marsvin, två äldre skåningar på väg till Kiruna, en jättekissnödig tjej och ett annat äldre par som jag inte hinner prata med alls. Det roliga är att ingen var särskilt negativ och även om visst gnäll förekom var det en ganska trevlig spontant uppkommen gemenskap som dominerade.

När tåget väl behagar att dyka upp somnar jag än en gång rätt snabbt på min fäll och vaknar (mycket långsammare) upp utanför Mellansel, där färdmedlets byts till buss och sedan taxi från Ö-vik. I Ö-vik dyker aldrig någon taxi upp och SJs kundtjänst kan inte uppbringa annat än biljetter på nästa Norrtåg mot Nordmaling. Klockan är nu åtta och frukost känns lockande, efter konsultation med mamma beger vi oss på jakt efter ett morgonöppet café. Vi har mycket litet hopp om att ett öppet café skall uppenbara sig men till vår glädje och förvåning hittades snabbt ett finfint fik som till och med serverar oss hotellfrukost med rykande kaffe och de nödvändigaste tillbehören. Till frukosten spelas ett par partier Backgammon mot min sömniga medresenär.

Efter frukosten ser Ö-viks centrum två oss släpa en blå otymplig resväska tillbaks till tågstationen, upp för rulltrapporna och in på tåget.

Del 2 I vilken kultur nämns, solen skiner, skorna blir blöta och nationaldagen firas

Söndagen förflyter sedan i stilla mak, en promenad efter puttes stig, ett besök hos en bekants fru och en tidig kväll. Måndagen börjar precis lika lugnt, jag tentapluggar en stund på morgonen och sedan förflyttar jag mig till en filt på gräsmattan där jag ligger större delen av dagen med en bok. I solens sken är det tämligen behagligt, men när den går i moln gör sig geografin påmind.

Allt kommer att bli bra

Allt kommer att bli bra

På kvällen hälsar vi på min syster och hjälper henne med hennes cykel, som tack för besväret bjuds det på fantastiska muffins och sedan medan mamma och pappa är på möte bjuder vi en gemensam vän på indisk take-away. När vi sedan hämtar föräldrarna igen passar vi allihop på att ta en tur genom Umedalens kulturpark innan kvällen avslutas.

Tisdagsvädret visar sig vara lika bra som måndagens dito och mamma tar med oss ut på en utflykt till Trollberget och de uråldriga tallar som huserar där. Promenaden dit leder som väntat uppför men är oväntat blöt, man får ta långa skutt mot tuvor som kanske om man har lite tur (möjligtvis) håller för ens vikt. Fötterna blir snabbt blöta men modet håller sig på en anständig nivå. Efter en dryg timmes skuttande kommer vi fram till rastplatsen och tallarna enligt de skyltar som pryder omgivningen. Vi prioriterar lunch framför att hand över huvud rusa omkring sökandes stora tallar. Vid rastplatsen beundrar vi platsens fina utsikt och den medtagna maten smakar bra i solskenet.

Efter vi ätit letar vi upp de tre ålderdomliga tallarna Trotsig, Trofast och Trulls. De är en trio imponerande exemplar som ser ut för sin ålder. Efter Tallarna beger vi oss tillbaka ner för berget och sedan hemåt.

En stor tall

En stor tall

Onsdagen, den svenska nationaldagen, firas med pompa och ståt i Nordmaling, hela familjen möter upp med mormor vid hembygdsparken där vi snabbt håller på att hamna i vägen för hundparaden, situationen räddas och vi dyker undan in i de museum som finns till förfogande. (Hembyggd-, kyrko- och en liten konstutställning). På eftermiddagen bjuder mormor på ett av sina berömda fikan och ingen kunde undgå att hänföras av hennes makalösa rullrån. På kvällen börjar hårdplugget inför 6002x-kursen jag deltagit i. På torsdagsmorgonen skriver jag tentan stärkt av ett ständigt kaffeflöde.

Del 3. I vilken spel spelas.

Efter en inledning av samkvämet med ett besök på Umeås kanske bästa Tapas-restaurang sätter brädspelandet igång. Lungt till en början med enklare spel så som Formula DE och det numera klassiska Tsuro för att sedan övergå till mer komplicerade spel som A Game of Thrones och Arkham Horror. Många andra spel spelas också och bland dessa helgens favorit Letters from Whitechapel. Detta tankekrävande spel spanar fem poliser efter den ökände Jack the Ripper som gör natten osäker för ett antal damer av sämre rykte. En spelare spelar Jack och de övriga poliser på jakt efter seriemördaren.

A Game of Thrones spelas ostrategiskt nog mellan 23:00 och 03:00 natten mellan fredag och lördag.

Utöver tidigare beskrivna spel hans många andra spel med samt lunch ute i solen, en kort geocaching-tur och mycket samkväm.

Del 4. I vilken tåg ställs in, biljetter jagas och vi kommer hem till sist.

Det började med ett SMS från SJ där de skriver att vårt tåg kommer vara sent och eskalerar snabbt till att tåget är inställt. SJ ger oss möjligheten att åka sittandes med världens långsammaste nattåg eller boka om biljetter till följande dag. Vi väljer att sova i en säng och åka följande dag, ”Kruxet är” säger SJs kundtjänst när vi bestämt oss, ”att vi inte kan skicka biljetterna via SMS eftersom Y-Buss är inblandade”. Efter detta oskyldiga uttalande skrockar kundtjänsten ondskefullt och en kall kåre fortplantar sig längs min ryggrad medan den logiska delen av min hjärna övertygar mig om att ”Det är väl inga problem?”. FEL!

Att få tag i biljetterna krävde följande:

  • en resa kvällen innan till centralstationen för att bli varse att biljettautomaten där är ur funktion.
  • en resa därifrån till Umeå Östra för att få reda på att de stänger klockan 23:00 och vi får återkomma tidigt på morgonen innan vi ska stiga på bussen.
  • en språngmarsch upp för och nedför de långa rulltrapporna med kort om tid precis innan bussen skall gå för att finna även denna biljettautomat ur funktion
  • Ytterligare en språngmarsch till ett stängt ATG-ombud
  • Fråga busstationens informationsdisk ifall de kan skriva ut biljetterna. Vilket de kan

Efter detta är det en relativt lugn resa med ett par byten samt ett par samtal och en massa läsande innan vi åter är hemma igen.

Jag ber om ursäkt för eventuella tempusbyten, DET ÄR SVÅRT! och jag respekterar författare ännu lite mer.