Alt om ingenting og litt i mellom En blogg av Knut-Olav

Den første harddisken jeg ikke har klart å redde… var min egen

14. oktober 2010 · Comments Off

Jeg har flere ganger klart å gjenopprette data fra en krasjet datamaskin. Ofte er dette for å hjelpe familie og bekjente som har fått maskinen sin infisert med virus og annet grums, mens andre ganger har jeg måttet ta ddrescue til hjelp. Denne gangen derimot klarte ikke ddrescue å hjelpe meg. Harddisken hadde begynt å spille musikk og hørtes ut som et orgel på steroider.

Det så ut til at jeg bare måtte la det gamle OpenBSD-installasjonen gå dukken, finne fram en annen gammel harddisk og installere OpenBSD på nytt.

Heldigvis hadde jeg tatt backup, men dessverre ikke av alt. Jeg manglet backup av nettverksinnstillingene og av DNS-serverinnstillingene.

Heldigvis klarte jeg å montere opp noen av partisjonene på disken og kopiere ut resten av konfigurasjonen.

Så nå er en flunkende ny installasjonen av OpenBSD på plass, så noe godt kom ut av dette. Jeg har ennå ikke satt opp backuprutine for denne maskinen, så jeg lærer tydeligvis seint…

MySQL, PHP, MDB2 og NULL-problemer

2. oktober 2010 · Comments Off

MDB2 har en fin kompatibilitetsliste for å kompansere for problemer i Oracle SQL, men disse er også aktivert for andre databaser.

Med andre ord så blir tomme strenger (“”) behandlet som NULL. Dermed rapporterer MySQL med en feilmelding dersom du forsøker å sette en tom streng i et “NOT NULL”-felt. Hurra!

Heldigvis går det an å skru av kompatibilitetslagene i MDB2.

JavaZone jz10 dag 2

19. september 2010 · Comments Off

Nå er det riktignok gått halvannen uke siden JavaZone var over, men en kort oppsummering av dag to kan allikevel tillates.

På den andre dagen, 9. september, lærte jeg litt om “Matching Engines”, om høye krav til ytelse og nøyaktighet og fikk virkelig innblikk i at tid koster penger, spesielt på nedetid.

Videre lærte jeg ikke så mye nytt om offentlige data. Synd at hele panelet utelukkende bestod av folk som ønsker fri tilgang til offentlige data, men ingen med myndighet til å kunne gjøre noe med det.

Så skulle jeg lære om hva jeg gjør feil med domenedrevet design (DDD), men foredragsholderen var forsinket, så jeg sneik meg inn på en sesjon om planlegging og å ta valg i utviklingsteam. Spesielt én ting fant jeg svært interessant, å premiere feiling for å oppmuntre til å ta sjanser og utfordre seg selv.

Videre lærte jeg hvordan man kan implementere Dungeon and Dragons i RESTful web services basert på prinsippene rundt HATEOAS, å bruke HTTP som motoren til å drive tilstand i applikasjoner.

Så lærte jeg at man må kjøpe Coherence for å bekjempe ytelsesproblemer i systemer. Et foredrag med stort preg av å selge inn Oracle-produktet, dessverre.

Så forvillet jeg meg inn på et foredrag om vedlikehold og utvikling av legacy-systemer.

Til slutt så fikk jeg med meg foredraget om domenedrevet design som ble satt opp. Greit å bli oppdatert på de mer vanskelige aspektene rundt denne teknikken, og selv om foredraget var kort så passet det egentlig bra som avslutning på JavaZone.

Nå er video av foredragene lagt ut på java.no. Har allerede sett noen lyntaler og lengre foredrag, og kan anbefale lyntalene om “97 things every programmer should know” og “Hjemmelaget er bedre enn takeout”, hvor begge lufter tanker om å kaste idéer og kode som blir for vanskelige å integrere eller som kommer i veien.

Selv så er jeg dårlig på å kaste kode, men jeg har i det siste kastet kode et par ganger, og selv om det gjør vondt der og da, så savner jeg ikke koden jeg skrev. Det er faktisk deilig å ikke ha uinnsjekket kode liggende over lengre tid.

Det jeg skal ta med videre fra JavaZone 2010 er idéene rundt HATEOAS og event drevet arkitektur. Sistnevnte har jeg allerede utforsket mye på fra før, og dette er motoren for å dytte data rundt i prosjektet jeg for tiden jobber på.

JavaZone jz10 dag 1

9. september 2010 · Comments Off

Dag 1 er over for JavaZone 2010. Det har vært mange temaer og tankene svever nå litt rundt i skyen foreløpig.

Jeg lærte i dag at hvis man plasserer en Map/Reduce-jobb hos Amazon, så tar det ca 30 ganger lenger tid å kjøre enn på en laptop.

Jeg lærte at hvis webappen din sliter under høy last mot eksterne ressurser, så legg inn sleep(1).

Jeg lærte at Collaborative Filtering kan være et spennende tiltak for å gi noe ekstra tilbake til brukerne.

Jeg lærte at det finnes mange tilnærminger til eventdrevet design.

Jeg lærte at Datalagringsdirektivet har forkjempere og motstandere som ikke alltid klarer å finne ut hvordan livets, trygghetens og frihetens vektskål skal balanseres.

Jeg lærte at RESTful ikke handler om XML og pene URL-er, men om å håndtere state mellom klient og tjener og at resten er bare hjelpemidler for å komme seg dit.

Jeg lærte at det finnes alltid et sikkerhetstiltak som man ikke har tenkt på eller ikke har forstått konsekvensene av.

Jeg lærte at Java har en tung vei å gå for å skape typeorienterte vaner.

Jeg lærte at man bør ha fulladet telefon før man drar på JavaZone.

Enkel virtualisering med KVM

2. september 2010 · Comments Off

Mest som et notat for min egen del, men det kan være nyttig for andre også.

Jeg hadde nettopp behov for å sette opp et utvikler driftsmiljø for en PHP-applikasjon jeg skriver. Jeg ønsket ikke å sette den opp på arbeidsstasjonen min da jeg ikke ønsker å male meg opp i et hjørne dersom denne skal byttes ut eller oppgraderes. Det å sette opp et driftsmiljø er noe kjedelig dersom det må gjøres for ofte. Bestemte meg derfor å teste ut KVM.

KVM og QEMU er noenlunde like, på en måte, hvorav KVM er maskinvareakselerert virtualisering. QEMU støtter virtualisering av flere plattformer, dersom man har behov det.

Etter et par søk på Google fant jeg fram til artikkelen Using Linux KVM Virtualization on Ubuntu Gutsy Gibbon 7.10 som beskriver veldig enkelt en del kommandoer man kan kjøre.

Jeg lastet ned nyeste Ubuntu. Først forsøkte jeg amd64-versjonen, men denne fungerte ikke da jeg tydeligvis kjørte i686-versjon av Ubuntu på vertsmaskinen. Selv om CPU-en støtter 64bit så er det OS-et som må støtte 64 bit dersom du ønsker å kjøre 64-bit gjeste-OS i KVM. Så jeg endte opp med å laste ned i386-versjonen av Ubuntu Lucid.


$ qemu-img create lucid-server.img -f qcow2 10G
$ kvm -no-acpi -m 750 -cdrom $HOME/ubuntu-10.04.1-server-i386.iso -boot d  -k no -vnc :2 lucid-server.img

Legg merke til opsjonen “-vnc :2″ som gjør at KVM setter opp en VNC-server på port 5902. Dette gjorde jeg fordi jeg ikke ønsker at vinduet med den virtuelle serveren skal vises på vertsmaskinen, men jeg vil allikevel ha muligheten til å se skjermbildet. Dette er strengt tatt også nødvendig for å installere Ubuntu. :)

PS: Sånn helt på tampen… boota nettopp Ubuntu 10.04 i KVM på en 3 år gammel maskin… vips var loginskjermen der – rask! :D

OPPDATERING:
For å sette opp bridge-nettverk slik at den virtuelle maskinen kan motta IP-adresse fra DHCP, så må du konfigurere et bridge-grensesnitt på vertsmaskinen. På Ubuntu gjør du det ved å legge til følgende i /etc/network/interfaces:


auto br0
iface br0 inet dhcp
    bridge_ports    eth0
    bridge_stp      off
    bridge_maxwait  0
    bridge_fd       0

Du må reloade nettverksinnstillingene:

/etc/init.d/networking restart

Til kvm-kommandoen for å starte den virtuelle maskinen legger du til følgende opsjoner:


-net nic,vlan=0 -net tap,vlan=0,ifname=tun0

Ladekabel og datakabel for HTC Desire – Micro USB

24. juli 2010 · Comments Off

Jeg fant ut i dag noe jeg mistenkte for noen dager siden, at ladekabelen til HTC-telefoner som jeg kjøpte på Elkjøp ikke var en fullkommen Micro USB-datakabel, men bare en ladekabel. Det kom ikke noe opp i loggene og dmesg da jeg kobla telefonen til PC-en, ingen nye enheter ble detektert.

Jeg bestilte så en helt vanlig Micro USB-kabel på Komplett.no, henta den på Posten i dag og testa, og vips så dukka den opp på PC-en og telefonen ble satt i synkroniseringsmodus.

Fra dmesg:


[1668040.520065] usb 2-1: new high speed USB device using ehci_hcd and address 16
[1668040.683373] usb 2-1: configuration #1 chosen from 1 choice
[1668040.699678] scsi9 : SCSI emulation for USB Mass Storage devices
[1668040.700616] usb-storage: device found at 16
[1668040.700622] usb-storage: waiting for device to settle before scanning
[1668045.710103] usb-storage: device scan complete
[1668045.716922] scsi 9:0:0:0: Direct-Access     HTC      Android Phone    0100 PQ: 0 ANSI: 2
[1668045.755374] sd 9:0:0:0: [sdb] 7698432 512-byte hardware sectors: (3.94 GB/3.67 GiB)
[1668045.757120] sd 9:0:0:0: [sdb] Write Protect is off
[1668045.757128] sd 9:0:0:0: [sdb] Mode Sense: 03 00 00 00
[1668045.757133] sd 9:0:0:0: [sdb] Assuming drive cache: write through
[1668045.817134] sd 9:0:0:0: [sdb] 7698432 512-byte hardware sectors: (3.94 GB/3.67 GiB)
[1668045.818298] sd 9:0:0:0: [sdb] Write Protect is off
[1668045.818300] sd 9:0:0:0: [sdb] Mode Sense: 03 00 00 00
[1668045.818302] sd 9:0:0:0: [sdb] Assuming drive cache: write through
[1668045.818308]  sdb: sdb1
[1668046.067608] sd 9:0:0:0: [sdb] Attached SCSI removable disk

lsusb:


Bus 002 Device 023: ID 0bb4:0ffe High Tech Computer Corp.

Husk å aktivere debugging på telefonen hvis du skal koble til med Android SDK adb.

Debugging Google Maps in Android applications – uses-library

20. juli 2010 · Comments Off

If your application is failing with a ClassNotFoundException of the class com.google.android.maps.MapView, then the uses-library tag might be misplaced or missing from the application manifest XML.

When adding Google Maps to your Android application, make sure that the <uses -library>-tag is inside the <application>-tag of the manifest XML. This might be obvious, but I got this wrong and it took me a long time to figure out the real reason for the error.


<uses -library android:name="com.google.android.maps" />

Synkronisere kontaktlista fra iPhone til Android uten iTunes

10. juli 2010 · Comments Off

Jeg har nylig fått meg Android-telefonen HTC Desire, og trenger å kopiere over kontaktlista fra iPhone 3G til Desire. Det er mulig å kopiere over kontaktlista fra iPhone via iTunes, men ikke hvis man bare har PC-er med Linux-OS.

Etter noen søk i Apple App Store fant jeg et program som heter Ubuntu One Contacts som kan synkronisere kontaktlista på iPhone opp mot Ubuntu One, en nettjeneste for å synkronisere filer mellom PC-er og dele filer og kataloger med andre.

Etter registrering på Ubuntu One, setter man opp innstillingene for mobiltelefon her, hvor du får tildelt brukernavn og passord, som skal brukes i Ubuntu One Contacts på iPhone. Dette er ikke samme innlogging som på nettsiden, hvor du logger inn med e-postadresse og selvvalgt passord.

Etter installering av Ubuntu One Contacts, skriver du inn brukernavnet og passordet du ble tildelt. Serverinnstillingene skal allerede være utfyllt med http://syncml.one.ubuntu.com. Du mottar også e-post med instruksjoner underveis. Gå så tilbake til forsiden av applikasjonen og trykk “Sync Contacts”. Hvis synkroniseringen fullfører uten feil skal du kunne se kontaktene dine på kontaktlista på Ubuntu One.

Sånn, da var den vanskelige halvparten av jobben gjort, å få ut dataene fra iPhone.

I Android Market søker du etter funambol og installerer Funambol Sync. Denne setter du opp med samme innstillinger som Ubuntu One Contacts på iPhone. Hvis du ikke husker brukernavn og passord står det i e-posten du har fått fra Ubuntu One.

Whoala, kontaktene er synkronisert.

OPPDATERT 18.01.2011
Jeg kan ikke lenger anbefale denne løsningen. Ubuntu ONE har stengt mobilsynkronisering for “basic”-kontoer.

Debugging MythTV 0.23 and ivtv

8. juli 2010 · Comments Off

If you have a Hauppauge PVR-500 card and recently upgraded Ubuntu to latest 10.04 Lucid, then you might have had problems viewing live TV.

The quick fix might be to just install the package “ivtv-utils” and to reconfigure the video input/sources with mythtv-setup.

I also had a problem with disconnects and warnings of wrong protocol version. I cleaned out the database and deployed a new database with the sql file from /usr/share/mythtv/sql. That might be because of some badly configured IP-addresse for the backend and master, but I could actually not see why it changing from my LAN IP-address to 127.0.0.1 would have anything to do with it.

Anyway… Try installing ivtv-utils first. After installing that package the MPEG2 capture card selection becomes available. First I tried using the v4l option, but that didn’t work, not even any useful log messages to work with.

whiptail – enkel dialogboks for terminalen

7. juni 2010 · Comments Off

Dette er først og fremst en huskelapp for min egen del, men kanskje nyttig for andre også.

Jeg har laget mange shellscripts for å hjelpe meg i systemutvikling og til vedlikehold av tjenester. Av og til har jeg behov for å bekrefte at jeg virkelig ønsker å utføre handlingen, i tilfelle man skulle kjøre kommandoen ved et uhell, for eksempel å tømme Solr-indeksen (Solr er en søkemotor, et prosjekt fra Apache).

Ofte holder det med å bruke “read” for å lese inn tekst til en variabel, men et verktøy som heter “whiptail” gir et ncurses-grensenitt som tilbyr brukeren til å utføre forskjellige valg, for eksempel valget om “ja” eller “nei” for å utføre en kommando.

Som det aller enkleste eksempelet har man “yesno”-dialogboksen:


 # Ja/Nei-dialogboks med 10 rader og 50 kolonner
 # Skriver "jada" på skjermen hvis man velger "ja"
 whiptail --yesno "Vil du virkelig gå videre?" \
   10 50 && echo "jada"

Man kontrollerer svaret fra dialogboksen med exit-koden fra whiptail. Svarer man så “ja” i dialogboksen skrives “jada” ut på skjermen. Svarer man nei, så gjør den det ikke. Så enkelt.

Et annet eksempel er å vise en liste med som brukeren kan velge blant:


 whiptail --menu "Velg noe" \
   10 50 2 \
   1 "Valg 1" \
   2 "Valg 2" \
   3 "Valg 3" \
   4 "Valg 4"

Argumentet “2″ angir hvor mange valg som skal vises ad gangen, etterfulgt av ID/tekst-par for valgene. ID-en til valget som brukeren velger blir skrevet på skjerm.

Man har også andre former for dialogbokser, se “man whiptail” for flere opsjoner.