FollowMe Tandem review based on three years of experience

The FollowMe Tandem is a bicycle towing accessory to connect a children's bike to an adult’s bike. The following short review is written based on two years of experience.
Image source http://family-cycling.com/voraussetzung-am-fahrrad/

We have used the 2013 model with adult bikes that have quick release axles and with four different Islabikes children's bikes (16” to 20” wheels). We have bought optional accessories to use quick release axles also for children’s bikes.

We have not used FollowMe daily but mostly on longer bicycle tours.


Makes it possible to do bicycle touring with children even after a child does not have energy for cycling on their own or when the road is not safe for children to bike their own. The tandem is stable even on speeds of 30-40 km/h. Probably ok even with higher speeds. The connect and release procedure is very quick.

Unlike some of the competition, like Trail-Gator, FollowMe allows use of racks, panniers and children’s seats. This was very important for us as our main goal was to do trips spanning multiple days with children.


Installation takes time and provided instructions don’t help much (in 2012, 2013). But once you got it, this is no longer a problem.

The problems are mostly minor. Most of these would be quite easy to fix -- and might have as my product is from 2013.

  • installation takes time
  • instructions (at least in 2012, 2013)
  • manufacturer site only in German, contains pictures of product versions no longer sold and seems to be the only source for product recall information. No major updates for ages.
  • one towing device can be used with one wheel size at a time. Even with very different kind of tires locking might not be perfect. Adjusting requires tools.
  • quality of finishing. Some metal parts get surface rust very easily but this does not seem to affect functionality.
  • near the documented weight limit a child’s movement can affect also adult’s bike quite a bit
  • only works on flat surfaces, does not work on bumpy forest paths
  • installation requires cutting of a metal band. Two bands were shipped in the box and more can be ordered.
  • weight


I'm not aware of any other product that solves this problem (week long bicycly touring with kids) in a such an elegant way.

Thank you for reading. If you have any thoughts or found this useful, please leave a comment.

Some further reading:

Appendix: model versions

The most important difference seems to be the frame clamp for child’s bike. The manufacturer does not provide clear documentation of product versions, so here's my personal understanding:

-2012? all-metal model

This seems to be featured in most of the photos and videos on the web -- even on manufacturer’s site. Also most reviews refer to this model. We have used two of these

  • works very well.
  • straight forward installation (apart from messy documentation)

  • If not installed correctly, a loose connector may allow children's bike to disengage in extreme connectors. This has happened to me only once. In that case the bikes had been parked when they fell on their own. I had not adjusted the Follow Me for that particular tyre. Also my guess is that this would not have been possible if there would be have been rider's weight on top of the child's bike.

2013 mostly plastic model

These were originally delivered to us

  • works quite ok if you manage to install it with first attempt
  • free swap to all-metal connector offered by the local importer
  • after usage, removing this from children’s bike may require breaking the device. We had to use metal saw and pliers to remove. Absolute rubbish.

2014? model

No first-hand experience.
Possible photo of 2014 model, might not be the the version that was caused the product to be recalled. Image source: http://velounion-shop.de/install_4/followme/followme-kupplung-und-zubehoer/12/einricht-komplettset

  • went back to metal constructions
  • added a locking screw that should make it impossible for children’s bike to disengage

  • This product version was recalled. I'm not quite sure as the information available only in German on manufacturer’s site

2015? model

No first-hand experience. Possible picture
Image source: http://velounion-shop.de/install_4/followme/followme-kupplung-und-zubehoer/12/einricht-komplettset

  • 2014 improvements
  • Problems that led to product recall have been fixed?

  • ?


Installing Xubuntu 14.04 to an old Thinkpad T41 using an USB stick

Installing an Xubuntu 14.04 to an old Thinkpad T41 required some extra steps. I was using USB stick for installation.

First problem: ERROR: PAE is disabled on this Pentium M

Preliminary solution: https://help.ubuntu.com/community/PAE: append "-- forcepae" to end of boot options. The space is mandatory. 

Additional steps needed: press any key during boot to activate boot settings menu.

Second problem: Can't mount loop1 on /cow

Preliminary solution: http://ubuntuforums.org/showthread.php?t=1306277: "choose "discarded on shutdown" [in Ubuntu Startup Disk Creator].

Additional steps needed: for some reason this option was not available for Xubuntu 14.04 LTS image. I had to use Unetbootin instead. Make sure the USB stick is formatted using FAT and is empty.

Other problems

Connecting to a WLAN AP did not work during installation. After installation was complete, this problem went away.


S-Pankki -tiliotteet CSV ja JSON -muotoon

Kirjoitin keväällä yksinkertaisen ja viimeistelemättömän työkalun S-Pankin PDF-muotoisten tiliotteiden muuntamiseksi CSV- (Excel) ja JSON-muotoon:

Parsestatements: S-Pankin tiliotteet CSV tai JSON-muotoon (Github)

Käyttö todennäköisesti vaatii Python-lähdekoodin muokkausta oman käytön vaatimalla tavalla. Pienenä lisänä työkalu tekee saman Osuuspankin CSV-tiliotteille.  Kaikkien löydettyjen tiliotteiden tiedot viedään yhteen tiedostoon.


Getting started with the ng-book beginner screencast (mac)

Image source: ng-book.com
Ng-book: The Complete Book on AngularJS was featured in the HelsinkiJS January meetup. It was mentioned to be the best book on AngularJS so I went and bought the Book and source code package. This $79 package includes a 3 hour long beginner Angular screencast.

I did not find any instructions on how to get the example application server running and I don't know Ruby. So here are the steps I followed on my mac.

Getting the beginner_app server running

In the beginner_app directory run

sudo gem install bundler

  • installs the bundler package to ruby
  • To my understanding on a mac gem needs to be run as root. By default ruby has been included as part of the OS.
  • this resolved the error: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- bundler (LoadError)
bundle install --path vendor/cache
  • source
  • perhaps bundle install would have been enough in this case?
  • this resolved the error: /Library/Ruby/Gems/2.0.0/gems/bundler-1.5.2/lib/bundler/spec_set.rb:92:in `block in materialize': Could not find rack-1.5.2 in any of the sources (Bundler::GemNotFound)
Now you should be able to run bin/server without problems. 

Please leave a comment if I missed somethingor if you found this useful.

Extra spoiler: getting the list function running at 02:43:58

In 02:43:53 the author has the following line visible as part of a directive

compile: function(tElement, tAttrs, transclude) {},

After this the directive functionality is demoed. At least on my system this does not work because the empty compile function does not call the list entry. The simple solution is to remove this line from the code.

In 02:44:25 you can notice that the compile entry is gone. I must admit though that it was fun to find this out by myself :)


Follow Me Tandem -jatko 2: vanhan mallisen metallisen alaputken sovittimen asennus

(jatkoa kirjoituksille yleisistä kokemuksista Follow Me Tandem:in käytön aloittamiseen ja asennusohjeeseen uudenmallisesta muovisesta alaputken sovittimesta.)

En onnistunut löytämään luotettavaa asennustapaa uudenmallisella muovisella lastenpyörän alaputken sovittimella. Maahantuojalta sain tilalle noin 1,5 vuotta vanhaa mallia olevat metalliset sovittimet. Niidenkin ohjeet olivat mielestäni kehnot, joten kirjoitin tähän omista kokemuksistani. Kannattaa lukea alkuperäiset ohjeet ja jos täydennät alla olevalla, teet sen omalla vastuullasi.

1. Valmistelu

  1. pultin irroitus pannan siitä päästä, jossa on koko matkalla reikiä
  2. jäljelle jääneen pultin kiristiys niin että se on kokonaan kierteillä ja hieman enemmänkin

2. Sovitus

  1. Sovita sovitin paikalleen putkeen ja laita panta niin kireälle kun voit.
    1. Telineen kannattimet tulevat etupyörää kohti
    2. Varmista että vaijeri kulkee kolostaan
    3. Kuvassa olen käyttänyt sisäkumia velcron sijaan, mutta velcrokin näytti asialliselta. Sisäkumi suojaa naarmuilta ja pitää sovittimen paremmin paikallaan. Koska metallisen sovittimen saa kireälle, tämä lienee turhaa.
  2. Katso mihin kohtaan voit asettaa pultin kiinnityskappaleineen niin että jätät itsellesi vielä kiristysvaraa (pultin juuri ei ota kiinni sovittimen koteloon)
  3. Merkitse kohta ja katkaise ylimääräinen panta pois reiän alun kohdalta
    1. Jos putki ei ole tasapaksu koko matkalta, on erittäin tärkeää selvittää oikea kohta valmistajan ohjeiden mukaan ennen katkaisua. Tämä voi olla hankalaa tämän sovitinmallin kanssa.
    2. Minulla ohjeita seuraamalla pultit eivät välttämättä olisi mahtuneet edes kokonaan kierteille, näin varaa jäi reilusti.

Kuvassa pyörä ylösalaisin, etupyörä vasemmalla

 3. Kiristys

  1. Kiristä ensin löysälle ja hae valmistajan ohjeiden mukaan oikea kohta alaputkelta
  2. Kun oikea kohta on löytynyt, kiristä tasaisesti
    1. sovittimen pitäisi istua hievahtamatta paikallaan, valmista tuli!
    2. Purkukin pitäisi onnistua ongelmitta, mutta lukkopultit voivat löystyä usealla toistolla.


Follow Me Tandem -jatko: kuinka asennus olisi pitänyt tehdä muoviselle sovittimelle

(jatkoa kirjoitukselle Follow Me Tandem -aloitus: rautasahaa tarvittiin, jossa lasten pyörään tuleva adapteri ja sen tilalle lähetetty osa rikkoutuivat. Päivitetty 2013-05-05 kokemukset ajosta ja purusta. Lisätty myös erilliset ohjeet metallisen sovittimen asentamiseksi.)

Koska Follow Me Tandemin mukana tulevat ohjeet ovat luokattoman huonot erityisesti lastenpyörään tulevan sovittimen osalta, esitän tässä oman näkemykseni toimivasta asennustavasta.  Jos päätät kokeilla alla olevia ohjeita, teet sen kuitenkin täysin omalla vastuulla. 

Kohteena minulla oli Islabikes Beinn Large 20, jossa alaputki on pyöreä ja varsin kapea. Putki on myös varsin loivassa kulmassa verrattuna moniin lastenpyöriin.

Sovittimen suunnittelu on ilmeisesti täysin epäonnistunut ja huolellisella asennuksella tätä voi vain kiertää tiettyyn rajaan asti.

Vaihe 1: velcro

  1. Asenna alle sisäkumia tai muuta vastaavaa liukumisen estävää materiaalia. Kerroksen paksuus oltava sellainen että myöhemmässä vaiheessa metallipannan saa juuri ja juuri kiinni
    • Leveyttä on oltava noin halkaistun sisäkumin verran niin että myöhemmin asennettava muovikaukalo lepää koko pituudeltaan kumin päällä
    • Joku kertoi myös käyttäneensä letkunkiristäjää vielä lisätukena, tähän ei vaikuttanut olevan tarvetta
  2. Aseta velcro kumin ympärille kireälle niin että vaihdevaijeri ei ole pussinsulkijan kanssa samalla puolella

Vaihe 2: panta

  1. Aseta pannan pää, jossa yksi reikä metalliputken ympärille
    • vaihdevaijeri jää alle, koska panta nousee ylös seuraavassa vaiheessa
    • pussinsulkija jää auki
  2. Kierrä panta putken ympärille ja kokeile monenteenko reikään sen saa kiinni
  3. Ota panta pois ja laita uudestaan aloittaen jälkimmäisestä reiästä
  4. Kierrä kiinni ja aseta pää, jossa yksittäinen reikä, pultin vastakappaleen yli
    • jos tämä käy helposti, pura kokonaisuus ja laita esimerkiksi yksi kerros sisäkumia alle jotta tulisi tiukempi
    • laita panta niin että pussinsulkija tulee sille puolelle, jossa panta on kaksinkerroin

Vaihe 3. Muovikaukalo ja pultti

  1. Kiristä kohtuudella, ei missään nimessä ohjeessa mainittuun 9 Nm. 
    • Tavoitteena on vain saada sovitin pysymään paikallaan. Liiallinen kiristys johtaa ilmeisesti velcron ompeleen hajoamisen. 
    • Tarkista että vaihdevaijeri kulkee sujuvasti ja että pultti osoittaa suoraan alaspäin
Valmista tuli! Koeajojen jälkeen kannattaa yrittää irroittaa sovitin - nimittäin muuten mahdollisesti hajonnut sovitin ei paljastu ja korvausvastuusta voi tulla erimielisyyttä. Purkaessa muovikaukaloa kannattaa vetää poispäin putkesta, jotta pultin vastakappale ei pääsisi pyörimään.

Näillä ohjeilla asennuksesta tuli varsin jämäkkä, mutta ei kuitenkaan vanhan mallisen sovittimen veroinen. Tiukkuudella on suora vaikutus ajo-ominaisuuksiin, huojunta vähenee. Pultti oli jälleen vaurioituneen näköinen vaikka pyörikin melko siististi. Näin minulle jäi epäilys että mahtoiko tämäkään olla toimiva ratkaisu.

Omalla kohdallani ratkaisuksi osoittautui vanhan mallinen metallinen sovitin, jolla asennuksesta sai todella tiukan.


Follow Me Tandem -kokemukset - rautasahaakin on tarvittu

(Päivitys: 2015-06-24: vedetty kokemukset yhteen englanniksi)

(Päivitys: 2013-05-05: kokemukset kolmannesta sovittimesta ja vanhan mallisista sovittimista. 2013-04-08 ja 2013-04-09: päivitetty kokemukset korvaavasta osasta. Katso myös kirjoitukset  epäviralliset asennusohjeet uudenmalliselle sovittimelle ja asennusohjeet vanhanmalliselle sovittimelle)

Kuva: sevenextreme.fi
20"-pyörillä kulkevien lasten kanssa on pyöräretkillä havaittu tarve saada lapset uupumuksen yllättäessä tai pyörätien päättyessä hinaukseen.

Follow Me Tandem -vetolaite vaikuti verkkolähteiden perusteella parhaalta vaihtoehdolta tarkoitukseen. Vaihtoehtoja on niukasti, lähinnä kyseeseen tulee Trail-Gator. Peräpyörät eivät palvele alkuperäistä tavoitetta.

Ostopaikkana toimi sevenextreme.fi, joka oli ainoa joka ei vaatinut ennakkoa tilisiirrolla.

Adaptereita on lukuisia, niiden osalta kannattaa varmistaa että on tilaamassa omaan pyörään sopivaa kokonaisuutta. Meillä Islabikes-pyöriin tarvittiin etupyörän pikalukituksen vuoksi lisävarusteena myytävät sovittimet. Tärkeää on myös havainnoida rajoitteet pyörän koolle ja kuorman painolle. Pyörän alaputken muotojen on sovelluttava sovittimen kiinnittämiselle ja oman kokemuksen mukaan 20x1.50 on maksimi rengaskoko, 20x1.35 kanssa oli selvästi helpompaa.

Käyttöohje on pitkä ja epäselvä pienine mustavalkoisine kuvineen.

Aikuisen pyörään tuleva kokonaisuus on tukevaa tekoa ja keskeiset osat ovat metallia. Lasten pyörään tulee sovitin etuakselin kohdalle ja alaputkeen.

Lasten pyörän alaputken muovinen sovitin: epäonnistunut suunnittelu, toteutus ja ohjeet

Lasten pyörän alaputkeen tuleva sovitin on paketin heikoin lenkki. Tässä keskeisiin osiin on valittu materiaaliksi muovia ja muovista velcro-kangasta.

Sovitin on saatava tiukalle, jotta takana matkustava ei saisi heilutettua yhdistelmää kumoon.

Käytin kolmea sovitinta asennuskokeiluihin.

Kaksi ensimmäistä hajosi

Kaksi ensimmäistä asensin asennusohjeen mukaan enkä silti saanut niitä riittävän tiukalle. 
Purettaessa pultin vastakappale alkoi pyöriä tyhjää ja sovittimet oli rikottava irroittamiseksi. Ensimmäisellä kerralla tarvittin rautasahaa, mutta toisella kerralla riitti pultin vastakappaleen painaminen ruuvimeisselillä.

Ensimmäinen rautasahan kohdannut sovitin ja vastakappale
Vain pultin ollessa kireimmillään lukittuu sen vastinkappale muovikappaleen yläosaan. Mutta kun pulttiin tulee löysää, pitää vastakappaletta paikallaan vain muovinen velcro. Kun pultti ei jostain syystä pyörinyt siististi, se repeytyi ennen avautumistaan velcrosta ja alkoi pyriä vapaasti.

Pultti oli molemmissa tapauksissa vaurioitunut niin että se ei pyörinyt kunnolla. Voi vain arvailla miksi, mutta itse veikkaisin että se rikkoutuu ajettaessa kun löysä asennus johtaa väännön pulttiin ja sen vastakappaleeseen.

Tulipa ainakin varmistettua ettei vika ollut yksittäisessä sovittimessa.
Toinen sovitin: Kuvassa näkyy hyvin kuinka panta vetää pannan ylös ja velcro tulee perässä ikävin seurauksin. Vastakappaletta pidetään paikallaan ruuvimeisselillä, kun velcro on rikkoutunut.

Kolmas kesti, mutta jätti epäilyksen

Kolmannen sovittimen kohdalla sovelsin asennusohjeita ja sain sovittimen pysymään lähes tiukasti paikallaan. Ajotuntuma parani huomattavasti ja myös purkaminen onnistui. Näistä kokemuksista kirjoitin oman version lastenpyörän sovittimen asennusohjeista.

Hyvilläkään ohjeilla kehnoa suunnittelua ja laatua ei voi kuitenkaan kiertää. Pultissa näkyi jälleen kerran jälkiä vaurioista, jotka aiemmin estivät siistin purkamisen.

Ratkaisu: vanhan mallinen metallinen sovitin

Ystävällisen maahantuojan avustuksella sain rikkoutuneiden tilalle kaksi vanhan mallista, täysmetallista lastenpyörän sovitinta. Uusi sovitinmalli on kuulemma korvannut vanhan mallin noin 1,5 vuotta sitten.

Jälleen surkeat asennusohjeet hankaloittivat asennusta, mutta lopputulos olikin sitten aivan jotain muuta kuin aiemmilla kerroilla. Sovitin istuu pyörässä todella jämäkästi eikä heilu laisinkaan. Nyt purkukin onnistuu ongelmitta.

Ajettaessa suurta eroa ei huomannut kolmanteen asennuskertaan, mutta luottamus palasi. Nyt kaikki toimi kuten alunperin odotin. Asennuskokemusten perusteella kirjoitin oman ohjeen metallisen sovittimen asentamiselle.

Laatuongelmat ovat myös näissä läsnä, viimeistyly on suttuista ja yhdestä pultista puuttui lukitusmuovi. Tämä kuitenkin vaikuttaisi toimivalta ratkaisulta ja perheen pyöräretket saadaan nyt suoritettua.

On hyvä huomata, että tässä mallissa metallipanta on katkaistava putken paksuuden mukaan. Paketissa tuli yksi varapanta ja uusia saanee tilattua. Uudessa mallissa tätä ongelmaa ei ollut. Vanhoista naarmuista viisastuneena käytin suosiolla velcron tilalla sisäkumia suojana, mutta tähän tuskin olisi ollut tarvetta.


  1. Uuden muovisen sovittimen suunnittelu ja toteutus on epäonnistunut. Sovitin vaurioituu helposti käytössä niin ettei sitä saa purettua. Asennusohjeita soveltamalla tämän voi onnistua välttämään.
    • aiheesta löytyy netistä vastaavia kokemuksia, joten ainutkertaista tämä ei ollut
    • maahantuojan mukaan kokemukseni eivät ole tyypillisiä, joten voi olla että pyörämalli oli poikkeuksellisen hankala tai minulle sattui vain osia kehnolaatuisesta erästä
  2. Vanhan mallinen metallinen sovitin on toimiva ratkaisu. Tähän astisten kokemusten perusteella suosittelisin käyttämään vain vanhaa mallia, jos sellaisen jostain löytää.
  3. Ohje on molemmissa tapauksissa surkea
    1. kirjoitin kokemusten perusteella oman version uudenmallisen muovisen sovittimen asennusohjeista ja vastaavasti vanhan mallisen metallisen sovittimen asennusohjeen.
Muista lähteistä on käynyt ilmi että tässä mainitsemani eivät suinkaan ole ainoita puutteita, esimerkiksi vetolaite ruostuu ilmeisesti poikkeuksellisen hanakasti ja ripustusnaru on käyttökelvoton. Ruostuminen näkyy jo muutaman ajokerran jälkeen ja on selvää että sveitsiläisen laadun kanssa tuotteella ei ole mitään tekemistä.

Kaikesta huolimatta metallisilla sovittimilla kokonaisuus vaikuttaa toimivalta ja näistä saadaan kaivattua apua pyöräretkien pidennykseen lasten kanssa. Lisään käyttökokemuksia, kun niitä ehtii kertyä. Trail-Gatoria olisi hieno kokeilla vertailumielessä.



Quick review: ASUS Wavi wireless HDMI/USB

Asus Wavi is an affordable wireless HDMI product (approx 190 euro in Finland). It uses WHDI and also promises wireless USB and cross-room transmission. It looks very similar as Asus WiCast that lacks USB and smaller advertised range.Reviews about WiCast HDMI capability seem to match well to this product.

As most of the information about this device is limited to press release data  I would like to share of my experiences based on a short experiment.

There are two main issues I discovered: the way how USB support has been implemented and the range across concrete walls/floors.

USB support

USB support requires drivers. Drivers are only provided for Windows (XP, Vista, 7) -- Linux or Mac OS are not mentioned. I only tried Windows.

Not all USB devices are supported. Manual mentions Do not connect a USB flash drive to your WAVI receiver. It also lists only Asus mouse and keyboard models in supported devices section. Fortunately a standard mouse seems to work fine. On the other hand a webcam did not work so perhaps the bandwith is very limited.

USB devices do not appear under any USB hub in Windows device manager (appear under Location 0).

It may be just easier to buy a wireless keyboard/mouse package where the range is adequate and no drivers are required.

Wlan under the hood of wireless USB

It seems that the receiver (the TV end) is an wlan station and that the transmitter (the computer end) is a wlan receiver. It looks like it automatically creates an WLAN network with WPA2 encryption and 10 letter (seemingly) random password. From the device manager it seems that is's possible to configure the channel to be used.

Windows shows other WLAN networks in range, but an attempt to connect to one fails.

The documentation does not mention anything about WLAN - just about the HDMI transfer technology (WHDI).


Up to 25 meters (within line of sight) and cross-room transmission are part of the product promise. Unfortunately as always obstacles reduce the range.

Across concrete floors it seems that in my example the range is ~3 meters. With an additional concrete wall in between and the range is down to ~1,5 meters. On the same floor at least with one wooden doors closed a range of 10 meters was easily achieved. Probably more.

Based on on-screen display signal quality >50% is needed. One review of Asus WiCast suggests that HDPC picture (such as Blu-ray, PS3 games) may result even shorter range. Also WiCast reviews suggest that N-class wlan networks intereference may also cause reduced range as they operate in the same spectrum.

Even if you get picture and sound they may not be perfect. It seems that with poor signal (50-70%?) the quality of the picture may be downgraded. Even with perfect picture and sound the USB may not work well, keyboard presses get duplicated/lost and mouse movement is jerky.

Overall impression

If you have a line of sight or not much concrete in between, Asus Wavi delivers very good quality picture and sound (based on brief test with 1080p picture + stereo). If your video source is in another floor then this might not be very suitable product. I haven't found any better product on the market at least within my budget.

Asus has taken some shortcuts in the USB implementation and has failed to mention some of those in the documentation (especially on their website). It's a bit difficult to recommend the USB support as there are wireless mouse/keyboard combos that don't require drivers and deliver similar range (and thus support others than current Windows versions).

I'll return the unit and revisit the idea if I ever purchase a projector. In my case even 3 meters was too long a distance.

Please leave a comment.

(Disclaimer: these are my personal impressions without any warranty. I have not really used the device - just briefly tested it).


Photos on Flickr for almost free use

I have now uploaded 88 images to Flickr that are available under CC Attribution-NonCommercial-NoDerivs license.

I'm still considering if I should increase the resolution and if I should remove the NoDerivs restriction from the license. Principles I use when choosing and editing are mentioned on my profile page.


Things that no longer worked after Ubuntu 10.04 fresh install

1. SOLVED: Rotate does not work with Nvidia propriatary drivers 
Solution: put Option "RandRRotation" "on" in xorg.conf as before. This really should be a default value. Telling users that rotation is not supported is not very helpful (display settings applet).

Work around: run gnome-keyring-daemon

Work around: install from Synaptic/Ubuntu Software Center

4. SOLVED: Spotify does not play tracks / skips everything
Solution: uninstalled Wine 1.0 and 1.2 from Synaptic (numbers are related to package names), reinstalled Wine 1.2 (as in 9.10), restarted. Not sure what step was required - or if restart was only needed. Update: not sure if previous was needed, perhaps ALSA should be used instead to resolve conflicts between for example Flash and Spotify.

Work around: change Google search parameters to use local site. File was located in /usr/lib/firefox-addons/searchplugins/en-US and the missing parameter was .

2010-05-29: Updated solution to rotation problem & Spotify solution


How to access Google Reader Mobile with a N900 (and Calendar & Tasks)

Documentation suggests to try http://www.google.com/reader/m for Google Reader Mobile, but that takes to a desktop version of the site. However, http://www.google.com/reader/i/ works fine using a N900.

Desktop like browsing experience is great but some mobile sites are well designed for mobile use cases. Currently none of the links at http://www.google.com/mobile/ let you use mobile versions of Google services with a N900.

Update: could not figure out similar approach for Google Docs or Gmail. Changing user agent to Android was necessary to get proper UI.

Update 2: http://www.google.com/calendar/gp?hl=en#~calendar:view=a,
http://mail.google.com/tasks/android?pli=1 seem to work for calendar and tasks respectively.


Things that broke when upgrading from Ubuntu 9.04 to 9.10 Karmic Koala

As always, if there's no reason to upgrade - then don't :) Some of us still do. However it seems that I have now been able to solve all outstanding issues after the upgrade.

1. SOLVED: Keyboard and mouse stopped working in Adobe Flash (64-bit)
Bug https://bugs.launchpad.net/ubuntu/+source/flashplugin-nonfree/+bug/410407 has been updated with a solution that worked for me (there are other alternatives as well, not as nice):

"gksudo gedit /usr/lib/nspluginwrapper/i386/linux/npviewer
Then add: export GDK_NATIVE_WINDOWS=1 before the last line of text"

This is once again good lesson from what happens when proprietary binaries are included in open source systems.
2. SOLVED: USB mouse & keyboard randomly don't work after standby
Not yet confirmed, do the same as for 8.10: http://fonsen.blogspot.com/2009/03/ubuntu-fixing-lost-usb-keyboardmouse-in.html

It seems that update-manager wisely commented out previous fix by stating that HAL is now used.

3. SOLVED: Apport reporting serious errors when waking up from standby
A recommended software update in November seems to have taken care of the issue.

4. SOLVED: Spotify sound stopped working
Solution upgrade to wine 1.2 using aptitude:
There's still some problems with album browsing but that did work before and stopped working before upgrade. Playing and searching work.


T60, ATI X1300, Ubuntu 9.04, working display adapter

In Ubuntu 9.04 Jaunty old ATI cards such as Mobility X1300 (used for example in some Lenovo T60) no longer worked out of the box in hardware accelerated mode causing serious performance problems. Here's how I solved the problem.

Before downgrading to 8.10 I took last attempt and tried a recipe from Chinese Ubuntu forums and they worked (via Google translator). I did not read any instructions which is not a good idea. 

Note: the below commands can do whatever damage to your computer and I cannot take any responsibility of what happens. Do your own study properly (unlike me). Adding things to your source.list and new gpg keys contain always serious risk.

Here's the catch from the thread:
  1. Add following lines to the end of /etc/apt/sources.list 
    • deb http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu jaunty main
    • deb-src http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu jaunty main 
  2. add project gpg key to your system: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8844C542 
  3. refresh package repository: sudo apt-get update 
  4. At this stage software update window popped up for me and I installed all updates, restarted and everything worked.
I hope this helps.

Update: Compiz does not work so it seems that the acceleration is only limited, but the quality problems disappeared anyway. Update2: now Compiz works again, the solution is probably not the most stable.


JSON output from TWiki/(Foswiki)

Lately I've been using some time with TWiki. I noticed there were no easy to find instructions on how to create search results in javascript JSON-format. Here's how (works probably in Foswiki as well):

{ "arRay": [ %SEARCH{... separator="," format="[' item1,'item2','item3']"}% ] } 

This creates a JSON-compatible array. Notice the separator which makes sure that there's no trailing comma in the end of the result list. Otherwise the file would not work in IE without removing comma. To get only JSON and no unnecessary HTML elements from skin, use url parameter:


It's possible to store topic specific skin preference by adding following in the beginning of the topic (after saving preference disappears from editable topic body) (source):

%META:PREFERENCE{name="SKIN" title="SKIN" type="Set" value="text"}%

Update: More actions > topic settings can be used to customize topic preferences easier. Another alternative to access settings: use url-parameter: ?action=editSettings


Compiz Grid plugin in Ubuntu

Ever wanted easily arrange two windows to cover half the screen each? Or perhaps divide the other half in two?

Grid plugin for Compiz does exactly this. By default you press ctrl+alt+[a respective keypad number key] depending on desired configuration. For example ctrl+alt+5 maximises the window and ctrl+7 puts the window to upper left corner. Press latter again and to cycle between 1/9, 1/4 and 2/9 of screen.

In Ubuntu 10.04 Grid plugin is contained within compiz-fusion-plugins-extra package. This can be installed using System > Administration > Synaptic. After installation a restart is needed. Grid can be activated in System > Preferences > CompizConfig (contained in compizconfig-settings-manager package). Instructions for compiling the source in Ubuntu 8.10 are mentioned on Grid home page.

UPDATE4: updated for 10.04 lucid lynx
UPDATE3: found proper video, embedded
UPDATE2: works on 9.10 as well
UPDATE: some Ubuntu 9.04 update broke installation, went back to compiz grid sources and did make install to solve the problem


Ubuntu 8.10: fixing lost usb keyboard/mouse in X after reconnect

I have been losing my USB keyboard/mouse connection in X when switching cables back and forth between my laptop and desktop PC. This is not hardware related as CTRL+ALT+F1 works. Some people on the forums report similar problems with KVM-switches.

Solution: configure keyboard and mouse in /etc/X11/xorg.conf. Auto detection in Ubuntu 8.10 x.org does not work perfectly.

9.10 Karmic Koala update: it seems that the update-manager commented out these rows and some of the symptoms are back. Tried removing comments and follow up if problems still occur. My motherboard is an Asus P5Q.


Section "ServerLayout"
Identifier  "Simple Layout"
Screen "Default Screen"
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard" "CoreKeyboard"

Section "InputDevice"
Identifier  "Mouse1"
Driver      "mouse"
Option "Protocol"    "Auto"
Option "Device"      "/dev/input/mice"
Option "ZAxisMapping"    "4 5"

Section "InputDevice"
Identifier      "Keyboard"
Driver          "kbd"
Option          "CoreKeyboard"
Option          "XkbRules"      "xorg"
Option          "XkbModel"      "pc105"
Option          "XkbLayout"     "fi"


Bug report that helped to solve the problem.


Using Testdisk to recover from partition table errors

Problem: I used GParted in Ubuntu 8.10 64-bit to resize an ext3 partition and then installed Windows Vista on a new NTFS partition. This resulted another ext3 partition to disappear and partition table to go corrupt. Other partitions still worked, but no disk management tool did (Fdisk, GParted or Disk Management in Vista). Luckily all important data had been backed up.

Solution: TestDisk (available for Windows, Linux among others) is a true supertool for analyzing disk contents and recreating partition table to match disk contents (among other things). It analyzed disk contents, showed a list of partitions available on the disk and allowed me to select valid ones. It then recreated the partition table and without losing any data. TestDisk was even able to recreate lost extended partition. It seemed that either Vista or GParted had originlly made extended partition size invalid.

TestDisk even allows copying files from partitions before making changes to the partition table. This functionality was not perfect as it resulted a loop with one directory causing a large number of bogus files to appear on the disk - it was necessary to kill the process.

The user interface has some learning curve. I had to run the disk analysis for several times (>1 hour/analysis) before I realized that it was necessary to select all valid partitions from the disk and not just the one that was missing.

Once before I have been able to recover from similar situation by using a hex editor to edit partition table, but this was much more pleasent experiece.


Summary of thesis work (in Finnish)

Päivitetty 5.4.2006: johtopäätöksien yhteenveto ja liitteet
lisätty Google-osumien pohjalta

Web-palvelun toteutus XML-tekniikalla

Oulun yliopisto
Tietojenkäsittelytieteiden laitos
Mika Fonsén
Pro gradu -tutkielma


World Wide Webin käyttö on laajentunut sen alkuperäisestä käyttötarkoituksestaan siinä määrin, että seurauksena on ollut web-kriisi. Alkuperäinen rakenne ei mahdollista toimivaa ylläpidettävyyttä laajoissa palveluissa. Ylläpito on yksi palvelun elinkaaren tärkeimmistä vaiheista. Tutkimuksessa eräs ratkaisu ongelmaan on ollut komponenttiarkkitehtuuri, jossa sisältö, esitys ja toiminnallisuus ovat toisistaan erotettuna. Tulosten soveltamien ei ole kuitenkaan yleistynyt monimutkaisten tekniikoiden johdosta tässä tutkittavien informaatiopohjaisten web-palveluiden osalta. Uudemmat Extensible Markup Language (XML) -tekniikat tarjoavat teoriassa vaihtoehtoisen tavan soveltaa aiempia tutkimustuloksia ja samalla hyödyntää laajaa XML-sovellustarjontaa. Tämän tutkielman tutkimusongelmana on ”millainen XML-tekniikalla toteutettu komponenttiarkkitehtuuri mahdollistaa helposti ylläpidettävän web-palvelun?” Tässä tutkielmassa havaittiin käytetyn arkkitehtuurin mahdollistavan helposti ylläpidettävän web-palvelun seuraavasti. Sisältökomponenttina toimii XML-muotoinen tieto, esityskomponenttina XSL Transformations (XSLT) -pohjat, jotka yhdistävät Extensible Hypertext Markup Language (XHTML) -muotoisen esityksen sisältöön, ja toiminnallisena komponenttina Java Servlet -ohjelmistokomponentit. Rajapinnat määritetään XML Schema -dokumenteilla. Komponenttien avulla on mahdollista erikoistaa ohjelmistokehyksenä toimiva Apache Cocoon 2 toimivaksi palveluksi. Erikoisrajapintana toimii julkaisukehyksen asetustiedosto, joka määrittää komponenttien väliset suhteet ja niiden käytön. Konstruktiivisen tutkimuksen kohteena olleelle palvelulle asetetut tavoitteet saavuttiin hyvin, muun muassa ei-teknisten ylläpitäjien on yksinkertaista ylläpitää koko palvelua tarjolla olevilla XML-työkaluilla. Tästä huolimatta tekniikkaa on edelleen mahdollista kehittää erityisesti ylläpitotyökalujen osalta ja standardoimalla komponenttien väliset suhteet määrittävän asetustiedoston rakenne. Kokemuksia aiempiin vertaamalla havaittiin työkalujen kehittyneen aiempaan verrattuna ja muodostetun rakenteen tarjoavan aiemmin huomiotta jääneitä mahdollisuuksia. Tutkielmassa hyödynnetään aiempaan verrattuna laajasti sekä web- että ohjelmistotekniikan tutkimusta ja muodostetaan kokonaiskuva tutkimuksesta ja jatkotutkimustarpeista.

Asiasanat: web-tekniikka, XML, www, web, rakenteinen tieto, sisältö, esitys, toiminnallisuus, komponenttiarkkitehtuuri, ylläpito, ylläpidettävyys


1.1 Aiheeseen liittyvä tutkimus 7
1.2 Tutkimusongelma ja -menetelmät 8
1.3 Tutkielman sisältö ja rakenne 11
2.1 Ylläpidettävyys 14
2.2 Arkkitehtuuri 16
2.3 HTML ja siihen liittyvät perinteiset tekniikat 19
2.4 XML-tekniikat 20
2.5 Komponenttiarkkitehtuuri XML-tekniikoilla 25
2.6 Yhteenveto 28
3.1 Palvelun nykytila 30
3.2 Tavoitetila 32
3.3 Kohdepalvelun yleistettävyys 34
3.4 Yhteenveto 35
4.1 Sisältö 37
4.2 Esitys 38
4.3 Toiminnallisuus 39
4.4 Julkaisukehys 40
4.5 Yhteenveto 42
5.1 Verrattuna asetettuihin vaatimuksiin 44
5.2 Verrattuna Kerer et al. (2001) kokemuksiin 46
5.3 Verrattuna XGuide-menetelmään 50
5.4 Suorituskyky 53
5.5 Muut kokemukset 54
5.6 Yhteenveto 55
6.1 Tulokset 57
6.2 Jatkotutkimus 61

6 Johtopäätökset



Keskeiset tulokset tutkimuksesta olivat seuraavat:

1. Tässä tutkielmassa esitetyllä XML-tekniikoilla toteutetulla komponenttiarkkitehtuurilla on mahdollista huolellisella suunnittelulla luoda helposti ylläpidettävä informaatiopohjainen web-palvelu erottamalla sisältö, esitys ja toiminnallisuus toisistaan ja käyttämällä näitä komponentteja yhdessä julkaisukehyksen kanssa.

2. XML-teknologia mahdollistaa web-tekniikan tutkimustulosten soveltamisen tuotantokäyttöön. Muodostettu rakenne vastaa paremmin informaatiopohjaisen palvelun tarpeita kuin aiemmat käytännössä suositut ratkaisut, jotka soveltuvat paremminkin perinteisiä ohjelmistoja muistuttavien palveluiden rakenteeksi.

3. Työkalut ovat kehittyneet huomattavasti verrattuna aiempaan tutkimukseen (Kerer et al. 2001) ja tarjolla on vihdoin toimiva yleiskäyttöinen XML-julkaisukehys, Apache Cocoon 2. WYSIWYG-muotoiset helppokäyttöiset ylläpitotyökalut ovat kuitenkin vielä varhaisella kehitysasteella. Sisällön ylläpitoon on tarjolla työkaluja, mutta XSLT-taitto-ohjelmat puuttuvat vielä kokonaan. Näiden työkalujen kehittyminen saattaisi mahdollistaa kokonaisratkaisun läpilyönnin massamarkkinoilla.

4. XGuide -metodi komponenttipohjaisten XML-ratkaisujen kehittämissä vaatii vielä täsmentämistä ohjatakseen käytännön suunnitteluratkaisuja. Metodien ohelle saattaisi olla mahdollista kehittää suunnittelumalleja yleisten rakenteiden ratkaisuiksi. Käytetyn rakenteen soveltaminen vaatii huolellista suunnittelua ja kurinalaista toteutusta, mutta näiden avulla työtä voisi helpottaa merkittävästi.

5. Komponenttien välisen riippuvuuden määrittävä XML-muotoinen asetustiedosto tulisi asettaa W3C:n standardoitavaksi ja edelleen selaimissa ja palvelimilla käytettäväksi. Tämän suosituksen puuttuminen vaikeuttaa XML-tekniikoiden hyödyntämistä laajassa mittakaavassa web-palveluissa.

6.2 Jatkotutkimus
Ylläpidettävyyden tason kattavampi selvittäminen vaatisi palvelun seuraamista ylläpitovaiheessa pidemmällä aikavälillä. Tätä kautta olisi mahdollista tutkia myös ylläpitoprosessia ja sitä helpottavia tekniikoita ja työkaluja. Olennaista olisi pystyä kehittämään WYSIWYG-taittotyökalu XSLT-muotoisen esityksen kehittämiselle. Ilman tätä käytetty tekniikka tuskin tulee lyömään kovin laajassa mittakaavassa läpi. Kehitysprosessille kokonaisuudessaan olisi mahdollista muodostaa sitä tukeva menetelmä. Huomiota voisi myös kiinnittää sisällöntuotantoon ja sen hyödyntämiseen koko organisaation ja toisaalta yhteistyökumppaneiden tasolla. Vertailu vaihtoehtoisiin toteutustekniikoihin toisi syvällisempää tietoa soveltuvan ratkaisutavan valintaan. Eräs tutkimuskohde voisi olla oliopohjaisten menetelmien ja hypermediatutkimuksen tulosten soveltumisen tutkiminen sisällön rakenteen abstraktiotasoa nostettaessa muun muassa keskinäisten riippuvuuksien hallitsemiseksi.

Työtä helposti ylläpidettävien web-palveluiden parissa vielä riittää ennen kuin valmiina on laajamittaiseen käyttöön soveltuva ratkaisu. XML-tekniikat tarjoavat tähän kuitenkin aiempaa paremmat mahdollisuudet.

7 Lähteet

Apache Foundation 2003a. Welcome to the Apache XML Project [Web-document]. http://XML.apache.org/ [Referenced 11.3.2003].
Apache Foundation 2003b. Welcome to the Apache AxKit [Web-document]. http://www.axkit.org [Referenced 12.3.2003].
Apache Foundation 2003c. Apache Cocoon [Web-document]. http://XML.apache.org/cocoon [Referenced 11.3.2003].
Bass, L., Clemens P. & Kazman R. 1998. Software Architecture in Practice. Reading, MA: Addison-Wesley.
Bitflux 2003. Popoon. [Web-document]. http://www.bitflux.ch/developer/cms/popoon.html [Referenced 12.3.2003].
Bennet, K. H. & Rajlich V. T. 2000. Sofware maintenance and Evolution: a Roadmap. International Conference on Software Engineering, proceedings of the conference on the future of software engineering, 73-87.
Bos, B & Lie H. W. 1999, Cascading Style Sheets, level 1 [Web-document]. http://www.w3.org/MarkUp/ [Referenced 10.3.2003].
Bos, B., Lie H. W., Lilley C. & Jacobs I. 1998. Cascading Style Sheets, level 2 CSS2 Specification [Web-document]. http://www.w3.org/TR/1998/REC-CSS2-19980512/ [Referenced 10.3.2003].
Bradley N. The XML Companion, 3rd edition. Harlow: Addison-Wesley.
Bray, T., Hollander D. & Layman A. 1999. Namespaces in XML. [Web-document]. http://www.w3.org/TR/1999/REC-XML-names-19990114/ [Referenced 13.3.2003].
Bray, T., Paoli J., Sperberg-McQueen M.C. & Maler E. 2000. Extensible Markup Language (XML) 1.0 (Second Edition) [Web-document]. http://www.w3.org/TR/2000/REC-XML-20001006 [Referenced 21.2.2003].
Capretz, L.F., Capretz, M.A.M. & Dahai Li. 2001. Component-based software development. The 27th Annual Conference of the IEEE Industrial Electronics Society, 1834–1837.
Clark, J. 1999a. XSL Transformations (XSLT) 1.0 [Web-document]. http://www.w3.org/TR/1999/REC-xslt-19991116 [Referenced 21.2.2003].
Clark, J. 1999b. XML Path Language (XPath) [Web-document]. http://www.w3.org/TR/1999/REC-xpath-19991116 [Referenced 6.3.2003].
Cutter Consortium 2000. Poor project management number-one problem of outsourced e-projects. [Web-document] http://www.cutter.com/research/2000/crb001107.html [Referenced [31.5.2003].
DeRose, S., Maler E. & Orchard D. 2001. XML Linking Language (XLink) Version 1.0 [Web-document]. http://www.w3.org/TR/2001/REC-xlink-20010627/ [Referenced 6.3.2003].
Deshpande, Y. & Hansen, S. 2001. Web engineering: creating a discipline among disciplines. IEEE Multimedia, Vol.8, Iss.1, Jan-Mar 2001, 82–87.
Gaedke, M., Gellersen, H-W., Schmidt A., Stegemüller, U. & Kurr W. 1999. Object-oriented web engineering for large-scale web service management. Proceedings of the 32nd Hawaii International Conference on System Sciences, 1–9.
Gamma, E., Helm, R., Johnson, R. & Vlissides, J. 1996. Design patterns: elements of reusable object-oriented software. Reading, MA: Addison-Wesley.
Garshol, M. L. 2003. Free XML tools and software [Web-document]. http://www.garshol.priv.no/download/XMLtools/cat_ix.HTML [Referenced 6.3.2003].
Ginige, A. & Murugesan, S. 2001. Web engineering: an introduction. IEEE Multimedia, Vol.8, Iss.1, Jan-Mar 2001, 14–18.
Goldfarb, C. & Prescod, P. 2002. The XML Handbook, 4th edition. Upper Saddle River, NJ: Prentice Hall.
GuangChun, L., WangYanhua, L. & Hanhong, X. 2003. A novel web application frame developed by MVC. ACM SIGSOFT Software Engineering Notes. Volume 28, Issue 2, 7–9.
Haas, H. 2003. Web Services Activity [Web-document]. http://www.w3.org/2002/ws/ [Referenced 10.3.2003].
Hollander, D. & Sperberg-McQueen C. M. 2003. Happy Birthday, XML! [Web-document]. http://www.w3.org/2003/02/XML-at-5.HTML [Referenced 5.3.2003].
Holzner, S. 2001. Inside XSLT. Indianapolis, IN: New Riders Publishing.
IEEE 1993. IEEE Standard 1219: Standard for Software Maintenance. Los Alamitos, CA: IEEE Computer Society Press
Interakt Online 2003. Krysalis. [Web-document]. http://www.interakt.ro/products/krysalis [Referenced 12.3.2003].
Kerer, C. & Kirda, E. 2001. Layout, Content and Logic Separation in Web Engineering. WebEngineering 2000, LNCS 2016, 135–147.
Kerer, C., Kirda, E., Jazayeri, M. & Kurmanowytsch, R. 2001. Building and Managing XML/XSL-powered Web Sites: an Experience Report. 25th Annual International Computer Software and Applications Conference, 2001, COMPSAC 2001. 547–554.
Kerer, C., Kirda, E. & Krügel C. 2002a. XGuide - a practical guide to XML-based web engineering. Networking 2002 Workshops, LNCS 2376, 104–117.
Kerer, C., Kirda, E. & Kurmanowytsch, R. 2002b. A generic content-management tool for Web databases. IEEE Internet Computing, Vol.6, Iss.4, Jul/Aug 2002, 38–42.
Kirda, E., Jazayeri, M., Kerer, C. & Schranz, M. 2001. Experiences in engineering flexible Web services. IEEE Multimedia, Vol.8, Iss.1, Jan-Mar 2001, 58–65.
Laid C. 2002. XSLT powers a new wave of web applications. Linux Journal. Volume 2002, Number 95, 1–.
Langham, M. & Ziegeler, C. 2002. Cocoon: Building XML Applications. Indianapolis, IN: New Riders Publishing.
Le Hors, A. et al. 1999. HTML 4.01 Specification [Web-document]. http://www.w3.org/TR/1999/REC-HTML401-19991224/ [Referenced 5.3.2003].
Lowe, D. & Hall, W. 1999. Hypermedia & the Web: an engineering approach. Chichester: John Wiley & Sons.
Malhotra, A. & Maloney, M. 1999. XML Schema Requirements [Web-document]. http://www.w3.org/TR/NOTE-XML-schema-req [Referenced 6.3.2003].
Michel, T. 2003. XForms – The Next Generation of Web Forms [Web-document]. http://www.w3.org/MarkUp/Forms/ [Referenced 10.3.2003].
Nunameker, J., Chen, M. & Purdin, T. 1991. Systems development in information systems research. Journal of Management Information Systems. Vol. 7, no 3, 89–106.
OSCOM 2003. 2003. Content Management Frameworks/Systems Overview [Web-document]. http://www.oscom.org/matrix/index.HTML [Referenced 6.3.2003].
Pfleeger S. L. 2001. Software engineering: theory and practice. 2nd ed. Upper Saddle River, NJ: Prentice Hall
Pressman, R. S. & Ince, D. 2000. Software Engineering – A Practioner’s Approach, European Edition, 5th edition. Berkshire: McGraw-Hill Publishing Company.
Punte, S. 2002. Getting Started With Cocoon 2 [Web-document]. http://www.XML.com/pub/a/2002/07/10/cocoon2.HTML?page=1 [Referenced 12.3.2003].
Rossi G. & Schwabe D. 2002. Object-oriented design structures in web application models. Annals of Software Engineering 13, 97–110.
Singh, I., Stearns, B., Johnsson, M. & Enterprise Team. 2002. Designing Enterprise Applications with the J2EE Platform, Second Edition. Upper Saddle River, NJ: Addison-Wesley.
Szyperski, C. 1998. Component software – beyond object oriented programming. New York, NY: ACM Press.
Tietotekniikan liitto ry (TTL). 2003. ATK-sanakirja, englanti-suomi [Web-document]. http://www.tt-tori.fi/atk-sanakirja/englanti-suomi/en024.htm [Referenced 16.4.2003].
Velocity. 2003. Velocity [Web-document]. http://jakarta.apache.org/velocity/index.HTML [Referenced 5.3.2003].
W3C. 2003. HyperText Markup Language (HTML) Home Page [Web-document]. http://www.w3.org/MarkUp/ [Referenced 9.3.2003].
Walsh, N. & Muellner, L. 1999. DocBook: The definitive guide. Sebastopol, CA: O’Reilly & Associates.
Warren, P., Boldyreff, C. & Munrom, M. 1999. The Evolution of Websites, Proceedings of International Workshop on Program Comprehension, IWPC99, IEEE Computer Press, 178–185.