Destruction-driven development

Jeg har kodet en del før jeg begynte på informatikk, men før stuiene var mønster (patterns) et ukjent begrep for meg. Siden PHP i lang tid var det foretrukne språket ble det gjerne gjort nyvinninger nettopp i dette språket (IRC-bot kan nevnes).

For en tid tilbake nevnte jeg en av mine “gode” idéer fra den gang for noen med-studenter, og øyeblikkelig kom navnet “destruction-driven development” opp. Konseptet er i og for seg ikke noe jeg har sett igjen i løpet av årene på Gløshaugen, samt at gjennomføringen er bundet mot utvikling på nett, fortrinnsvis i skripingspråk.

Av og til er det greit å hente inn noen standard-filer som blir til over tid (av litt for mange asiater på Aardvark kalt “custom framework”) for å lage til en demo, simpel to-siders løsning eller lignende, og i den forbindelse fant jeg at jeg ofte glemte å kjøre metoden som skulle vise resultatet til en bruker (mye “feilretting”). Med dette knyttet opp mot Smarty endte jeg opp med å ønske å lage sider slik:

<?php

require_once("autoload.php");
Template::setTemplate("page.tpl");

$t = Template::getInstance();
$t->assign("title", "Forside");
$t->assign("text", "Lorem ipsum...");

?>

Konseptet er å la presentasjon foregår på et punkt hvor man er sikker på at all logikk er kjørt, og hvilket bedre punkt enn ved kjøring av  Garbage Collector (GC) finnes? Ved å la destruction-metoden til template-objektet, som er en subklasse av Smarty, til å kjøre display()-metoden trenger ikke kodesnutten over å gjøre det, samt at jeg slipper å duplisere kode for å vise vise innhold. Se gjerne det vedlagte eksempelprosjekt som benytter Smarty.

Jeg ser i utgangspunktet to problemer med overstående kode, hvilket er grunnen til at jeg ikke vil bruke dette konseptet i prosjekter:

  1. Det vil gjøre prosjektet vanskeligere å feilrette.
  2. Implementasjonen av GC kan endre seg, og ved å oppdatere PHP kan man oppleve at alle sider er blanke. (Les: flere ting som potensielt kan gå galt)

Bussorakel feirer 100

I begynnelsen av november i fjor la jeg ut applikasjonen Bussorakel på Android Market, og etter flere versjoner med mange endringer og justeringer, ble nedlasting nummer 100 gjennomført. Allerede den første versjonen ble vurdert av IME, og jeg skulle likt å vite hva de tenker om dagens versjon. Jeg er fornøyd med det antallet, spesielt siden målgruppen må sies å være noe snever:

Personer med Android og som benytter busstilbudet i Trondheim.

Selv om det er noe snevert har jeg merket at jeg har vært fokusert på å gi et godt tilbud til de som benytter den, og føler ansvar for å levere et bedre produkt og opplevelse i hver nye versjon. I helgen kunne jeg se at Android Market kunne rapportere følgende status for applikasjonen (i grensesnittet for utviklere):

Bussorakel på Android Market

Applikasjonen er det første programmet jeg har laget for Android, noe som har satt tydelige spor i kildekoden. Grensesnittet har også vært gjennom en del endringer, dagens utseende prøver å være tro mot platformen den kjører på, men i begynnelsen var jeg opptatt av å lage egen look&feel, noe som kostet mer i koden enn jeg likte inntil jeg fant ut hvordan det egentlig skal gjøres.

Bussorakel, skjermskyt 1 Bussorakel, skjermskyt 2

Ikke bare det grafiske har endret seg, men også hvordan jeg henter svar på spørsmålene som kommer inn. I begynnelsen ble Yahoo Pipes benyttet ved hjelp av en Bussorakel-pipe, men tilbakemeldinger tilsa at den var treg, mellomlagret litt for lenge, og var offline litt for ofte. Fra og med siste utgave benytter jeg i stedet en kodesnutt som kjører på min hosting, og denne faller tilbake på NTNU sin versjon om Team Trafikk sin skulle bruke for lang tid på å svare eller er offline.

Etter at jeg gikk fra hvit bakgrunn til mørk bakgrunn har jeg sett at applikasjonen er avinstallert av flere (før lå jeg på ca. 85% aktive installasjoner), noe som minner meg på at det ikke er lett å få tilbakemeldinger fra brukere. Jeg skulle gjerne sett at Google la mer til rette for dette, for i grensesnittet for utviklere er det kun stjernene som vises, dog ikke hvor mange man har fått av hver, og alle kommentarer er utilgjengelig. Skal man øke kvaliteten på applikasjonene tror jeg dette må ordnes i lengden.

QR-code for BussorakelNoe jeg ikke har sett i andre applikasjoner er at man kan trykke frem menyen, og derfra kunne dele programmet med andre gjennom en QR-code som andre kan scanne ved hjelp av en strekkodeleser på sin telefon. Dette lar seg også gjøre fra nettsider, og ved å scanne denne kan du få programmet på din telefon.

Per i dag er det også hele 4 ulike applikasjoner på Android Market som bringer tjenesten til Android, hvor min og Busstider av Martin Mikkelborg Syvertsen ser ut til å være de raskeste applikasjonene (bruker samme kilde).

Jeg  må også takke for alle tilbakemeldinger jeg har fått fra Martin og Rune Martin Andersen, samt flere av mine med-studenter. Uten tilbakemeldinger kommer jeg ikke noen vei, og jeg håper flere benytter anledningen i fremtiden.

NRK som filsystem

Oppdatering: Koden er kopiert over til eget prosjekt på GitHub, inntil videre fungerer fortsatt alt som beskrevet i postingen og i første kommentar.

Så var det laget; tilgang på NRK sin nett-TV som om tilgangen til innholdet skulle ligge lokal. I mitt forsøk på å gjøre om NRK Nett-TV til et virtuelt filsystem har jeg valgt å bedrive “screen scraping” av nettsidene, og ender opp med én spilleliste for hvert program som er lagt ut.

Jeg har valgt å benytte Python, sammen med modulene Fuse-Python og BeautifulSoup, så dette kan man sette opp på sin egen maskin som kjører Linux eller MacOS.

Filene er lagt ut i kildekodekontrollen, og er delt opp i to filer:

  • nrk.py – Bibliotek for å aksessere NRK Nett-TV
  • nrkfs.py – Koden som oppretter og fórer det virtuelle filsystemet

For å montere filsystemet kjører man enkelt og greit:

./nrkfs.py nrk

Filen må være kjørbar, og “nrk” vil i dette tilfellet bli mappen som skal være monteringspunktet, denne mappen må allerede være opprettet. Gevinsten er ikke vanskelig å forestille seg:

NrkFS

Det er bevisst ikke opprettet noen debian-pakke eller egg-pakke av dette lille prosjektet enda, det får komme etter litt mer testing om det skulle være noen interesse for det.

Håper noen har ønske om å teste dette ut og kan komme med tilbakemeldinger, er svært interessert i det som ikke måtte fungere.

Playing for change – hvor?

Jeg gir opp. De siste dagene har jeg fått en følelse av at “Stand By Me” forfølger meg, og da er det naturligvis fremføringen av “Playing for change” jeg tenker på. Flott sang, flott sammensatt, og spesielt fasinert er jeg av Grandpa Elliott fra Louisiana. Det er virkelig verdt å få med seg:

Det blir litt som “The Internet Symphony” som jeg har store vansker med å høre kun én gang, og når jeg inne på profilen til “Playing for change” vurderer jeg å kjøpe plata siden jeg finner en tekst som sier:

CD/DVD now available at Amazon.com, Starbucks, and everywhere music sold

Noe senere blir jeg derfor ganske paff når Eirik Solheim tvitrer en link til en skjermskyt som minner om snarere det motsatte av “everywhere”:

Some rights reserved, Eirik Solheim

Some rights reserved, Eirik Solheim

Umiddelbart går turen til CDON og Platekompaniet for å se hvordan status er, og her viser det seg at skiven kommer ut i Norge et stykke ut i mai, til tross for at den allerede er sluppet på iTunes den 28. april (i USA).

Jeg må innrømme at jeg ikke lenger er sikker på om jeg ønsker å støtte opp om slik forskjellsbehandling gjennom å kjøpe plata, og det er spesielt et sitat av en smart kar som kommer til meg; “Ikke klag over piratkopiering.”

Ordnett i terminalen

Oppslagsverkene som er tilgjengelig på Ordnett er mye brukt i forbindelse med studiene, men jeg har etterhvert funnet det noe tungvint å skulle benytte nettsidene, dessverre.

I et forsøk på å gjøre Ordnett lettere tilgjengelig for meg selv kodet jeg i høst en liten kodebit som lar meg gjøre oppslag direkte fra terminalen, som jo alltid er oppe.

Bruk av ordnett fra terminalen.

Bruk av ordnett fra terminalen.

Jeg har nå lagt ut denne kodebiten i kildekodekontrollen, og de som måtte ønske å benytte den kan laste den ned. Det er fortsatt noen feil og mangler, men programmet i seg selv gjør jobben. Jeg skal få ordnet med noe versjonering og debian-pakker etterhvert for de som foretrekker det.

For de som måtte håpe at dette er et magisk program som gir ekstra tilganger, så beklager jeg. De som er koblet opp i NTNU sitt nettverk vil få opp alle alternativene som er i koden, mens andre må forvente at tilganger koster penger med mindre nettleverandøren har en avtale.

Bruken av programmet er veldig enkel, for eksempel kan oppslag i norsk-engelsk-ordbøker, oppslag i bokmålsordboka og i alle tilgjengelige se slik ut:

ordnett -ne fritid
ordnett -bok fritid
ordnett fritid

Om noen skulle ta en titt på koden, så vet jeg at ikke alt er like bra, jeg skrev mesteparten kort tid etter at jeg begynte å programmere i Python, men får håpe det blir bedre etterhvert.

Ting som jeg vet mangler:

  • Mulighet for å legge inn innlogging
  • Det er fortsatt en del tegn som kommer opp feil
  • Underveis i formateringen hender det at mellomrom fra nettsidene forsvinner