Bernts rotehodes utløp

19 juni 2004

Film: The Day After Tomorrow

Jeg burde slutte å gå på kino når jeg bare har lyst, uten at det egentlig er noen film å se. Her sitter vi og sier til oss selv at jo, "dette er en drittfilm". "Den er helt sikkert kjempedårlig". Bare for å redusere forventningene så mye som mulig. Slik at man kanskje kan bli positivt overrasket. Det virket ikke. Dette er en av de gangene jeg har hatt mest lyst til å snike meg ut midt i filmen. Den sluttet som alle katastrofefilmer: Hunden overlevde. Den kreftsyke gutten overlevde (til slutten av filmen i alle fall). De skilte foreldrene ble venner. Den sjenerte gutten klinte med hun søte jenta han likte så godt på slutten.

Det eneste som er interessant med denne filmen, er at det stod en helside om den i Klassekampen en uke eller så før premieren. Tviler på at Klassekampener er spesielt interessert i ultrakommersielle amerikanskje katastrofefilmer til vanlig. Mediestrategien til markedsførerne virket bra denne gangen, de fikk avisene til å skrive om at denne filmen var samfunnskritisk. Jepp da.

10 juni 2004

Nerd: Gledene med grep, sed, sort, uniq og vennene dems. (totalt omskrevet)

Denne postingen handler om noen litt nerdete verktøy. Som er veldig nyttige. Som jeg bare har hørt om før, men nå endelig har tatt i bruk. Disse verktøyene får Windows til å henge enda lengre bak unix-systemer. Jeg har litt følelsen av at jeg om noen måneder kommer til å lure på hvordan jeg klarte meg uten, akkurat som det sies at det er med strøm på hytta.

Så en liten innføring i grep, sed, sort, uniq, | og >.

Se for deg at du har en fil som ser slik ut:

213.236.225.194 - - [10/Jun/2004:14:49:25 +0200] "GET /__data/site/design/1/images/pixel.gif HTTP/1.1" 200 49 "http://www.mar-eco.no/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
213.236.225.194 - - [10/Jun/2004:14:49:39 +0200] "GET /contact HTTP/1.1" 200 20292 "http://www.mar-eco.no/learning-zone/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
213.236.225.194 - - [10/Jun/2004:14:49:40 +0200] "GET /about/management HTTP/1.1" 200 33250 "http://www.mar-eco.no/contact" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
213.236.225.194 - - [10/Jun/2004:14:49:48 +0200] "GET /__data/site/design/3/images/learning_button_u.jpg HTTP/1.1" 200 2655 "http://www.mar-eco.no/Shiptoshore/g._o._sars?MySourceSession=021420da4f6c8a72b87dc493590b82c2" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

Denne fila er på hundre tusen linjer eller så. Hver linje tilsvarer et treff på en hjemmeside, webserveren logger dette til en fil slik at du kan analysere det etterpå - både for å finne ut hvilke sider som er mest besøkt, hvilke nettlesere som brukes og andre ting. De første tallene er ip-adressen til besøkende, så kommer datoen for når besøket var, hvilken HTTP-kommando de sendte (altså hvilken side de var på), hva webserveren svarte, hvor mye data webserveren sendte, og hvilken gjesten bruker. Bare Microsoft Internet Explorer i dette utdraget (stakkars).

Hva hvis jeg vil finne ut av hva folk som besøker nettstedet vårt søker etter? Da må jeg søke igjennom disse tusenvis av linjene på jakt etter linjer som ser slik ut:

193.214.57.46 - - [10/Jun/2004:12:52:48 +0200] "GET /__lib/images/file_types/pdf.gif HTTP/1.1" 200 332 "http://mareco.imr.no/search?search_mode=simple&action=Sea
rch&sort_mode=total_score&at_least_one_query=search&submit.x=7&submit.y=8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0) Opera 7.23 [nb]"
193.214.57.46 - - [10/Jun/2004:12:52:58 +0200] "GET /search?search_mode=simple&action=Search&at_least_one_query=photos¤t_page= HTTP/1.1" 200 24995 "http://
mareco.imr.no/search?search_mode=simple&action=Search&sort_mode=total_score&at_least_one_query=search&submit.x=7&submit.y=8" "Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 4.0) Opera 7.23 [nb]"

Nøkkelen er å finne teksten "GET /search?search_mode=simple&action=Search&at_least_one_query=photos¤t_page= ", der det gjesten har søkt på, er ordet som kommer bak at_least_one_query=. Photos i dette tilfellet, altså. Her kommer grep til nytte, kommandoen "grep at_least_one_query access_log" vil søke igjennom filen access_log, og bare ta med linjene som nettopp inneholder søkeord.

Da sitter jeg igjen med bare noen hundre linjer. Som ser omtrent slik ut:

193.214.57.46 - - [10/Jun/2004:12:52:48 +0200] "GET /__lib/images/file_types/pdf.gif HTTP/1.1" 200 332 "http://mareco.imr.no/search?search_mode=simple&action=Sea
rch&sort_mode=total_score&at_least_one_query=search&submit.x=7&submit.y=8" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0) Opera 7.23 [nb]"
193.214.57.46 - - [10/Jun/2004:12:52:58 +0200] "GET /search?search_mode=simple&action=Search&at_least_one_query=photos¤t_page= HTTP/1.1" 200 24995 "http://
mareco.imr.no/search?search_mode=simple&action=Search&sort_mode=total_score&at_least_one_query=search&submit.x=7&submit.y=8" "Mozilla/4.0 (compatible; MSIE 6.0;
Windows NT 4.0) Opera 7.23 [nb]"

Hva nå? Jeg vil jo bare vite hvilke søkeord som er brukt, og kanskje - hvis det ikke er for stress - hvor mange ganger hvert ord er brukt. Jeg kunne kanskje klippet og limt hvert ord for hånd, og puttet i et regneark, men det er jo kjedelig. Jeg må finne en måte å hviske ut det som ikke er søkeord - og det er her sed kommer til nytte.

sed "s/.*query=//" vil ta bort alt som er før "query=" på enhver linje. Da er jeg ca halvveis! sed -e "s/[&\" ].*//" tar bort alt som kommer bak søkeordet. -e "s/+/ /" er den siste tingen jeg ber sed om å gjøre, for i access_log-en blir alle mellomrom erstattet med +. For at resultatet skal bli pent skifter jeg det tilbake igjen.

Nå har jeg fremdeles like mange linjer igjen - men her begynner det å ligne på noe i alle fall:
fish
fish
bilder
heino

Problemet nå er jo at noen søkeord listes ut flere ganger, og jeg kan ikke med letthet finne ut hvor mye hvert ord er brukt. Til dette bruker jeg sort og uniq. Hvis du sender tusen linjer igjennom uniq, så vil den ta bort de som kommer to ganger etter hverandre. Derfor sorterer jeg først listen over søkeord alfabetisk med sort -b -f:

bilder
fish
fish
heino

Så gir jeg resultatet til uniq -c - som først tar bort duplikatene og så legger på hvor mange ganger en linje ble gjentatt:

9 rov
7 scanmar
203 search
1 torkelsen

Dette begynner jo å ligne på noe! Jeg kunne godt stoppet her, men nå er jeg varm i trøya og vil ha et perfekt resultat. Det innebærer at søkene er rangert med de mest brukte på toppen. Da må vi ha hjelp av sort igjen!

sort -n -r blir kommandoen. -r sier at den skal skrive resultatet i revers, altså med det største tallet først. Og da får vi resultatet:

203 search
40 opdahl
32 molv%E6r
32 flyer
12 azores
9 rov

Skal si folk er interessert i å søke på search? Det er nesten litt merkelig. Heldigvis finnes det en god forklaring. access_log-en er hentet fra Mar-Eco-prosjektet sine hjemmesider, og hvis du ser i søkefeltet i menyen øverst står det 'search' i søkeboksen, og så er det en knapp ved siden av som viser søkeresultatene. Mange av brukerne våre klikker direkte på søkeboksen, uten å skrive noe i søkefeltet først, og vips søker de på 'search'. Forvirrende? Ja, antakeligvis. Derfor bør vi gjøre noe med dette. Men dette med web-brukervennlighet er en annen historie.

Konklusjon på hele denne lange historen her:
Windows mangler noen fantastisk nyttige verktøy som er så enkle at det er rart man ikke finner det der. Et system som koster hundrvis av kroner i innkjøp ligger altså etter systemer du kan laste ned gratis fra nettet. Merk deg at all denne søkingen og erstattingen og tellingen ble gjort i en eneste kommando:

grep at_least_one_query access_log | sed -e "s/.*query=//" -e "s/[&\" ].*//" -e "s/+/ /" | sort -b -f | uniq -c | sort -n -r > search_mareco_no.txt

Litt mer effektivt enn hva jeg måtte gjort i Windows. Jeg er ikke sikker på hvordan jeg kunne fått dette til på Windows, da, men jeg er i alle fall glad for at jeg slipper.

Takk for meg.

07 juni 2004

Havforskning: Nå er det endelig i gang!

Det store Mar-Eco forskningstoktet hvis nettsider jeg har brukt masse tid på å få i orden har startet. Havforskningsinstituttet sitt flaggskip G.O. Sars dro fra kaia vår lørdag formiddag. Rapporten fra den første dagens hendelser er allerede ute.

Planen er å finne ut av hva slags liv det er på tusen meters dyp, rundt den midtatlantiske rygg - en underjordisk fjellkjede som går fra Island og ned til Azorene. Dette er det første store forskningstoktet i dette området siden 1910, og siden vi har litt kulere utstyr nå enn det de brukte da, så finner vi nok mange nye arter og andre kule ting!