Har fått et par spørsmål om hvordan man kan ha tilgang til Wikipedia uten å ha internett-tilgang. Nye regler i forbindelse med avvikling av eksamen i ungdomsskolen og videregående skole gir elevene mulighet til å bruke alle virkemidler, så lenge de ikke kan kommunisere med hverandre, og den metoden jeg beskriver er dermed fult lovlig å bruke, men jeg vil anbefale at IT-ansvarlig på skolen gjennomfører den, og ikke at hver enkelt elev gjør dette på egenhånd, fordi det kan være relativt store datamengder som tar mye plass.
Wikimedia Foundation som er stiftelsen som står bak Wikipedia gjør alt innhold fra Wikipedia tilgjengelig på download.wikimedia.org. Velg ut de databasene du er interessert i, og last ned filen “pages-articles.xml.bz2″ i den siste databasedumpen som er gjort tilgjengelig:
WikiTaxi er en offline reader som kan lese databasedumpene som du akkurat har lastet ned. Den kan finnes på www.wikitaxi.org.
XML er et veldig fleksibelt format, men det er tungvindt å gjøre søkbart. Derfor må databasedumpen konverteres til WikiTaxi-database. Dette gjøres med programmet wikitaxi_import.exe som følger med WikiTaxi. Fyll inn hvor du har lagret xml’en du vil konvertere i første feltet, hvor du vil at databasen skal lagres i det andre feltet, og trykk på Import. Programmet vil nå jobbe en stund med å konvertere dataen (for meg brukte den ca. 5 minutter på Wikipedia på bokmål)
Dersom du bare trykker på WikiTaxi.exe vil du få opp en bruksanvisning med beskrivelse av programmet og hvordan du bruker det, i begynnelsen av denne vil du også få en lenke for å åpne en ny fil, hvor du kan bla deg frem til hvor du har lagret den konverterte databasen i forrige steg. Åpne filen og du får opp teksten fra Wikipedia, med søkefelt for å finne artikler.
Du kan også spesifisere hvor databasen ligger direkte ved å skrive adressen til .taxi-fila som en parameter til wikitaxi.exe slik:
p:\Applikasjoner\Wikipedia\WikiTaxi.exe p:\Applikasjoner\Wikipedia\nowiki\nowiki.taxi
Jeg må si jeg gleder meg til neste uke. Mandag 19. april begynner konferansen GoOpen i Oslo, Norges største konferanse om åpen kildekode (jeg har selvfølgelig vært med der hvert år), og jeg får mulighet til å møte mange andre i miljøet i Norge (er ofte kjente navn fra et eller annet prosjekt jeg har vært borti). På kvelden skal det være årsmøte i Wikimedia Norge, hvor jeg har blitt innstilt som ny nestleder, en post jeg virkelig har lyst på, siden jeg har mange prosjekter jeg kunne tenke meg å få gjennomført, og som nestleder har jeg god mulighet til å få gjennomført disse på en god måte. Etter årsmøtet blir det wikitreff, noe som trolig betyr muligheten til å prate med masse nye folk jeg ikke har møtt annet enn på Wikipedia.
Dagen etter, tirsdag 20. april, skal jeg holde foredrag på GoOpen, noe som trolig blir det største foredraget jeg har holdt til nå (men forhåpentligvis ikke det siste
). Har endelig fått satt meg ned og skrevet litt på foredraget mitt i dag (gått med mye tid for å forberede årsmøtet i Wikimedia Norge de siste ukene), og tror nok det skal gå bra.
Kom tilfeldigvis over et greit tilbud på netbook i romjula, og har nå (endelig) fått tak i den. Det er en DELL Inspirion mini, med bl.a. 160GB disk, greit tastatur, 10,1” skjerm, 1,6GHz Atom-prosessor og 1GB RAM (men RAMen tror jeg må oppgraderes…).
Tenkte jeg skulle ta å forsøke å lære meg å bruke litt nyere Windows og Office-versjoner også, siden jeg hverken har prøvd Vista eller Windows 7 ennå, og har brukt OpenOffice som eneste kontorstøttesystem siden ~ 2004. Har fått inn Windows 7 nå, og har installert Office 2007 og Visio 2007 (beste produktet Microsoft noensinne har kjøpt er Visio!).
Nå sitter jeg å tester litt på Windows Live Writer for å skrive blogg-innlegg, og får vel teste litt på Office i løpet av kvelden.
Kom over en morsom post på Lifehacker. Den tar utgangspunkt i å bruke Linux, og alle kommentarene går ut på å installere Linux-verktøy på Windows. Tenkte bare å skrive om at det er mulig å bruke det samme på Windows:
Velg Start -> Kjør
skriv “cmd” og trykk OK
skriv “nslookup” og enter
skriv “set type=txt” og enter
skriv inn <emne>.wp.dg.cx
Gjør automatisk oppslag på engelsk Wikipedia, og gir de første setningene i artikkelen… Og siden de fleste moderne datasystemer er avhengig av DNS for å fungere, så vil denne løsningen mest sannsynlig fungere uansett hva slags oppsett IT-ansvarlig har for begrensinger på internett-tilgang under prøver.
Mest sannsynlig er start->kjør og cmd.exe begrenset slik at man ikke får brukt disse, men da kan man i stedenfor lage en snarvei f.eks. på skrivebordet til “nslookup”…
Nok en uke har gått, og i løpet av uka har jeg primært jobbet med å sette Zimbra i produksjon som nytt gruppevaresystem for skolene i Tønsberg og Nøtterøy kommuner. Vi kjører fra før av Novell eDirectory som katalogtjeneste og Novell NetMail som mailserver via IMAP, og vi måtte derfor ha på plass to ting.
Den første biten gjorde jeg ganske enkel, med et PHP-script som går igjennom hele LDAP-katalogen og lager kommandoer som kan brukes til zmprov:
<?php
$defaultpassword = 'defaultpassword_for_user';
$ldap1_con = ldap_connect("ldap://10.5.48.10");
if($ldap1_con) $ldap1_bind = ldap_bind($ldap1_con, 'cn=admin,o=VESTFOLD', 'very_secret_password');
if(!$ldap1_bind) die("LDAP1-bind failed...(".ldap_error($ldap1_con).")");
$findattrs = array("cn", 'description', 'fullName', 'sn', 'mail', 'givenName', 'title', 'company');
$search = ldap_search($ldap1_con, 'o=VESTFOLD', '(&(objectClass=Person)(|(title=Elev)(title=Laerer)(company=IKT)))', $findattrs);
if(!$search) {
// Search failed.
echo "LDAP-errno: ". ldap_errno($ldap1_con)."\n";
echo "LDAP-Error: " . ldap_error($ldap1_con)."\n";
}
$ldap = ldap_get_entries($ldap1_con, $search);
$output = NULL;
for($i=0;$i<$ldap['count'];$i++) {
$mail = $ldap[$i]['mail'][0];
$splitmail = split("@", $mail);
if(strpos($mail, "nottkom.no")) $kommune = 'Notteroy';
elseif(strpos($mail, "notteroy.kommune.no")) $kommune = 'Notteroy';
elseif(strpos($mail, "tbgskole.no")) $kommune = 'Tonsberg';
elseif(strpos($mail, "tonsberg.kommune.no")) $kommune = 'Tonsberg';
if($kommune == 'Tonsberg') $maildomain = 'tbgskole.no';
elseif($kommune == 'Notteroy') $maildomain = 'nottkom.no';
if($ldap[$i]['company'][0] == 'IKT') $policy = 'iktpolicy'; // IKTpolicy
elseif($ldap[$i]['title'][0] == 'Laerer') $policy = 'laererpolicy'; // Laererpolicy
elseif($ldap[$i]['title'][0] == 'Elev') $policy = 'elevpolicy'; // Elevpolicy
else $policy = 'default';
$username = $ldap[$i]['cn'][0]."@".$maildomain;
if(strpos($mail, $ldap[$i]['cn'][0])) $createalias = 0; // Mail contains username, do not create alias
else $createalias = 1;
$output .= "ca ".$username." $defaultpassword\n"; // Create account
$output .= "ma ".$username." displayName '".$ldap[$i]['givenname'][0]." ".$ldap[$i]['sn'][0]."'\n";
$output .= "ma ".$username." zimbraNotes 'Migrated ".date("Ymd H:i")."'\n";
$output .= "ma ".$username." sn '".$ldap[$i]['sn'][0]."'\n";
$output .= "ma ".$username." givenName '".$ldap[$i]['givenname'][0]."'\n";
$output .= "ma ".$username." ou '".$ldap[$i]['company'][0]."'\n";
$output .= "sac ".$username." '".$policy."'\n";
if($createalias) {
$output .= "aaa ".$username." ".$splitmail[0]."@".$maildomain."\n";
$output .= "ma ".$username." zimbraPrefFromAddress '".$splitmail[0]."@".$maildomain."\n";
}
$output .= "ma ".$username." zimbraPrefLocale no\n"; // Set default language to norwegian
# $output .= "aal -s SADM-MAIL02.ped.local ".$username." zimbra.soap debug\n";
# echo $ldap[$i]['cn'][0]."\n";
}
echo $output;
Lagre dette scriptet som eDir2Zimbra.php, og kjør det med php på kommandolinje (eller kjør det via en webserver og lagre teksten som kommer et sted på Zimbra-serveren
php eDir2Zimbra > /tmp/add_zimbraaccounts
Deretter kan den fila brukes som input til zmprov
su - zimbra -c 'zmprov < /tmp/add_zimbraaccounts'
Har ikke lagt inn muligheten for å deaktivere kontoer automatisk i Zimbra ennå, men scriptet kan trygt kjøres mange ganger. Må vel oppdatere scriptet rett over sommeren, når en god del av lærere og elever har sluttet “offisielt” i kildesystemene mine, slik at kontoene blir disablet i eDirectory.
Denne biten trodde jeg at jeg hadde rimelig klar. NetMail kjører all mailen i mbox-format, og jeg tenkte derfor orginalt å kjøre denne metoden:
Fikk dette til å fungere rimelig greit, men oppdaget når jeg testet med et par elever, som i hovedsak hadde fått masseutsendte eposter, at NetMail for å spare plass flytter ut mailer som er over 4k og sendt til flere enn 5 mottagere til et eget felleslager. Alle referansene i mbox-fila til dette felleslageret skapte problemer, og mailene kunne ikke (i hvertfall ikke lett) flyttes over.
Fordi NetMail lagret mailen i så sært format, så fant jeg ut at jeg for enkelthets skyld skulle bruke IMAP2IMAP-synkronisering. Testet litt med IMAPsync, og den fungerte rimelig greit, men jeg måtte ha passordet til alle brukerne for å foreta migreringen. Jeg vurderte det til at jeg kunne nullstille passordet til alle 8000 brukere, men vi har akkurat hatt en sak med elever som har fått tilgang til læreres passord, og byttet sine egne karakterer/fravær, og en slik prosess må nødvendigvis gjøres ekstremt kontrollert. Bestemte meg derfor at jeg ville forsøke å sniffe passordet til alle brukerne i stedenfor… (Yeah, I know: ugly som bare det, men jeg har i hvertfall fått det til å fungere).
Jeg kunne gjøre det på flere måter
Å prøve å sniffe passordet via NetWare-serveren slo jeg ganske fort fra meg. Hovedønske er å få alle brukerne over på nytt system, og det ville være vanskelig å få bytta over brukerne til nytt system, hvis de må logge seg inn på det gamle, og noen skal flyttes over til det nye “etterhvert”.
Å sniffe passordet mot IMAP på Zimbra-serveren kunne vært en mulighet, men jeg prioriterte det ned som løsning, da jeg ikke ønsker at brukerne skal bruke den gamle webmailen (integrert del av LMS-systemet vårt), men det nye å flotte webgrensesnittet til Zimbra. Det ville da være unaturlig å be brukerne om å “bruk den gamle et par ganger, og så benytt den nye etterpå”.
Jeg begynte først å leke litt med muligheten for å lage en Zimlet som foretar import av mail fra den gamle serveren, men fant ikke noen gode howtoer på området, og jeg ikke orket å bruke lang tid på prosjektet, for å lære meg å kode Zimlet’er. Lekte også litt med å legge inn en javascript-prosess tok i mot passordet man logget på med, og sendte det videre til et separat system. Greide her ikke å bli fortrolig med kodestilen til Zimbras JSP-kode, så slo det også fra meg.
Gikk til slutt videre med å titte på debug-loggene man kunne aktivere på en bruker, for å se om de hadde mulighet til å logge passordet til brukeren. Hverken IMAP eller POP-så ut til å logge passordene, men SOAP-interfacet logget disse ved pålogging på webmailen. Brukte derfor scriptet over til å lage en kommando fo å aktivere logging på alle brukere:
$output .= "aal -s SADM-MAIL02.ped.local ".$username." zimbra.soap debug\n";
Dette skal også kjøres via zmprov som over-
Etter dette, skrev jeg et kjapt script for å lete igjennom loggene etter brukernavn og passord, logge dette til en database, og så kjøre sletting av loggingen på den aktuelle brukeren. Fra databasen lagde jeg et nytt separat script som startet opp imapsync med riktig brukernavn og passord, og da var det bare for brukerne å logge inn, og vente til den gamle mailen dems var flyttet over til det nye flotte gruppevaresystemet vårt.
På skolenettet i kommunen har vi Novell eDirectory, og har gratis-mailsystemet Novell hadde i 2004 kalt NetMail for alle elever og lærere, med IMAP-tilkobling og lesing i LMSen. Denne mailserveren har vi bare hatt mer og mer problemer med etterhvert som årene har gått, og det faktum at den kjører på NetWare, noe ingen av oss på avdelingen egentlig har peiling på, gjør ikke problemene noe mindre.
Satte meg i forrige uke ned og testet mange forskjellige open source-gruppevaresystemer. I utgangspunktet hadde jeg et par små krav:
Hadde på forhånd blitt anbefalt om Zimbra fra en bekjent, som er utviklet av Yahoo!. Vi hadde sett litt på det på avdelingen, og var enige om at det AJAX-baserte grensesnittet var veldig bra, og at Zimbra løste mange (om ikke de fleste) problemene vi hadde hatt med LMSen og nåværende mailserverløsning.
Satte i gang installasjonen av Zimbra, men slet lenge med å få til autentisering mot eDirectory. Ingen av dokumentasjonene jeg greide å finne viste noe relevant for problemene mine. Jeg ga til slutt opp, og begynte å labbe på noen andre løsninger. I forbindelse med testing av en av disse løsningene, fant jeg dokumentasjon som viste seg å være relevant. I NetMail har vi opprettet mange brukerkontoer, og for lærere har vi opprettet alias-objekter som fornavn.etternavn for å få disse som e-post-adresser. Disse alias-objektene ser ut som ordinære brukere når de listes opp i LDAP, og dermed ble problemet at uansett hvordan man søkte etter brukere, så fikk man to svar, og Zimbra og de andre gruppevareløsningene greide ikke å bestemme hvilken av disse brukerobjektene den skulle bruke, og ga feilmelding på det. Flyttet alle aliasene ut fra OUene for brukerne, og problemet var løst.
Har nå satt opp Zimbra for test for endel skoler, og det ser ut til å fungere rimelig bra. Zimbra er en skalerbar løsning, og forhåpentligvis vil vi etterhvert få en veldig god e-post-løsning, med mye funksjonalitet. Gleder meg allerede til vi kan sette dette i produksjon.
I kveld har vært med på noe jeg anser som noe av det største som har skjedd i mitt liv til nå: Paneldebatt/techtalk på GoOpen med noen av de største menneskene innen open source-bevegelsen; Larry Wall (laget scriptingspråket Perl), Simon Phipps (Chief Open Source Officer hos Sun Microsystems), Jon “maddog” Hall (bl.a. leder av Linux International) og Bruce Perens (forfattet definisjonen av hva open source var for noe for Open Source Initative, samt tidligere prosjektleder for Debian-prosjektet). I tillegg ble dette ledet av Håkon Wium Lie, som ikke er helt ukjent for sitt arbeid med å være med å skape World Wide Web, og spesielt CSS-spesifikasjonen.
Og på første rad foran alle disse menneskene satt jeg og fulgte med…
Bet meg spesielt godt merke til en kommentar som kom fra Simon Phipps etter at det kom opp spørsmål om “Er open source kommunistisk, og kan det fungere i en kapitalistisk verden”. Et spørsmål jeg har tenkt på mye selv i det siste. Mange open source-tilhengere er sosialister, mens jeg selv ikke er det (sosialist altså, jeg er absolutt open source-tilhenger
), og mye av ideologien om å dele godene passer opp mot kommunismen.
Phipps sa da at (fritt oversatt av meg) “De som taper ofte snur om på rollene de selv har, mot den rollen som motstanderen har. I dette tilfellet handler kommunismen om sentral styring av noen få på vegne av de mange, mens kapitalismen handler om fri konkurranse. Sentral styring av noen få på vegne av de mange er i dette tilfellet de som lager produsenteid programvare, og fri konkurranse kommer som en naturlig del av open source”.
Må si meg veldig enig i denne definisjonen… Mer konkurranse, spesielt i offentlig sektor; mer open source!