Subversion ja versionhallinta

Kaikki enemmän tai vähemmän ohjelmointiin tutustuneet varmasti tietävät, että koodia on kätevää säilyttää versionhallinnassa. Pieniäkin projekteja on suhteellisen vaivatonta ja hyödyllistä säilyttää esimerkiksi Subversion-versionhallinnassa, vaikkapa ihan vain omalla työasemalla sijaitsevassa repositoryssä.

Versionhallinta on tietenkin omimmillaan isommissa projekteissa, joissa toteuttajia on useita ja repository sijaitsee keskitetysti jollain palvelimella. Versionhallinnan ei tarvitse rajoittua pelkästään sovelluskoodiin, vaan sen voi ulottaa muihinkin muuttuviin ja versioitaviin projekteihin, kuten esimerkiksi PL/SQL-paketteihin ja asetustiedostoihin.

Coding Horror -blogi ohjeistaa kätevästi Subversionin (SVN) asennuksessa omalle koneelle ja kattaa myös hieman versionhallinnan perusteita. Subversion onkin kohtalaisen hyvin tuettu eri ohjelmien toimesta ja sille on saatavilla useita eri ohjelmistoja eri alustoille kuten TortoiseSVN, SubCommander ja Eclipseen saatava Subversive. Muista ohjelmista mainittakoon Trac, joka tarjoaa projekteille viritellyn wikin, tikettiträkkerin ja liitynnän Subversioniin.

Jos versionhallinta yleisesti ei ole tuttu asia, kannattaa vilkaista visuaalinen opastus versionhallintaan ja sen toteuttamisesta keskitettynä mallina Subversionilla löytyy kattava Version Control with Subversion -kirja.

Vaihtoehtona hajautettu versionhallinta?
Versionhallintaa voi toteuttaa myös hajautettuna mallina, kuten Linuxin Kernelin kehittämisessä Gitiä käyttäen. Muita hajautettuja malleja ovat muun muassa Mercurial (mm. Mozilla) ja Bazaar (mm. Ubuntu). Keskitettyyn malliin verrattuna hajautetussa mallissa on esimerkiksi jokaisella kehittäjällä oma paikallinen repository. Hajautetuista lähteistä tulokset yhdistetään erilaisin perusteilla, kuten määrättyjen projektijäsenten päätöksillä mitkä muutokset siirretään eteenpäin tai sitten voidaan käyttää keskitetyn mallin tapaa. Hajautetun mallin järjestelmät ovat yleistymässä, mutta muutos keskitetystä mallista hajautettuun vaatii totuttelua. Pitämällä paikallista repositoryä, päästään aina käsiksi historiatietoon, sekä saadaan versionhallinnan tarjoamat edut ilman koodin yleisesti julkistamista.

Versionhallinta onkin osaltaan myös uskonnollinen kysymys samalla tavalla, kuten esimerkiksi käyttääkö vimiä vai emacsia, KDE:tä vai Gnomea tai Linuxia vai Windowsia. Erilaisista versionhallintamalleista löytyykin vahvoja mielipiteitä, kuten Linus Torvaldsin esitys hajautetun mallin Gitistä osoittaa. Yleisesti katsottuna tärkeintä kuitenkin on, että käytössä on edes jokin versionhallintajärjestelmä. Oli se sitten Subversion, Git, Mercurial, Bazaar tai vanha kunnon CVS.

Subversionilla alkuun
Tavallaan Subversionin ja yleisesti ottaen keskitetyn versionhallinnan voisi sanoa olevan jo hieman vanhentunutta, mutta Subversion tarjoaa tällä hetkellä helposti lähestyttävän ja hyvin tuetun kokonaisuuden versionhallintaan.

Toisaalta taas Subversionissa on heikkouksiakin, joten muihinkin vaihtoehtoihin kannattanee tutustua, kun perusteet ovat hallussa. Etenkin hajautettu malli vaikuttaa ihan kätevältä.

Linux, näppäimistö, hiiri ja evdev

Linuxin käyttäminen on mukavaa, sillä aina välillä on tarjolla kivoja yllätyksiä, ettei tietokoneen käyttäminen olisi liian helppoa. Tietenkin tällä(kin) kertaa varsinainen vika löytyy penkin ja tuolin välistä, joka ei ole huomioinut muuttuneita asioita. Olen kiertänyt eteen tullutta evdev-laitteistoajurin ja hal-välipalikan aiheuttamaa ongelmaa onnistuneesti muutamisen kuukauden ajan, mutta nyt piti löytää ihan oikea ratkaisu.

Ongelmana oli siis, että asioista X ja Y johtuen näppäimistö ei toiminut X-ikkunamanagerissa halutulla tavalla, vaan näppäimet olivat sanan mukaisesti sekaisin: muun muassa nuolinäppäin ei toiminut alaspäin ja muuta mukavaa. Onneksi ongelma oli helposti korjattavissa muuttamalla X.orgin asetustiedostosta näppäimistön asetukset oikeaksi eli evdev-ajurin vaatimusten mukaiseksi.

X-ikkunoinnin xorg.conf-tiedoston näppäimistöosio näytti tämän jälkeen seuraavalta:

Section "InputDevice"
    Identifier  "Keyboard"
    Driver      "evdev"
    Option      "CoreKeyboard"
    Option      "Name"          "Logitech HID compliant keyboard"
    Option      "Device"        "/dev/input/event3"
    Option      "XkbRules"      "xorg"
    Option      "XkbModel"      "evdev"
    Option      "XkbLayout"     "fi"
EndSection

Aikaisemmin Driver-arvona oli siis kbd ja XkbModel-arvona pc105. Sekä Name että Device -kenttien arvot löytyvät kirjoittamalla terminaaliin cat /proc/bus/input/devices ja vilkaisemalla oikeat arvot N ja H-riveiltä.

I: Bus=0003 Vendor=046d Product=c30e Version=0110
N: Name="Logitech HID compliant keyboard"
P: Phys=usb-0000:00:1d.1-2/input0
S: Sysfs=/class/input/input3
U: Uniq=
H: Handlers=kbd event3
B: EV=120013
B: KEY=10000 7 ff800000 7ff febeffdf f3cfffff ffffffff fffffffe
B: MSC=10
B: LED=7

Tämän lisäksi suomalaisen näppäinasettelun saamiseksi kopioin /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi-tiedoston sijaintiin /etc/hal/fdi/policy/11-keymap.fdi ja päivitin input.xkb.layout-avaimen määritteen muotoon

<merge key="input.xkb.layout" type="string">fi</merge>

eli muutin oletuksena olleen us-arvon fi-arvoksi. Nyt X ottaa vakiona käyttöön suomalaisen näppäinasettelun eikä jenkkinäppistä.

Hiiren asetukset ovatkin toimineet evdev-ajurilla jo pidempään ihan oikein seuraavilla asetuksilla.

Section "InputDevice"
    Identifier  "Mouse"
    Driver      "evdev"
    Option      "CorePointer"
    Option      "Protocol"      "evdev"
    Option      "Name"          "Logitech USB-PS/2 Optical Mouse"
    Option      "Device"        "/dev/input/event2"
    Option      "Buttons"       "10"
    Option      "ZAxisMapping"  "9 10"
EndSection

Tämä kaikki on tietenkin suhteellisen päivän selvää, mutta hyvä nyt kirjata ainakin itselle ylhäälle.

Toinen mukava muutos järjestelmän perustaan oli Gentoon ~archin siirtyminen käyttämään OpenRC:tä sys-apps/baselayout-2:n myötä. Asiasta oli toki siirtymisohje, joka selvensi syitä ja muutoksia, joita oli ihan riittävästi.

Songbird: kehityskelpoinen musiikkisoitin

Musiikkia on kiva kuunnella ja sen mahdollistamiseksi on tarjolla useita erilaisia musiikkisoittimia. Linuxissa perinteiset vaihtoehdot kohdentuvat KDE:ssa AmaroKiin ja Gnomessa Exaileen, mutta muitakin vaihtoehtoja löytyy etenkin Gnomessa. Songbird on uudehko tulokas musiikkisoitin-valikoimassa ja on saatavissa Linuxin lisäksi sekä Windowsille että Mac OS X:lle.

Songbirdin kehitys on vielä alussa ja parisen viikkoa sitten julkaistiin versio 0.5, mutta perusominaisuudet vaikuttivat jo olevan ihan kunnossa. Kuten nimestäkin voi päätellä, Songbird on sukua Mozilla Foundationin tuotteille ja sen myös huomaa: tavallaan sekä huonossa että hyvässä mielessä. Songbirdiä voisi melkein kuvailla Firefoxiksi, joka näyttää iTunesilta ja osaa toistaa mediatiedostoja. Jei. Musiikkisoittimen takana on kuitenkin osaava kehittäjätiimi, jonka historiasta löytyy muun muassa Winamp.

Testailin Songbirdin Linux-versiota ja Gentoon ebuild löytyi perinteisesti Bugzillasta ja asennuskin hoitui heittämällä. Ulkoasultaan Songbird muistuttaa etäisesti iTunesia ja on vakioteemaltaan hillityn musta. Musiikkikokoelman lisäys onnistuu parilla napin painalluksella ja musiikki toistuu nätisti. Videoiden toistamiseen olisi tarvinnut jotain GStreamerin lisäpalikoita, joita en jaksanut lähteä säätämään kuntoon. Musiikin ja videoiden toistamisen lisäksi Songbirdistä löytyy Internet-selain.

Firefoxin tapaan Songbirdin toimintaa voi laajentaa erilaisilla lisäosilla, joista löytyy muun muassa tuki Last.fm:lle, Wikipedialle, kuvan kansien haulle ja vaikka mille. Lisäpalikoiden avulla saadaan myös tuki iPodille ja MTP-laitteille eli muille MP3-soittimille, mutta tietenkin vain Windowsissa, vaikka käytännössä tämä olisi mahdollista myös Linuxissa. En tosin oikein pidä Firefoxin tapaisesta ideasta, että jokainen vähänkin erikoisempi tai yleisempikin musiikkisoittimen ominaisuus löytyy lisäosana eikä musiikkisoittimesta jo valmiina.

Songbird vaikuttaa ihan lupaavalta projektilta Amarokin, Exailen, iTunesin ja Windows Media Playerin kilpailijaksi, mutta kehitystyötä vielä tarvitaan. Etenkin iTunesin asemaa Mac OS X:ssä ja Amarokin asemaa KDE-käyttäjien piirissä voi olla hankala horjuttaa, jos vaihtoehtoinen ohjelma ei tarjoa mitään erityisen oivallista.

Myös Arstechnica on kirjoittanut lyhyehkösti Songbirdistä.

Songbird Songbird Songbird
Songbird Songbird Songbird

Terminaalien nopeuksilla on eroja

Linuxissa on tarjolla useita erilaisia terminaaleja eli päätteitä ja eri terminaalien ominaisuuksia voidaan verrata myös nopeuden osalta. Terminaalin nopeuden voidaan olettaa olevan kohtalaisen merkityksetön detalji, mutta se vaikuttaa osaltaan muun muassa ohjelmien kääntämiseen terminaalissa. Kääntö tuottaa paljon tekstiä, jonka näyttäminen terminaalissa hidastaa varsinaista kääntämistä, ainakin teoriassa. Huomion arvoinen asia siis etenkin Gentoossa.

Martin Ankerl on toteuttanut eri terminaalien nopeuksia mittaavan testin, joka pistää terminaalit ainakin yhden ominaisuuden perusteella paremmuusjärjestykseen. Testi on toteutettu mittaamalla terminaalien eroja näyttää tekstiä ruudulla, joka on merkityksellistä etenkin laajoja ohjelmia käännettäessä. Testilaitteistona on käytetty Pentium M 1.5GHz -prosessorilla ja ATI Radion Mobile 9600 (fglrx-ajurilla) -näytönohjaimella varustettua tietokonetta, johon oli asennettu Ubuntu 7.04.

Tekstin tulostukseen käytettiin RFC3261: ”SIP: Session Initiation Protocol” -dokumenttia (632kb), joka tulostettiin ruudulle time cat rfc3261.txt -komennolla.

Tulokset:

  • Sekä gnome-terminal että konsole ovat erityisen nopeita, joka on selitettävissä muistinkäytöllä sekä tulostuksen päivitystahdilla, joka ei ole aivan sulavaa. Useat avoinna olevat gnome-terminaalit käyttävät vähemmän muistia kuin vastaava määrä konsole-ikkunoita.
  • Jos muistin käytöllä on merkitystä, kannattaa valita wterm, eterm tai aterm, jotka ovat kohtalaisen nopeita ja tekevät sen muistitehokkaasti.
  • xterm on hidas ja muistia tarvitaan ominaisuuksiin verrattuna runsaasti.

Testissä todetaan, että käytännössä asia ei ole aivan näin yksiselitteinen ja tuloksiin voivat vaikuttaa useat eri asiat kuten Linuxin tai X:n ajanjakaja. Jos terminaalien nopeuseroilla on merkitystä, kannattaakin ajaa omat testit, sillä se on kohtalaisen yksinkertaistakin.

KDE 4:n Konsole-terminaalin kehittäjä Robert Knight huomattaa OS Newsin -kommenteissa, että testauksessa käytetty tiedosto ei ole riittävän suuri hyödyllisten tulosten saavuttamiseksi; testiajojen välillä on liian paljon varianssia. Knight jatkaa toteamalla, että pohjimmiltaan paljon tekstiä ruudulle tuottavien prosessien ajaminen sujuu huomattavasti nopeammin, jos terminaali-ikkuna ei ole näkyvissä.

Knight myös kritisoi tekstitiedoston käyttämistä terminaalin nopeuden testaamisen, sillä se ei vastaa reaalimaailman tunnetta terminaalin sulavuudesta ja nopeudesta: kuinka hyvin tekstiä voidaan rullata ruudulla eli esimerkiksi liikkua Vimissä auki olevassa dokumentissa.

Kaiken kaikkiaan voidaan siis todeta, että eri terminaalien nopeuserot ovat käytännössä merkityksettömiä, vaikka mitattavia eroja löytyy.

Esimakua OpenOffice.org 3.0 -versiosta: oikeaan suuntaan

OpenOffice.org on hyvä toimisto-ohjelmistopaketti, mutta kokonaisuutena vielä kaukana kaupallisesta Microsoft Officen hiotusta paketista. Loppuvuodesta julkaistavaksi suunniteltu OpenOffice.org 3.0 tuo useita kaivattuja uudistuksia, mutta OpenOffice.org Ninja -blogin esikatsauksen perusteella, uudistukset eivät ole siltikään maata järisyttäviä.

Esikatseltuina uudistuksina mainitaan OpenOffice.org Writerin osalta useiden sivujen näyttäminen, muistiinpanot marginaalissa ja tuki Microsoft Office 2007 -formaatille. Calc saa Solverin sekä näyttää solujen valinnat läpinäkyvästi eikä enää mustalla. Lisäksi solujen määrä kasvaa 256:sta 1024:ään. Mac-käyttäjien ilona on virallinen tuki Aqua-käyttöliittymälle, jolloin OpenOffice.org toimii kauniimmin myös Maceissä. Tähän asti Aqua-versiot ovat olleet epävirallisia, mutta ihan kohtalaisesti toimivia.

Uudistukset eivät pintapuolisesti näytä olevan mitään suuria, eikä OpenOffice.orgin suurimpiin kompastuskiviin tuoda uudistuksia. Writerin käyttö on luultavasti edelleen yhtä haastavaa ja jäykkää muun muassa sisällysluettelon, ristilinkitysten ja muotoilujen suhteen. Nämä ongelmat löytyvät toki myös osittain eri Wordin versioista. Tietenkin suurin OpenOffice.orgin hidaste on Microsoft Officen valta-asema ja erilaiset tiedostoformaatit, joita ei ihan pienellä murreta.

Microsoftin Office järkäleeseen verrattuna OpenOffice.org jättää toivomisen varaa, mutta kokonaisuutena tarjoaa hyvän ja varsinkin ilmaisen vaihtoehdon dokumenttien tuottamiseen. Kehityssuunta näyttää 3.0 -version esimaun perusteella hyvältä, mutta suurempia ja mullistavampia uudistuksiakin kaipaisi. Tarvittaisiin hieman Office 2007 -tasoista muutosta kokonaisuuden saattamiseksi uudelle käytettävyyden tasolle.

Kaavioiden piirtoa Linuxilla: kaukana Visiosta, mutta toimivaa

Erilaisia avoimen lähdekoodin kaavioiden piirtoon tarkoitettuja ohjelmia on saatavilla sekä Windowsille että Linuxille, mutta ei oikein vastaavan tasoista kokonaisuutta, kuin mitä esimerkiksi Microsoftin Visio tarjoaa. Kaavioiden piirrossa onkin tehtävä muutamia kompromisseja, sillä kattavaa ja viimeisteltyä kokonaisuutta useilla erilaisilla elementeillä varustettuna on turha odottaa. Hyviä vaihtoehtoja on kuitenkin tarjolla tarpeista riippuen.

Dia:
Dia on saanut vaikutteita Windowsin Visiosta, mutta suunnattu enemmän informatiivisiin piirroksiin ja yleiseen käyttöön. Dia tarjoaakin monipuoliset mahdollisuudet erilaisten kaavioiden ja piirrosten tekemiseen. GTK+-pohjainen Dia on käyttöliittymältään perinteikkään karu, mutta ominaisuuksiltaan erittäin käyttökelpoinen ohjelma kaavioiden piirtämiseen.

Valmiilla piirroselementeillä onnistuvat UML-kaaviot, verkkopiirrokset, vuokaaviot ja uusien piirroselementtien luonti onnistuu piirtämällä se SVG-muodossa ja tuomalla se Diaan tai kirjoittamalla yksinkertaisia XML-tiedostoja käyttäen SVG-määrityksiä. Lisäksi hieman monipuolisempia elementtikirjastoja (kuten UML) voidaan luoda lisäämällä piirroselementteihin C-koodia. Valmiit kaaviokuvat voidaan tallettaa omaan XML-formaattiinsa ja muun muassa EPS, SVG, PNG ja JPG-formaatteihin.

Dia tarjoaa ominaisuuksiltaan monipuolista kaaviopiirtoa, vaikka käyttö vaatiikin hieman totuttelua. Piirrokset syntyvät suhteellisen pienellä vaivalla ja on saatavissa sekä Linuxille että Windowsille.

Kivio

Kivio:
Kivio on osa KDE:n KOffice-toimisto-ohjelmistopakettia ja tarkoitettu vuokaavioiden ja diagrammien tekoon. Valmiit piirrokset on mahdollista tallentaa oman XML-formaatin lisäksi JPG, PNG ja BMP-formaatteihin. Piirroselementtejä voi tehostaa Pythonilla ja saatavilla on lisäksi maksullisia elementtejä.

Kivio jättää toiminnoiltaan hieman valjun kuvan, eikä yllä ihan Dian tasolle, vaikka tarjoaakin kelvolliset mahdollisuudet erilaisten kaavioiden piirtoon. Valmiiden ilmaisten piirroselementtien tarjonta on vähäistä, mutta Kivioon on mahdollista tuoda Dian piirtoelementtejä xfig2sml -projektin tarjoamana. Valitettavasti xfig2sml:n tuomat kuviot eivät ole yhtä laadukkaita kuin mitä Dia itsessään tarjoaa.

Toivottavasti tulevaisuudessa Kivion maksulliset piirroselementit löytävät tiensä myös ilmaisten elementtien joukkoon, sekä kuvien tallennus kaipaisi SVG-formaattia. Muilta osin Kivio onkin ihan kätevä kokonaisuus.

Kivio

Xbox 360 mediatoistimena ja median syöttäminen Linuxilta

Xbox 360 ei ole kovin käyttäjäystävällinen mediatoistoväline, sillä teoriassa lähettävään päähän vaaditaan Windows Media Center -kykyinen käyttöjärjestelmä. Onneksi käytännössä asia on paljon valoisampi, sillä tarjolla on erilaisia mediatoisto-ohjelmia, joilla Xbox 360:n saa huomaamaan tietokoneella jaetut mediat. Viime syksynä tulleessa päivityksessä Xbox 360 sai mahdollisuuden toistaa DivX-medioita, joten mediatoistinominaisuudet muuttuivat paremmiksi ja UPnP-mediapalvelimille edullisemmiksi. Testailin kahta UPnP A/V & DLNA mediapalvelinta, jotka tarjoavat UPnP-medialaitteille tiedon tarjolla olevista multimediatiedostoista.

uShare:
UShare on UPnP A/V & DLNA -mediapalvelin, joka tarjoaa UPnP-medialaitteille tiedon tarjolla olevista multimediatiedostoista. UShare osaa tarjota sekä kuvia, musiikkia että videoita, mutta ei toimi UPnP media-adaptorina, eli ei osaa muuttaa syötettävää sisältöä medialaitteelle sopivaksi. Käytännössä medialaitteen pitää siis osata itse toistaa haluttu mediaformaatti. Ohjelma on kirjoitettu C:llä GeeXboX-projektia varten, mutta toimii myös muilla alustoilla kuten Linuxilla. Tiedostojen striimaus on toteutettu sisäänrakennetulla http-palvelinkomponentilla ja ohjelman tilaa ja asetuksia voi sekä tarkkailla että osittain muuttaa web-sivulta.

USharen asentaminen onnistui helposti, sillä Gentoolle löytyy ushare-ebuild, jolla saadaan asennettua sekä uShare että tarvittavat UPnP-kirjastot. Asennuksen jälkeen vielä jaettavien mediatiedostojen ja verkkoasetusten määrittely ja UPnP mediapalvelin oli valmis.

Xbox 360:ntä löysi uShare-mediat helposti, joskin välissä oli turhaa säätämistä UPnP:n ja palomuurin kanssa. DivX-videot toistuivat hyvin, kun ”Status code: 51-C00DF236”, Optional Media Update -virheilmoituksen jälkeen Xbox 360:lle ladattiin valinnainen mediapäivitys, jolla saatiin DivX-toisto mahdolliseksi.

USharen käyttäminen oli kokonaisuutena helppoa, eikä mitään erikoisia asetuksia tai lisäohjelmia tarvinnut säätää kuntoon.

Fuppes:
Fuppes on hieman monipuolisempi UPnP A/V mediapalvelin ja osaa kuvien, musiikin ja videoiden syöttämisen lisäksi toimia myös mediamuuntimena eli tarvittaessa muuttaa syötettävän median toiseen muotoon. Fuppes mahdollistaa laitekohtaisten asetusten määrittelyn, joka on tarpeen etenkin jos halutaan muuntaa syötettävä media toiseen muotoon. Ohjelman toimintaa voi seurata ja muuttaa asetuksia web-sivulta. Ohjelma toimii Linux, BSD sekä Mac OS X -ympäristöissä.

Fuppesin asentaminen onnistui helposti käyttämällä Gentoon fuppes-ebuildia ja ohjelma asentuikin hienosti ja näki Xbox 360:n, mutta Xbox 360 ei vastaavasti löytänyt Fuppes-jakoja. Fuppesin Wikistä löytyi Xbox 360 kohtainen sivu, josta selvisi muutamat lisärivit fuppes.cfg-asetustiedostoon ja vfolder.cfg-tiedostoon.

Kaikesta lisäsäädöstä ja asetuksista huolimatta mediatiedostot jäivät vielä löytymättä, vaikka konsoli viimein löysi Fuppesin UPnP-jaon. Tätä ennen tarvittiin lisäksi UPnP-daemonin konffaaminen, käynnistäminen ja palomuurin poistaminen UPnP:tä estämästä. Fuppesin osalta medioiden löytymisen lisäksi ongelmaksi jäi siis vielä uPnP ja iptables-palomuurin yhteensovittaminen.

Ominaisuuksiensa puolesta Fuppes tarjoaa monipuolisemmat mahdollisuudet, mutta jää ainakin omien testieni perusteella hieman tavoitteesta, eli median syöttäminen Xbox 360:lle ei onnistunut. Ei varmastikaan mikään vaikea juttu, mutta tällä kertaa loppui into kesken.

Yhteenveto:
Sekä uShare että Fuppes vaikuttavat hyviltä ohjelmilta, mutta vastaavasti Xbox 360 ei oikein vakuuta mediatoistimena, varsinkaan jos sitä vertaa XMBC:llä varustettuun Xboxiin. Videoiden katselu kuitenkin onnistuu ihan hyvin, mutta käytettävyys ei ole aivan parhainta. Musiikkitiedostojen osalta UPnP:n jaetut tiedostot näkyvät kaikki samassa ”kansiossa”, eivätkä ole jaoteltuina, joka on hieman ikävää. Lisäksi on hieman epämukavaa, kun X0 puhisee kohtalaisen äänekkäästi.