Verdens Bokdag

I dag, 23. april, er det Verdens Bokdag. Bokdagen er:

[..] en markering av bokens rolle i samfunnet, boken som utrykksform, for språklig og kulturelt mangfold, for utdannelse og for kommunikasjon.

Fine ord altså. Men det er absolutt noe å feire, det synes i det minste jeg. I skrivende stund har jeg 157 bøker i biblioteket mitt, det er 58 flere enn jeg hadde på samme dag i fjor.

Nytt av året er at jeg er på twitter, og der feires også verdens #bokdag, der jeg spesielt liker oppfordringen til GeirAasen om å anbefale en bok. Dvs at jeg kan få bokanbefalinger på twitter i hele dag.

Jeg anbefalte selv The Road av Cormac Mccarthy, men en ting skal man være klar over. Smak er subjektivt, veldig subjektivt. Jeg personlig hater Sigrid Undset (ja, jeg har lest Jenny), men leser alt jeg kommer over om 2. verdenskrig. Derfor vil ikke alle anbefalinger som kommer i dag ha noe for seg, men det er greit med litt inspirasjon. Er du ikke på twitter sier du? Kom gjerne med anbefalinger her!

En annen ting verdt å merke seg er uttalelsen til Eirik Newth:

[..] forrige århundre kanskje var det siste da boka kunne sies å være et dominerende medium. 🙂

Jepp, absolutt et poeng. Men jeg er ikke klar for å gå over til leseplate helt enda, så da må jeg skaffe meg større bokhylle!

Spotify-linker i Opera på GNU/Linux

Du har kanskje sett eller fått linker til spotify-låter eller album? Kjører du Linux har du nok Spotify under Wine, og dermed kan det være litt krøll med å åpne dem. Jeg sleit litt med dette i Opera, men har funnet en løsning jeg tenkte jeg skulle dele med de som måtte trenge den. Kort fortalt:

Man har linker på to former:

På formen spotify:artist:7z7iM83U5FOtatZG5pd53f (Spotify URI):

Her må en gjøre to ting, lage et script som åpner slike linker i Spotify. dette er beskrevet for firefox på http://atheistblogger.com/2008/12/17/using-spotify-links-in-linux/, og skulle være ganske greit, men jeg gjentar stegene her:
1) Finn ut hvor spotify er installert og cd dit (vanligvis: cd ~/.wine/drive_c/Program\ Files/Spotify/
2) lag en fil med navn spotify.sh (touch spotify.sh) og gi den følgende innhold:
#!/bin/bash
wine "$HOME/.wine/drive_c/Program Files/Spotify/spotify.exe" /uri "$1"

3) gjør filen kjørbar med chmod +x spotify.sh

Så må vi få Opera til å bruke denne. Det gjør vi via Tools -> preferences -> Advanced -> Programs

Her trykker du “Add” og skriver inn “spotify” under “Protocol” og sjekker av for “Open in other program” og skriver inn den fulle stien til spotify.sh (/home/atle/.wine/drive_c/Program Files/Spotify/spotify.sh i mitt tilfelle.

Så har vi også linker på formen: http://open.spotify.com/artist/7z7iM83U5FOtatZG5pd53f (HTTP Link) : Disse gir en feilmelding i Opera, som sier:
Error!
The server tried redirecting to an invalid address. Please report this to the webmaster of the site.

Oppskriften for å fikse dette er gitt her, kort fortalt skrur man av Automatic redirect for open.spotify.com, og lager et userscript for å åpne i Spotify.

Håper dette kan være til hjelp for den lille andelen mennesker som bruker Linux og Opera samt Spotify under Wine 🙂

Bredbåndsavgift? Nei takk!

musicbiz
(Bildet er skamløst lånt fra GMM)

Nå faller snart dommen i Pirate Bay-rettsaken, og i den anleding har Dagbladet snakket med en mediesosiolog på NTNU, og der bla.a. følgende spørsmål blir stillt:

— Men musikeren og andre som lever av musikk, mener jo at de taper penger og mister mulighet til å lage ny musikk?

Svaret fra denne Hendrik Spilker er naivt, dumt, korttenkt og gjør meg småsinna:

— Det kan løses gjennom en bredbåndsavgift for internettleverandørene.

Journalisten følger opp med et meget betimelig spørsmål om at vil ikke dette ramme også de som ikke laster ned musikk? Dette blir møtt med påstander om at 1) nettleverandørene tjener på distribusjon av innhold laget av andre og 2) det er snakk om små summer (20 kr/mnd).

Jaha. 20 kroner er jo ikke mye. Men det var platebransjen. Så har vi filmbransjen, de vil vel også kompanseres? Spillbransjen, progamvarebransjen. Kanskje nettavisene har fått en ny måte å tjene penger på også? Da blir det ikke så billig mer, blir det vel? Skal vi bake inn en avgift på alt som kan misbrukes på nett i bredbåndsavgiften?

Nei. Dette forslaget er like bak mål som forsøket på å gi platebransjen politimyndighet, sperre folk ute fra nettet, DRM og annet RÆL fra sirumpa gamlinger som skal beskytte en bransje som sannsynligvis ikke har livets rett. Jeg er for at artister skal få betalt for verkene sine, men jeg nekter å betale en tvungen avgift. Jeg vil betale (så) direkte (som mulig) til den som har laget musikken. I det henseende vil jeg trekke frem Gisle Martens Meyer (bedre kjent som Ugress), som selger musikken sin via nett i diverse kvaliteter via et system der man selv kan velge pris. Noe er også tilgjengelig gratis. Det er veien å gå. De som ikke takler den nye hverdagen får heller selge musikken sin på Esso og andre bensinstasjoner.

Romlige SQL-spørringer

Tenkte jeg skulle komme med en oppdateringspost om masteroppgaven min. Mer spesifikt tenkte jeg å skrive litt om romlige databaser, og da PostGIS spesielt. Hva er PostGIS? Jo, en “spatial database extension for PostgreSQL”, der PostgreSQL er en gammel traver i DBMS-verdenen, opensource må vite. Hva gjør så PostGIS? Den legger til romlig støtte i databasene dine. Det betyr at du kan jobbe med romlige konsepter som punkter, linjer og flater, og kjøre spørringer mot disse.

Det jeg tenkte å gjøre var å kort beskrive hvordan man bruker disse romlige strukturene, og ta noen eksempler på spørringer mot disse. Jeg forutsetter at du har en viss fortåelse for SQL generelt.

Spatial enabeling

Hva skiller en romlig database fra en “vanlig” database? I tilfellet PostGIS er dette to ting: to tabeller og en rekke funksjoner. Tabellene er: geometry_columns og spatial_ref_sys. Disse holder rede på henholdsvis hvilke kolonner i tabellene dine som er romlige og hvilke referansesystemer som brukes. Du slipper imidlertid å bekymre deg for disse, bare vit at de er der. Funksjonene er listet på PostGIS sine nettsider, og noen av dem skal jeg gå gjennom her.

En første romlig tabell

Tenk deg at du skal lage en tabell over bilder, med tilknyttet posisjon. Da lager du først en standard tabell for bildene (noe forenklet her):
CREATE TABLE images(
id int NOT NULL,
filename varchar(255),
PRIMARY KEY(id)
);

Men hvor er den romlige delen? Den er ikke med enda. Den opprettes med AddGeometryColumn(), og har syntaksen:
AddGeometryColumn(<schema_name>, <table_name>, <column_name>, <srid>, <type>, <dimension>)

Her burde det meste være selvforklarende, men det er et par ting som kanskje trenger en oppklaring. Disse er srid og type. SRID er Spatial Reference IDentifier, en måte å forklare hvilket referansesystem vi bruker. Vi skal ikke gå nærmere inn på dette her, annet enn å nevne at spatialreference.org vedlikeholder en liste over SRIDer, og at SRIDen for lengde/breddegrad-par (som du får fra GPSen din, og fra Google Maps etc er 4326.

Type referer til geometrityper, disse er det flere å velge på, f.eks POINT, LINESTRING, POLYGON etc. For en oversikt, se Wikipedia.

Vi skulle lagre georefererte bilder. Da snakker vi punkter, og vi synes lat/lon er fint (det er det man finner i EXIF f.eks.) Da kan vi legge til et lokasjonsfelt i bildetabellen vår:
SELECT AddGeometryColumn('images','the_geom',4326,'POINT',2);
(the_geom blir navnet på kolonnen vår, og 2 sier at vi kun bruker 2 dimensjoner).

Greit nok, da er vi så langt? Hvordan legger vi så inn informasjon? Vha INSERT såklart. Jeg antar at jeg har et bilde tatt på lokasjonen (63.4168827977837, 10.4198884963989), med filnavn bilde.jpg. Jeg har altså posisjonen i klartekst, såkalt WKT, denne må konverteres til et format PostGIS forstår, og ikke overraskende finnes funksjonen ST_GeomFromText(), med syntaksen: ST_GeomFromText(text,[<srid>]).
Der srid igjen er referansesystemet. Vi kan da lage en INSERT setning, eller, det er en ting til vi må huske på: hvordan WKT-formatet fungerer. Vi er jo vant med å skrive bredde,lengdegrader som (lat,lon), men i tilfellet WKT-POINT er det litt annet, her er det POINT(lon lat), dvs “gal” rekkefølge og ikke komma. Husker du på det fra dag 1 sparer du deg mye trøbbel. Dermed:
INSERT INTO images(id,filename,the_geom) VALUES (1,'bilde.jpg',ST_GeomFromText('POINT(10.4198884963989 63.4168827977837)',4326));

Da skal det være lagret. La oss så hente det ut:
SELECT * FROM images;
Dette gir:
1;"bilde.jpg";"0101000020E6100000F1FFFF9FFBD624407C5F5F6A5CB54F40"
Ikke spesielt leselig nei? Men det er fordi vi nå får den interne representasjonen. For å få lokasjonen som WKT kan vi bruke ST_AsText(), slik;

SELECT id,filename,ST_AsText(the_geom) FROM images;
Som gir:
1;"bilde.jpg";"POINT(10.4198884963989 63.4168827977837)"
Dette er et mere leselig format, som også min php-klasse for punkter kan lese. Det samme prinsippet bruker man altså for linjer, punkter etc. også. Du tar nok poenget ganske fort.

Men så langt kunne vi jo like gjerne laget to kolonner, en “lat” og en “lon” og fått samme resultat. Hva er så vitsen? Jo, romlige spørringer.

Romlige spørringer

Den store styrken i en romlig database er romlige spørringer. Dvs. SQl-spørringer som benytter seg av den romlige informasjonen vi har lagret i databasen. Dermed kan vi besvare spørsmål som “hvor lang er denne linjen”, “hva er avstanden mellom disse to bildene”, eller “vis meg alle bilder innenfor en radius av 1 km av huset mitt”, eller “vis meg alle bilder innenfor en grense på 100 meter langs linjen fra A til B.

Jeg skal ta et eksempel på en slik spørring her, for å vise noen av mulighetene. Vi antar at vi har images-tabellen vi lagde over, og en tabell poi der huset vårt ligger lagret med id=1 og en punkt-geometri the_geom. Antar vidre at images-tabellen vår nå har en god del bilder, slik at vi kan finne noen spennende i nærheten av hjemme.

Funksjonen ST_DWithin(geometry, geometry, float) virker fin til dette formålet, men det er en ting vi må være obs på: Referansesystem! PostGIS er ikke overvettes fornuftig av seg, og siden vi lagrer punktene våre som lat,lon, dvs grader vil alle enheter være i grader. Det er ikke så spennende å vite hvilke bilder som er innenfor x grader av huset ditt, vi vil ha meter. En fiks på dette er å bruke et annet referansesystem, helst da et som bruker meter (og ikke grader) som enhet. Her i Norge kan vi da bruke UTM, spesifikt sone 32N (eller 33N, det kommer ann på hvor du bor, jeg går ikke nærmere inn på dette her). SRIDen for UTM sone 32N er 32632 og funksjonen for å transformere koordinater er ST_Transform().

Dermed kan vi finne alle bilder innenfor en radius av 1 km fra huset vårt på følgende vis:
SELECT images.filename FROM images, poi WHERE poi.id=1 AND ST_DWithin(transform(images.the_geom,32632),transform(poi.the_geom,32632),1000);

Og med det tror jeg vi runder av, det er ikke verdens mest avanserte spørringer jeg har gått gjennom, men det gir en innsikt i hva som er spesielt med romlige databaser, og det kan jo være at det inspirerer til vidre eksperimentasjon.

Tar også imot tilbakemeldinger om du finner feil, mangler eller uklarheter. Jeg har selv testet spørringene, så de skal fungere, men man vet jo aldri. Det kan godt være det finne smartere måter å gjøre ting på også, la meg gjerne få vite det om så er tilfelle!

Se, jeg er på internett!

Advarsel: Denne posten inneholder en god dose selvpromotering. Hvis du lever etter janteloven vil du nok ikke sette pris på den. På den annen side: da bryr ikke jeg meg om deg heller!

Så, jeg er på internett, er det noe nytt? Nei, jeg er jo ganske godt representert rundt omkring, men det er mest på eget initiativ. Det jeg ville fremme nå var prosjektoppgaven min, som jeg presenterte her for noen uker siden, under en CC-lisens.

Denne har blitt plukket opp (dog etter litt skamløs selvpromotering) av et par aktører som har presentert den på sine sider. Den første var Friprogsenteret, som la den ut for en stund siden under sin Lær mer-seksjon. Du finner den her.

I tillegg tipset jeg en av utviklerene av OpenJUMP om artikkelen, han har selv skrevet en god artikkel om OpenSource Desktop GIS, som var til stor hjelp under arbeidet med oppgaven min. Han skrev i en epost til meg:

I read now your thesis (only chapter 9+10 is left). There a couple of tiny spelling errors – but nevertheless I really like the thesis and the evaluation method you developed. And it comes right in time since I plan to give a talk in April called “Free and Open Source Desktop GIS: ready for the desktop?” This talk will hopefully be in front of some business people – so there are a couple of interesting notes in your thesis that I may use for the talk.

Han har også lagt ut uppgaven min på det samme nettstedet der han opplyser om FOS Desktop GIS, spatialserver.org/osgis, hvor den kalles “an interesting thesis”.

Håpet er dermed at noen finner den og kan få nytte av den, det er jo mye bedre enn at den støver bort i bokhylla mi. En annen observasjon er det faktum at oppgaven har en lisens som tillater slik vidrepublisering uten eksplisitt tillatelse fra meg, har begge aktørene spurt meg om det er greit for meg at den legges ut. Det fører til at jeg har god oversikt over hva den brukes til, og jeg kan bedrive skamløs selvpromotering som dette. Det liker jeg 😉

(For den som ikke er lei av meg, jeg var i VG her om dagen også;))