VNC-studsare

Jag hade för fem år sedan en egenskriven blogg. Sedan åt jag upp databasen. På den fanns iaf instruktioner för hur man lätt kunde sätta upp VNC på windows så att man kan hjälpa en människa i nöd.

Eftersom både jag och t ex min far befinner oss bakom en NAT/router så är det inte helt rättframt. För att lösa detta satte jag upp en VNC-studsare – en bit Java som knöt ihop två TCP-koppel. Idag skulle vi behövt detta. Eftersom jag inte hittade det så skrev jag ihop det på nytt.

De övergripande instruktionerna är att servern (den som behöver hjälp) ansluter med “reverse” (x11vnc -connect host:port) och klient (den som ger hjälp) till samma port på studsservern.

Mer detaljerade Windows-instruktioner får vänta tills nästa gång.

Studsserver

Kör VncBouncern. Den skriver ut porten som används.

Linux

Lite kommandon:

x11vnc -connect localhost:`netstat -lnp | grep java |tr ':' ' ' | tr -s ' ' | cut -d ' ' -f 4`
vncviewer 192.168.1.157:`netstat -lnp | grep java |tr ':' ' ' | tr -s ' ' | cut -d ' ' -f 4`-encodings "copyrect hextile corre rre"

Bakgrunden till -encodings är att när man ansluter till sin egen maskin för att testa så säger vncviewern “Same machine: preferring raw encoding”, och det går apslött.

Om Milltime

Milltime Professional är ett trevligt verktyg och detta ville jag framför. Längst ned på skaparens hemsidan fanns också en länk för “Feedback” – kanon. Dessvärre var den rutan begränsad till 500 tecken. Så här är min riktiga feedback, oavkortad.

Hej.

Jag har precis använt Milltime Professional för första gången och tycker rent allmänt att det är ett kanonverktyg att använda för en utekonsult – tack vare veckovyn. I övrigt är det väldigt klickbaserat vilket inte är lika kul när man jobbar på många projekt samtidigt. Veckovyn är verkligen kanon i detta sammanhang.

Det enda jag saknar är smidig inloggning. Jag hade gärna sett att man kunnat registrera ett OpenID för sitt konto och på det sättet fått bra integration med andra lösningar, t ex Google, Plaxo, WordPress, Yahoo, AOL – ja, listan är lång och företag som stödjer detta är bland andra Microsoft, Sun, VeriSign och Paypal.

http://en.wikipedia.org/wiki/OpenID

Det finns färdiga bibliotek för alla tänkbara plattformar och det enda som påverkas är autentiseringen i er produkt. Jag hoppas ni ser ett värde i att kunna återanvända den autentiseringsmekanism som era kunder redan använder (t ex alla som använder Googles tjänster).

Vänligen,

Fredrik Wendt

Ämnen för Java-TDD

Tittar på att gå ett steg längre med TDD-workshops och lämna de grundläggande ämnena. Följande har efterfrågats:

  • testning med/av legacy code
  • vad är bra respektive dåliga test
  • funktionell eller acceptansdriven testning (ATDD)
  • beteende driven utveckling (BDD)

Egna saker jag själv skulle vilja gräva lite mer i och ägna ett par timmar åt:

  • hamcrest (matchers)
  • dotmesh (methods)
  • making EasyMock suck less
  • making Mockito suck
  • easyB
  • Fitnesse

I allmänhet så saknar jag en diskussion om hur lättredigerade test (wiki?) versionshanteras ihop med koden de testar eller är skrivna mot. Detta är ju högst intressant när man går in och gör en hot-fix för en produkt som rört sig mycket under ett år, och en kund som har produkten i drift sedan ett drygt år tillbaka vill sin fix. Hur kör man samma testsvit som man hade för ett år sedan på ett enkelt sätt? Hur är egentligen inte svårt. Jag har bara inte sett många bra lösningar, ännu. TextTest, xUseCase och liknande plain text-ramverk är en bra lösning. Frågan är bara om testen är tillräckligt tillgängliga för ATDD – hur får man kunden att känna att det är hans/hennes test?

Get Trac back on Track

Trac is great – it just works for so much straight right out of the box. It’s not perfect though. And the fixes I need I’ll assemble here.

jQuery.js

It’s just not ever there. :)

sudo vim /usr/share/pyshared/trac/web/chrome.py
        #add_script(fakereq, 'common/js/jquery.js')
        add_script(fakereq, 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js');

and in add_script, add hack for filenames starting with http:

    if filename.startswith('http'):
        script = {'href': filename, 'type': mimetype}
        req.chrome.setdefault('scripts', []).append(script)
        scriptset.add(filename)
        return

Automate updating of trac wiki pages

There’s an XmlRpcPlugin that I’ve used successfully. I just love Python and XMLRPC.

easy_install -Z -U ....xmlrpc

Proper notification to wiki page changes

I’m currently using the rss2email application for proper notification of wiki updates. :(

Eclipse och Subversion-Howto

Övergripande steg

  1. Skapa ett Java-projekt och lös uppgiften (eller iaf delvis).
  2. Checka ut det som redan finns skapat åt dig på http://prov.wendt.se/svn//trunk (jag har gjort branches, tags och trunk) och spara det som ett nytt projekt.
  3. Konvertera det nya utcheckade projektet till ett Java-projekt, lägg till test-katalog och JUnit 4.
  4. Kopiera över de filer du skapat från steg 1. Kontrollera att det fungerar som tidigare.
  5. Checka in.
  6. (Ta bort ditt gamla projekt om du vill.)

Egentligen är det bara steg 3 som är trixigt.

Det finns två menyval som inte syns (nästa gång skall jag spela in med mindre skärmstorlek så allt syns), och det är

  • i steg 3. Högerklickar på projektet och väljer Properties längst ned.
  • i steg 5. Mappen .settings och filerna .project och .classpath tycker jag inte skall checkas in, och väljer därför Team » Add to svn:ignore

[flashvideo file=http://wendt.se/misc/kyh-moo-svn-howto.flv width=460 height=298 /]
Filmen kan tankas hem som ogg också – mycket bättre kvalitet (ca 8 MB, flashfilmen är på 11!).

Fjärrstyrning i Ubuntu

Emellanåt hoppar jag in och assistera morfar. Det första hindret för att hjälpa någon på distans är oftast att lösa detta med att “se samma sak”. Detta är mina anteckningar för hur jag gör:

ssh -XC user@remotehost
user@remotehost:~$ vino-preferences

och fixa till inställningarna. Det går också att göra utan GUI – allt ligger i GConf under /desktop/gnome/remote_access/.
Därefter gäller det bara att hitta rätt nivå av kompression.

vncviewer -depth 8 -compresslevel 9 -quality 3 remotehost

Ett problem är att om man använder SSH-tunnel så räknar tight VNC ut att man pratar med den lokala maskinen och väljer då “raw” encoding vilken är väldigt högupplöst. Det kan man som tur är styra med -encodings. Så det blir till slut:

vncviewer -depth 8 -compresslevel 9 -quality 3 -encodings "copyrect tight hextile zlib corre rre raw"

Python och teckenkodning – utf8

Det är bara så – det krävs extrainsatser hela tiden med Python 2.* för att använda tecken andra än ASCII-tecken. Skall här teckna ned alla extrainsatser jag använder och stöter på.

Källkodsfilens teckenkodning

Anges såhär:

#!/usr/bin/env python
# -*- encoding: utf8 -*-

Läsa in textfil

in_file = codecs.open("elever.txt", "r", "utf8")

Utmatning på stdout

import codecs, sys
sys.stdout = codecs.getwriter('utf8')(sys.stdout)

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 …

apache, svn, mysql för prov

Idag skriver ett par elever omprov i kursen Avancerade Webbteknologier 1 i Agile Web Developer-programmet på kyh.se (yrkeshögskola). Deras prov består av två delar: en pappersdel och en “praktisk” del.

Den praktiska delen presenterar ett antal handritade skisser över en webbplats. I det första provet skulle de göra en enkel version av twitter. I detta prov ett enkelt forum. All hjälpmedel är tillåtna och poängen är att det skall vara likt en riktig arbetssituation. Studenten kan då visa vad han eller hon faktiskt kan åstadkomma på en viss tid, visa upp på kod han/hon väljer att checka in och visa prov på färdighet. Pappersdelen visar mest på nivå av kunskap – inte den hantverksmässiga färdighet man som utvecklare faktiskt bygger upp.

Hur funkar det då?

Förra gången uppstod konstiga fel för en del av de som satt på Windows och körde Eclipse med Subclipse. Problemet visade sig vara att de som inte köra “pure Java”-versionen, aka SVNKit, utan istället köra native-bryggan inte alls kunde interagera med svn-repot. Detta hade tidigare inte varit något problem under kursen, men då var alla läsoperationer tillåtna för hela världen (anonymous access) och endast skrivning krävde inloggningsuppgifter.

“Svn-repot” är egentligen flera repon – ett repo per student. De är skyddade så att bara ett konto kan komma åt just det repot, både vad gäller läs och skriv (och alla andra operationer). Repot accessas via HTTP och Apache via mod_authz_svn / mod_dav_svn (man får akta sig så att dav_svn.conf som medföljer vid installation inte används med default-inställningar).

Så, jag satte ihop ett par skript (bash och python) som

  • skapar svn-repo med branches, tags och trunk-kataloger (om det inte redan fanns),
  • skapar htpasswd-fil,
  • skapar apache-config-fil, samt
  • skapar MySQL-databas (en per person) och populerar med lite grunddata.

Konfiguration av Apache

Hela webbplatsen kör på en egen virtual host och konfigurationen för detta ligger i en enda fil. För varje student genereras följande:

<Location /live/carw949>
 AuthType Basic
 AuthName "Live - carw949"
 AuthUserFile /srv/prov/live/carw949.htpasswd
 Require valid-user
 Order allow,deny
 Allow from all
</Location>
<Location /svn/carw949>
 DAV svn
 SVNPath /srv/prov/svn/carw949
 AuthType Basic
 AuthName "AD10Gbg carw949"
 AuthUserFile /srv/prov/live/carw949.htpasswd
 Require valid-user
</Location>

Utöver det kör jag också ett cronjobb som checkar ut deras kod var tredje minut och lägger upp “live”. (Även denna “live”-katalog är skyddad och access ges bara till ett enda konto.)

Konfiguration av Subclipse och Eclipse

Idag fungerar det fint utan problem  för alla. Det gäller dock att man i Eclipse (med Subclipse-plugin) väljer att använda SVNKit istället för JavaHL (JNA). Installeras enklast via Help » Install New Software och med arkivet som finns på http://subclipse.tigris.org/update_1.6.x. För att kontrollera vilket SVN-lib (eller backend) som används så är vägen denna:

Window » Preferences
Team » Svn
Svn Interface » Client: SVNKit (Pure Java)

Alla skript ligger under http://wendt.se/software/education/kyh.se/awt1/ och do-it-all.sh gör “allt”. Filen elever.txt innehöll alla elever och var på det format som jag fick rått från SCAS (administrativt system).