Category Archives: Nerdeprat

Alt er nytt, men ved det gamle!

Som jeg sa ista (dette føles som splittet personlighet) har jeg skaffet meg et eget webhotell her på www.atlefren.net.

Dette bunner i at jeg snart takker for meg på NTNU, og dermed mister hjemmeområdet mitt på folk.ntnu.no. Dermed må jeg ty til komersielle løsninger, og da har jeg blitt anbefalt Subsys ANS, som virkelig har imponert så langt!

Dermed oppfordres du til å bytte feed-adresse til http://www.atlefren.net/feed/ og oppatere alle bokmerker til http://www.atlefren.net. atlefren.net kommer etter snart, men med blir hovedfokus.

Ellers så er jeg takknemmelig for alle tips om ting som har tryna i flytteprosessen, det er nok desverre noen.

I tillegg vil jeg tipse om docs.atlefren.net, hvor jeg samler litt faglig arbeid. Planen er også å komme med code.atlefren.net, men først må et stykke faglig arbeid skrives 😉 18 DTL!

Twittermas

Jan Omdahl i Dagbladet har skrevet om Twitter, er det en forgjengeligetsmaskin?

Artikkelen tar for seg hvor viktig journalister synes det er å ha followers, altså folk som følger med på det de skriver. Sant nok, det er vel et menneskelig, og spesielt journalistisk, trekk. Jeg synes selv det er hyggelig med besøkstall på bloggen min, og jeg registrerer at folk følger meg på Twitter også. Journalister har vel hardkoda opplagstall inn i skallen, og Twitter-ekvivalenten er vel followers.

Artikkelen prøver jo å være litt “på siden” og ta det hele med et smil, men setninger som “men har rukket å skaffe seg et meget respektabelt antall følgesvenner” tyder på at også Omdahl synes det er viktig med følgesvenner. Hvor mange som følger deg sier vel kanskje litt om hvor spennende du er, men så er det jo forbeholdt journalister å sette inn twitter-lenker i artiklene sine, og kreve at de siteres med disse.

Fører dette til at journalister overvurderer hvor “viktige” de er? Sannsynligvis. Det er en trend på Twitter at antall followers anvehger av hvor kjent du er av andre årsaker en twitringen din. Dermed blir ikke antall followers et mål på hvor populær du er på Twitter, eller hvor gode tweets(?) du skriver, men på hvor kjent du er ellers. Norge har vel få rene Twitter-kjendiser, med unntak av Even #Drittunge.

Men er egentlig followers så viktig? Er det ikke viktigere å følge med på folk man selv synes kommer med noe spennende? Burde ikke fokus ligge på at Twitter gir deg mulighet til å følge med på hva andre snakker om, ikke at man har fått enda en kanal for å promotere seg selv?

Før kritikken kommer: ja, denne bloggen er vel en måte å promotere seg selv på, det samme gjør jeg nok via Twitter. Men det er ikke det som er hovedpoenget med min bruk av Twitter, det er muligheten for å få med meg hva som skjer. Jeg er jo selvsagt klar over at det ikke hadde vært noe spennende om alle bare lyttet, da hadde man jo ikke hatt noen å lytte til. Dermed synes jeg maset om antallet followers er slitsomt. Følg de du synes har noe fornuftig å komme med, skriv om det som opptar deg og gi faen i resten. Eller må vi få et eget microbloggesystem kun for journalister, der de kan pusse egoene sine enda mer?

Matvarsel på Twitter

Eksamensmiddager, eller masteroppgavejobbemiddager, har lett for å bli tatt i en kantine på campus, selv om kvaliteten kan være så som så.

Dagene er lange, og det å dra hjem fire for å lage og spise middag blir mye mas. Derfor er det greit å ty til SiT sine kantiner. Det evige spørsmålet er jo hva de serverer, da det er to kantiner å velge her på Gløshaugen.

Menyene publiseres på nett, Hangaren og Realfagskantina, men det fordrer at man må inn å sjekke. I dag gjorde jeg dette, og så følgende melding hos Hangaren:

Vi jobber med å få på plass “dagens middag” som RSS-feed. I mellomtiden kan dere abonnere på denne RSSen: http://twitter.com/statuses/user_timeline/38466835.rss

Vi gjør oppmerksom på at den er laget av en student på eget initiativ, og at det kan hende den ikke fungerer 100%. Dersom noen av dere klarer å lage en bedre fungerende RSS, må dere gjerne dele den med SiT og andre…

Jeg sjekket ut denne, og fant dermed ut at det er en Twitter-konto som publiserer dagens middag hos Hangaren hver dag klokken to. Følg @hangaren for oppdateringer.

Jeg fant ut at det var en student ved navn Eirik Opsanger som har laget tjenesten, og bare minutter etter at jeg spurte om Realfagskantina også kom twittret @hangaren følgende.

Det er nå også mulig å følge @realfag for dagens meny i realfagskantina! #hangaren #realfagMat

Dermed skulle altså oppdateringsbehovet for menyene på Gløshaugen være dekket. Jeg har også oppfordret Eirik Opsanger til å skrive noe om hvordan opplegget fungerer, men ting tyder på at han er like opptatt med masteroppgave som meg, så vi får se.

Et annet spørsmål er jo hvorfor ikke SiT selv tilbyr dette, som rss eller twitter/microblogg-feeds, de har jo tilgang til rådataene og slipper screenscraping eller hva nå som gjøres nå.

Kommentarer, oppklaringer og innspill taes imot med takk. Jeg synes dette er spennende bruk av Twitter!

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 🙂

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!