Selenium and text-based testing

Ever since I saw PyUseCase I’ve been longing for a port which runs with web apps. I’ve been thinking briefly about actually doing this, using Selenium as the engine/driver. To make it usable, I guess I’d have to make TextTest ignore certain aspects of the DOM/HTML-tree (such as automatically-generated ID attributes, and positions of nodes, a dialog “window” for instance).

Today I saw the Tellerium IDE, which is a plugin for Firefox, and that got me even more motivated to actually go ahead and try to move towards a WebUseCase port for xUseCase and TextTest. Now I just need to find the time to make this happen …

Linux RAID-lek (md)

Uppgraderade filburken hemma med minne som hittades i skrotrummet (slängde julklappsförpackningar). 2GB SDRAM 667MHz bör göra maskinen snabbare än en 1GB som framtvingar viss swap-aktivitet på en slö slö slö SSD. Efter ingreppet så dök dock inte alla raid-enheter upp.

root@filserver:/var/log# mdadm --assemble --scan
mdadm: no devices found for /dev/md0
mdadm: no devices found for /dev/md2

F**k.

root@filserver:/var/log# mdadm --examine --brief --scan --config=partitions
ARRAY /dev/md4 level=raid1 num-devices=2 UUID=87afd380:6018cbda:c6d7c43e:eb241c8e

F**k.

root@filserver:/var/log# dmesg | tail
[ 4931.527092] md: Autodetecting RAID arrays.
[ 4931.527104] md: could not bd_claim sdc1.
[ 4931.527144] md: could not bd_claim sdb1.
[ 4931.527178] md: Scanned 2 and added 0 devices.
[ 4931.527181] md: autorun ...
[ 4931.527183] md: ... autorun DONE.
[ 5050.771944] md: md0 stopped.
[ 5050.781177] md: md2 stopped.
root@filserver:/var/log# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1  /dev/sdc  /dev/sdc1  /dev/sdd  /dev/sdd1  /dev/sdd5

shutdown -h now, öppnade locket på burken och såg att PATA-kortet inte satt i ordentligt. Tryckte dit det, startade upp maskinen igen och kontrollerade med

ceda@filserver:~$ lspci
00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller (rev 10)
00:02.0 VGA compatible controller: Intel Corporation 82G33/G31 Express Integrated Graphics Controller (rev 10)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 01)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 03)
03:02.0 Mass storage controller: Promise Technology, Inc. PDC20268 (Ultra100 TX2) (rev 02)

Sista raden där ser fin ut.

ceda@filserver:~$ dmesg | grep md
[    0.807822] ata1: PATA max UDMA/100 cmd 0x1f0 ctl 0x3f6 bmdma 0xffa0 irq 14
[    0.807826] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0xffa8 irq 15
[    0.809708] ata3: SATA max UDMA/133 cmd 0xc080 ctl 0xc000 bmdma 0xb800 irq 19
[    0.809711] ata4: SATA max UDMA/133 cmd 0xbc00 ctl 0xb880 bmdma 0xb808 irq 19
[    0.939487] ata5: PATA max UDMA/100 mmio m16384@0xfebfc000 cmd 0xfebfd7c0 irq 23
[    0.939490] ata6: PATA max UDMA/100 mmio m16384@0xfebfc000 cmd 0xfebfd5c0 irq 23
[    1.856559] md: linear personality registered for level -1
[    1.863976] md: multipath personality registered for level -4
[    1.866589] md: raid0 personality registered for level 0
[    1.870177] md: raid1 personality registered for level 1
[    1.965696] md: bind<sdc1>
[    1.987377] md: bind<sde5>
[    1.992221] md: bind<sdb1>
[    1.996833] raid1: raid set md4 active with 2 out of 2 mirrors
[    1.996869] md4: detected capacity change from 0 to 5...
[    1.998939]  md4: unknown partition table
[    2.139566] md: bind<sde6>
[    2.174302] md: bind<sdf6>
[    2.177122] raid1: raid set md2 active with 2 out of 2 mirrors
[    2.177159] md2: detected capacity change from 0 to 8...
[    2.179237]  md2:raid6: mmxx1     2494 MB/s
[    2.575133] md: raid6 personality registered for level 6
[    2.575136] md: raid5 personality registered for level 5
[    2.575138] md: raid4 personality registered for level 4
[    2.575744] md: bind<sdf5>
[    2.583390] md: raid10 personality registered for level 10
[    2.584960] raid1: raid set md0 active with 2 out of 2 mirrors
[    2.585036] md0: detected capacity change from 0 to 7...
[    2.587043]  md0: unknown partition table
[    3.671105] EXT4-fs (md0): barriers enabled
[    3.684246] kjournald2 starting: pid 469, dev md0:8, commit interval 5 seconds
[    3.684296] EXT4-fs (md0): warning: checktime reached, running e2fsck is recommended
[    3.715106] EXT4-fs (md0): internal journal on md0:8
[    3.715110] EXT4-fs (md0): delayed allocation enabled
[    3.715275] EXT4-fs (md0): mounted filesystem with ordered data mode
[    3.796771] EXT3 FS on md2, internal journal
[    3.816485] EXT4-fs (md4): barriers enabled
[    3.833274] kjournald2 starting: pid 475, dev md4:8, commit interval 5 seconds
[    3.833327] EXT4-fs (md4): warning: checktime reached, running e2fsck is recommended
[    3.856742] EXT4-fs (md4): internal journal on md4:8
[    3.856746] EXT4-fs (md4): delayed allocation enabled
[    3.857497] EXT4-fs (md4): mounted filesystem with ordered data mode

Gött. Inga semesterbilder förlorade. Dags att ordna offsite-backup igen. Partitionslista mailas en gång i månaden, så den finns “off site” iaf.

PGP och keysigning-part

FOSDEM Logotype
Free and Open Source Developers' European Meeting

Är påväg till FOSDEM i år igen. Det är en konferens inte lik någon annan (även om FSCONS ger ungefär samma stämning) som är helt fri att gå på och hålls på LUB-universitetet i Bryssel, första helgen i februari. Förväntningarna på Free Java-rummet  detta år är att det någon gång bryter ut i en fullständig politisk diskussion med smutskastning, bittra miner och “vi som klarar oss utan JCP, TCK osv”. Utöver det bör det som vanligt vara PGP-signering och CAcert Assurance-fest och en möjlighet att bli certifierad Linux-expert. Problemet med det sista brukar vara alla intressanta föreläsningar som än så länge prioriterats högre. Kanske är det dags att skaffa formellt intyg på Linux-kunskaperna.

En riktigt rolig tillställning är det i alla fall, med öppensinnade människor som lever för att dela kunskap och lära.

Gällande nyckelsignering så är verktyget caff (CA – Fire and Forget) helt oumbärligt för att orka med att signera hundratals nycklar. Under Ubuntu är det paketerat i signing-party. Caff tar en rad nyckel-ID:n som argument, hämtar hem nyckeln, signerar (interaktivt), skickar sedan nyckeln till varje e-postadress för respektive UID som ingår i nyckeln. Den skickade nyckeln är krypterad med den publika nyckeln så man kan vara säker på att man bara signerar nycklar till folk som den verkligen tillhör. Biff sade räven.

För att komma igång så bör man byta nyckelserver (jag kör pgp.mit.edu) och redigera .caffrc för att ställa in e-postsaker och ange nyckel man vill signera med. Sedan är det rätt rättframt.

CACert Assurer

CAcert Assurer Badge
CAcert Assurer

Sedan ett par minuter tillbaka är jag godkänd som CAcert Assurer. Det innebär att jag kan intyga identiteter och dela ut poäng till CAcert-medlemmar (så att de kan få fler poäng och bättre certifikat).

Målet med CAcert är att genom en transparent process och ett web of trust, bygga upp certifikathantering som är fri och likvärdig den traditionellt “kommersiella” (och grymt exploaterade) hanteringen. På kort sikt vill man se till att bli tillräckligt godkänd för att root-certifikatet skall distribueras med Mozillas alla produkter, t ex Firefox. När det målet är nått kan man alltså utan kostnad skaffa ett SSL-certifikat för sin webbserver och använda HTTPS utan att vara tvungen att betala avgift för att erhålla ett certifikat signerat av en betrodd CA.

En högst parentesaktig reflektion är att Debian borde vara med på detta som hökar kan jag tycka. De har ju fört seriösa diskussioner om en egen topp-nivå-domän (TLD) och DNSSEC:a en egen root-zon (om jag inte förstått det fel).

OpenVPN

Sätter upp OpenVPN för fjärde gången på kort tid (ett år) och denna gång skriver jag ner mina egna anteckningar istället för att följa någon annans som fungerar halvbra.

Tills vidare baserat på Virtual VPN Howto från riseup.net, fast med skillnaden att jag vill ha betrodda klient-certifikat (dvs med inslag från Sebastien Wains anteckningar.

På servern

echo “1” > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.30.0.0/24 -j MASQUERADE

aptitude install openvpn opencs #opencs behövs för pkcs11-tool
cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.0
vim vars
source vars
mkdir KEY_DIR
./clean-all #skapar index.txt och serial
./build-ca #defaults (bara trycka enter)
./build-key-server vpn.domain.org # defaults (bara trycka enter, sedan y, men fixa domännamnet)
./build-dh #skapar dh1024.pem
./build-key clientX.vpn.domain.org #skapar csr, crt och key för klienten
vim /etc/defaults/openvpn #AUTOSTART=”wains2-server”
cat >> /etc/openvpn/wains2-server.conf

På klienten

sudo aptitude install openvpn network-manager-openvpn-gnome
scp ceda@vpn.wendt.se:/etc/openvpn/keys/clientX.* .
cat >> wains2-client.conf
testa manuellt med sudo openvpn wains2-client.conf
Sedan kan resten skötas med Network Manager GUI:t:

todo: Google Latitude Client for Maemo

I figure it’d take me four hours to create an app that, when launched gets the current location from the device (there’s a lib for that), converts it to long/lat coords and posts it to Google using the Google Latitude API (a simple RESTful service).

  1. Register for API key
  2. Register Application
  3. Get OAuth up and running (1h)
  4. Post dummy coordinates to Google Latitude (1h)
  5. Get location from the device (1h)
  6. Write authentication GUI (1h)
  7. Write application that looks for valid credentials (step 3), ask for authorization if not given already (step 6), gets location from the device (step 5) and posts it to Google Latitude (step 4)

I’d call that a day and the next day I’d look at creating a service out of this.

  1. Write application that wakes up at a certain interval (or several, more often during wake hours)
  2. Write GUI to change interval settings (or several …)
  3. Write settings storage (GConf)
  4. Write application that checks for authentication, if not present, launch GUI? (if not running) otherwise update position with Google Latitude and then sleep until next “interval”

After that, I’d call it a day and the next day:

  1. Register a new product with Maemo Garage.
  2. Post a message on the Maemo Forum.
  3. Publish “product” to Extras and wait.

All it takes is a little Python, some extra time and some patience for the Maemo community to have it’s way with QA-testing etc.

Skype-länkar

Det var ett sabla pill (och letande) för att få callto-, tel- och skype-länkar att hanteras från en webbläsare. Lite förvånande att skype inte skickar med detta från början (gäller Linux).

Hur som helst, min arbetsväg:

  • xdg-open är bra att använda när man skall öppna URLer
  • xdg-open använder gnome-open (i min miljö)
  • gnome-open använder gconf och kikar under /desktop/gnome/url-handlers för att hitta en url-handler som hanterar URLens schema (http t ex)
  • varje “url-handler” skall ha tre nycklar:
    • command – kommandot som körs, t ex /home/ceda/bin/skype.py %s
    • enabled – true/false
    • use_terminal – true/false

Sedan var det bara att hitta ett lämpligt kommando. Skype visade sig inte stödja något alls vad gäller binären och flaggor till programmet. Däremot använder man tydligen DBus och därigenom är möjligheterna större. Efter ett tags letande hittade jag Philipp Kolmanns skript skype action handler.

Nästan klart – det har ett tillkortakommande vad gäller URL-kodning. En ring-länk till mig skulle se ut såhär: callto:+46702778511 och Philipps skript hanterade inte att plustecknet kodades om till %2B. Jag fixade detta såhär:

# urldecode
if '%' in sys.argv[1]:
        import urllib
        sys.argv[1] = urllib.unquote(sys.argv[1])

Nu funkar det fint! (Vem var det nu jag skulle ringa egentligen …)

Vad, vem och vems rätt – sanningsläcka på WikiLeaks

WikiLeaks logotype
WikiLeaks har tagit emot nya dokument från en eller flera whistle blowers. Sanningen är tydligen obekväm för stora delar av USAs statliga verksamhet. Det är min tolkning efter att ha sett den ovanligt febrila verksamhet som tagit fart med sikte mot att få WikiLeaks att sluta fungera – en historia som nu kallas cablegate.

Här är IP-adressen till WikiLeaks – om du letar: http://213.251.145.96/
Om den inte fungerar, sök efter “Wikileaks ip address” på twitter.

The Huffinton Post skriver: “State Department To Columbia University Students: DO NOT Discuss WikiLeaks On Facebook, Twitter”. Om du inte har läst 1984 av George Orwell (på engelska), gör det nu! Det är en kort bok och den är inte särskilt svår att ta till sig eller komma igenom.

Enligt gawker.com så har Library of Congress, liksom the Department of Education blockerat WikiLeaks, medan State and Commerce departments instruerar de anställda att inte besöka siten.

Rick Falkvinge menar att när internetleverantörer sätts under tryck, donationskanaler dras in och processkraft dras tillbaka, så är det “fullt krig om informationen“. “Jag tycker att media borde reagera hårdare när politiker säger att uppgiftslämnare borde skjutas…”

Visst vill vi att information skall få vara fri? (Vilken del av mänskligheten tar skada av fri information?) På flera håll i Europa agerar olika organisationer för att säkra WikiLeaks nätnärvaro.

WikiLeaks frontman (finns flera som vill byta ut denna trubbige person) är ingen speciell egentligen – han har bara sett till att whistleblowers har någonstans att vända sig.

PayPal

På svengelska:

I’ve read disturbing news about PayPal withdrawing the channel that has been available to support the work of WikiLeaks.
Was this an active decision made by PayPal or were you forced under some jurisdiction of law to move in this direction?
Please act transparently and tell us the thruth, so I and others, as users, know how to interpret you as a company and what just happened.

Sincerely, Fredrik Wendt

Uppdatering: PayPal skriver på sin blog (som inte är länkad från den publika webbplatsen):

PayPal has permanently restricted the account used by WikiLeaks due to a violation of the PayPal Acceptable Use Policy, which states that our payment service cannot be used for any activities that encourage, promote, facilitate or instruct others to engage in illegal activity. We have notified the account holder of this action.

WikiLeaks Flattr-konto är fortfarande igång dock. Får se om folket i Malmö väljer att se WikiLeaks som olagligt.

New York Law School: WikiLeaks Has Commited No Crime