My pretty face [ László Monda's Blog ]
Exploring the cyberspace, one quadrant at a time!
 
Main Page | Blog | Projects

Archive for April, 2006

UC: Administrative Status Report

Friday, April 28th, 2006

In the past few weeks I've made a couple of administrative changes to leverage the existing service infrastructure of the Free Software Universe and transition to the most recent tools available. Here's what I could make happen:

  • SourceForge SVN transition: The CVS repository got imported to the new SVN service of SourceForge. It works very smoothly regarding both service availability and performance. CVS had availability problems in the recent past, so I really admire this aspect of the service. SVN is clearly an evolutionary step after CVS. It's interesting how similar their CLI is and how different they are under the hood. I backup the repository to my box in every hour using rsync through cron.
  • FreeNode IRC registration request: I've requested a dedicated IRC channel on freenode.net. The admins haven't replied yet, which is not a suprise, but I'm already using the #uc channel anyway, even if it's not official and dedicated yet.
  • CIA registration: CIA is a fascinating service. The CIA bot is already sitting on #uc.
  • Gmane registration: Gmane kindly provides alternative interfaces to the lists.
  • Freshmeat registration: Because UC should have presence everywhere. ;-)

The Third Simonyi Conference – Movies Online

Friday, April 28th, 2006

A couple of videos can be downloaded from the home page of the Third Simonyi Conference. Some of them seem really interesting, especially the one about iWiW. I'm just downloading this gem with mimms. Just to let you know, these movies are Hungarian.

Evaluating Development Tools

Friday, April 28th, 2006

As an early adopter of new technologies, I'm constantly looking for new flows of ideas and software in the cyberspace. I'm doing this specifically in regard to UC nowadays.

As MonoDevelop 0.10 came out, I had to test it and guess what? It became pretty mature! Formerly I used Eclipse, because that was the only IDE with C# syntax highlighting, good CVS support and usable GUI. Unfortunately it doesn't have any advanced C# features, so development was not very smooth with it.

MonoDevelop has many advanced features. Speaking of me, code completition, application output navigation and code template insertion provide me the greatest help and really skyrocket my productivity, but it has other nice features as well.

Let's see a shot of this babe:

Image

Regarding its SVN support, it has issues. It makes very nice diffs, but it also kills MonoDevelop so bad when committing. It's worth enabling SVN support, though and getting to know what features you should and what features you shouldn't use.

MonoDevelop also has a built in GUI designer, Stetic. I very like its single window interface and signal handler code template generation feature, but I found that it has minor issues which are showstoppers for me, which I won't go into detail with. However it should clearly replace Glade some time in the not-so-distant future. It's interesting that it has a little bit different approach than Glade has. Stetic stores GUI description in a (non-Glade) XML, but instead of pulling in and parsing the GUI runtime, as Glade does, it generates C# GUI code which gets compiled with the rest of your application. Stetic has the advantages that generated code probably runs faster than XML parsing, it has no additional dependencies and its interface is also a pleasure to use. I will evaluating Stetic in a regular basis and fill bug reports as necessary as soon as I'll have more time for it.

I also played with Gazpacho. It has a better interface than Glade has but it generated bad XML that Glade couldn't pull in, so this was an instant deal breaker.

I'm Officially a Ubuntu Convert

Sunday, April 23rd, 2006

Image

I'm using Ubuntu Dapper Drake for about two weeks and I'm absolutely satisfied with it. It's probably my fourth distribution since I started fooling around with Linux back around 2000.

Before Ubuntu, I used Debian SID because I wanted to be on the bleeding edge. Well, I honestly believe that Debian is a great distribution, but it has rough edges regarding the desktop. I had many issues with it in the near past. I couldn't use the most recent pieces of the Mono desktop universe due to many different irritating errors one can ever think of.

I can only suggest migrating to Dapper to anyone who want a smooth desktop with the latest goodies. On the other hand, if you want to set up a server, use Debian Stable because the Debian folks are very concerned about security.

Pitonológia

Sunday, April 23rd, 2006

Írtam egy cikket a Python programozási nyelvről ami megjelent az SZTE TTK Newtone egyetemi lap 2005 februári számában, majd később a Magyar Unix Portálra is beküldtem. A cikket közérthetõ, játékos stílusban írtam.

Az eredeti formátum a Newtone kérésére DOC, amit shusaku átkonvertált HTML-be és taltos PDF-be. Köszönet nekik érte!

Pitonológia

Ki kell ábrándítanom a bilológusokat, mert nem a pitonokról lesz szó. Ahelyett, hogy a hüllők világát tanulmányoznánk én inkább egy programozási nyelvből, a Pythonból szeretnék átadni néhány villanást, ezzel remélve hogy minél többen fogjátok használni és ezzel végső soron rengeteg időt fogtok megtakarítani amelyet mindenféle értelmesebb dolgokra fogtok használni, mint például elmentek bulizni, megsétáltatjátok a kutyát, elutaztok nyaralni, vagy esetleg vesztek néhány tucat Python könyvet, és egész hátralevő életetekben már csak Pythonban fogtok kódolni és ki sem mozdultok a barlangotokból.

Gondolkodtam rajta hogy hosszasan regélek a különböző típusú nyelvek közötti alapvető szemléletbeli különbségekről, a Python helyéről köztük és hasonló mély és tanulságos dolgokról, de végülis úgy döntöttem, hogy minél emészthetőbb és játékosabb, de nem lebútitott stílusban fogom írni ezt a cikket. Néhány sor bekezdés után rögtön elkezdünk kódolni és van egy olyan érzésem hogy akit kicsit is érdekel a téma az rettentően fogja élvezni.

Hogy miért? Mert a Python az a nyelv, amely valóban képessé tesz arra, hogy a problémára koncentrálj. Úgy tervezték meg, hogy ne a nyelv sajátosságain kelljen rágódnod, hanem amennyire csak lehet magától értetődő legyen a használata. Gyorsabban fogod megtanulni, mint bármely más eddigi nyelvet amit ismersz és pillanatok alatt képes leszel benne kódot írni. Értékelni fogod a nyelv páratlan egyszerűségét és tisztaságát.

De várjunk csak, már hallom hogy kérdezed: “Ha ez egy ilyen csúcs nyelv, akkor miért nem hallottam róla vagy miért nem tanítják?”. A legtöbb nyelv, amiket tanítanak mind komoly múlttal rendelkező ipari szabványok. Ilyen a C, C++, Java, vagy majd pár év múlva a C#. Mindegyik ilyen nyelv mögött neves szabványosító szervezetek és cégek állnak komoly anyagi érdekekekkel. A Python nem egy ilyen nyelv. Éppen ezért az egyetemeken nem (nagyon) tanítják és csak akkor szerzel tudomást róla ha te magad teszel kitérőt az alternatív nyelvek világába. Több hasonló nyelv is van a Python súlycsoportjában, (pl. a Perl, a Tcl vagy a Ruby) de az a tapasztalatom (és sok más ember tapasztalata), hogy a Python a legjobban méretezhető és legtisztább ezek közül. Tehát ha írsz egy programot és az természetszerűleg egyre hosszabra nő, akkor nem fog “szétesni”, hanem átlátható marad, mert a nyelvet jól megtervezték. Persze ez azért rajtad is múlik, de a nyelven a legkevésbé.

Hogy mire tudod használni? Tulajdonképpen szinte akármire. Írhatsz benne szövegszerkesztőt, játékot, webszervert, kalkulátort vagy szinte amit csak akarsz. Rengetek különböző kiterjeszés tölthető le hozzá amelyekkel a legkülönbözőbb feladatokat oldhatod meg könnyedén. Talán egyszerűbb lenne arról írni hogy mire nem használhatod. Nem írhatsz benne például villámgyors 3D-s engine-t. Általános szabályként elmondható, hogy a Python sebességben kicsit gyenge a gyengén típusos mivolta miatt (amiről később majd ejtek néhány szót). Összehasonlításként dúrván elmondható, hogy ami C-ben 1 másodperc alatt lefut, az mondjuk Javában 5 másodperc és Pythonban 20. Bár ez jelentős sebességveszteségnek tűnhet, a gyakorlatban általában nem az. Ez utóbbit alátámasztja jónéhány nagyon sikeres, robosztus Python alkalmazás is, például a Plone, vagy a Mailman.

A nyelv prototipizáláshoz is kiváló. Ez azt jelenti, hogy kezdetben van valalmi elképzelésed egy feladat megoldására vonatkozóan. A fejedben vagy papiron már elkészítettél egy algoritmust és most eljött az idő hogy kipróbáld. Ahelyett hogy bármelyik másik nyelven valósítanád meg és tesztelnéd az algoritmusod, inkább írd meg Pythonban. Pillanatok alatt kész leszel vele és ha hibásnak bizonyul, akkor minimális erőfeszítéssel korrigálhatod. Majd ha kész vagy és úgy működik ahogy akartad, akkor átírhatod egy más nyelvre az immáron helyes algoritumst, hogy gyorsabban fusson.

Pár szót illene ejtenem a nyelv történelméről is, nem igaz? Rövid leszek, egyrészt mert engem mindig is untatott a történelem másrészt pedig a cikk gyakorlatias jellege miatt. A Pythont Guide Van Rossum hozta létre. Guido egy osztott operációs rendszeren, az Amoeba projecten kezdett el dolgozni 1986-ban az Amszterdami Egyetem berkein belül. Az Amoebának szüksége volt egy szkriptnyelvre. Guidora hárult a feladat és elég nagy szabadságott kapott a munkájában. Korábban ugyanitt már dolgozott az ABC-n, egy nyelven, amelyet úgy terveztek hogy könnyen tanulható és használható legyen a nem-programozók számára is. Az ABC-vel kapcsolatos tapasztalatait felhasználva kifejlesztett egy új nyelvet, amely az ABC minden előnyös tulajdonságát magában foglalta és a hibáit elhagyta, így született meg a Python. A projecthez rengetegen csatlakoztak. Az Internet elterjedésével felkarolta a Szabad Szoftver Közösség és egyre növő népszerűségnek örvend azóta is.

Pár szó a használatáról: Ha Linux közelében vagy, könnyű a dolgod, mivel minden valamirevaló disztribúcióban jelen van az értelmező. Ha pedig Windowst használsz, akkor letöltheted a http://python.org címről. Kis példáknál egyszerűen indítsd el az értelmezőt (csak símán írd be hogy “python”) és máris egyenként pötyögheted bele a sorokat és a végeredményt rögtön látodhatod. Ha kezdetben kísérletezgetsz vele, mindenképpen próbáld ki.

Ha a programjaidat forrásfájlokban akarod tárolni (ami nagyobb programoknál persze nélkülözhetetlen), akkor nyisd meg a kedvenc szövegszerkesztődet, hozz benne létre egy fájlt .py kiterjesztéssel, mondjuk filenev.py néven és ha megvagy vele, akkor etesd meg az értelmezővel a következőképpen:

python filenev.py

Ennyi bevezető után már igazán megírhatjuk az első programunkat. Legyen valami rendhagyó. Mondjuk írjuk ki, hogy “Mizu?”:

print 'Mizu?'

Talán néhányotoknak feltűnt hogy nincs pontosvessző a sor végén, mint ahogy olyan sok nyelvben megszoktad. Ez nem a véletlen műve. Valld be, amúgy is csak zavart, nem igaz? Miután kigyönyörködtük magunkat a kimenet esztétikus mivoltában és túl vagyunk a nehéz feladat okozta mentális sokkon, találjunk ki valami komolyabbat. Például irjunk egy mesemondó programot ami megirja helyettünk a bevezetést:

dolgok = ['óceán', 'cápa', 'Bill Gates']
for dolog in dolgok:
    print 'Egyszer volt egy ' + dolog + '.'

A nem túl meglepő kimenet pedig a következőképpen fest:

Egyszer volt egy óceán.
Egyszer volt egy cápa.
Egyszer volt egy Bill Gates.

Ha a példából messzemenő követketetéseket vonnál le a Bill Gates-szel kapcsolatos véleményemről, akkor valószínűleg nem jársz túl messze az igazságtól. Kicsit boncolgassuk a programot hogy mindenki pontosan megértse minden apró darabját. Az elején a dolgok egy változó, amelynek rögtön értéket is adunk. Ez az érték az egyenlőségjel jobb oldalán egy tömb, amely ahogy látod három sztringet tartalmaz. A tömb elemei szögletes zárójelek között szerepelnek és vesszővel vannak elválasztva egymástól. Minden sztringet aposztrófok határolnak. Ez után egy for ciklussal végigiteráljuk a dolgok elemeit amelyek a cikluson belül egyenként dolog néven jelennek meg. Azt hiszem mostanra már rájöttél, hogy a print paranccsal írhatsz ki sztringeket. A + operátor az egyedi sztringek összefűzésére való. Így már biztos tiszta a kép.

Most nézzünk egy nagyon népszerű szösszenetet amit kis korunkban olyan nagy hévvel csacsogtunk:

ki = ['Az egyik', 'A másik', 'harmadik', 'A negyedik', 'Az icurka-picurka']
mitcsinal = ['elment vadászni', 'meglőtte', 'hazavitte', 'megsütötte', 'mind megette']
for i in range(5):
    print ki[i] + ' ' + mitcsinal[i] + '.'

Itt az egyetlen újdonság amit felfedezhetsz, a range függvény. Ez egyike a Python beépített fügvényeinek. Ha egy paramétert adsz át neki, akkor a megadott paraméternek megfelelő nagyságú tömböt hoz létre. Így pl. a range(5) függvényhívás a [0, 1, 2, 3, 4] tömböt adja vissza, amelynek az elemeit a for ciklus végigjárja. A [] operátorral pedig a tömböket indexelhetjük, mint ahogy azt már megszokhattuk máshonnan.

Legutolsó példaként ugorjunk egy nagyot és hozzunk létre valami használhatót: írjuk meg a világ legegyszerűbb szótárprogramját. Nade hogy is működjön? Mondjuk rögtön az elindulása után várjon parancsokra. Két féle parancsot fogadjon el: lekérdezést és feltöltést. A lekérdezés értelemszerűen egy szó visszakeresése a szótárból, a feltöltés pedig egy szó megadása. Kicsit írjuk le pontosabban a működését. Minden feltöltést vezessen be egyenlőségjel, rögtön utána a megadandó szóval, majd a következő sorban a jelentésének a beírásával. Egy szó lekérdezése magának a szónak a beírásával legyen elvégezhető és a szótár teljes szókészletének a kiírását egy kérdőjellel lehessel lekérdezni. Lássuk hogy is néz ki egy ilyen program Pythonban:

szavak = {}
while True:
    parancs = raw_input('> ')
    if parancs == '?':
        for szo in szavak:
            print szo + ' -> ' + szavak[szo]
    elif parancs[0] == '=':
        szo = parancs[1:]
        jelentes = raw_input(szo + ' -> ')
        szavak[szo] = jelentes
    else:
        if szavak.has_key(parancs):
            print szavak[parancs]
        else:
            print 'A szo nem talalhato a szotarban.'

Micsoda? Hogy lehagytam a kapcsos zárójeleket? Az az igazság hogy itt nincs olyan. Ha egy új blokkot kezdesz, akkor azt beljebb kell igazítanod, nem pedig kapcsos zárójelekkel határolnod. Bár ez a szintaxis kezdetben talán zavarni fog, csak hozzászoksz majd. A kapcsos zárójelek hiányának kellemes mellékhatása az olvashatóbb kód amelyet idővel biztos te is értékelni fogsz. Hely hiányában megpróbálom a lehető legtömörebben és legérthetőbben elmagyarázni a fenti kódot. Egy furcsa értékadással kezdődik. Ez egy üres asszociatív tömböt hoz létre szavak néven. Gyakorlatilag ez ebben a példában sztringeket képez le sztringekre, tehát például az egyes szavak angol megfelelőjét magyarra. A későbbi sorokból könnyen ki tudod olvasni a használatát. Ez után egy végtelen ciklus következik, ami ugyebár itt nem túl elegáns. Azért ne ijedj meg, ilyenkor a Control-D -vel mindig ki tudsz lépni. Ennek a ciklusnak minden egyes ismétlődésében egy-egy parancsot fogadunk. A raw_input függvénnyel bekérünk a felhasználótól egy sztringet. A raw_input argumentuma a bevitelkor megjelenítendő szöveg. Az if-elif-else szerkezet nem meglepő módon a Python feltételes vezérlési szerkezete. Az if ágban ha kérdőjelet kapunk, akkor az összes szót kiirjuk. Az elif ágban az új szó feltöltését kezeljük le. Itt kihámozzuk a szót a parancsból az első karakter, az egyenlőségjel lehagyásával. A parancs[1:] kifejezésben a szeletelő operátor használaba kaphatsz betekintést, ami eldobja a sztring első karakterét. Az else ágban talán a has_key szó lehet homályos néhányotoknak. A szavak.has_key egy metódushívás. Ugyebár a szavak egy asszociatív tömb. Minden asszociatív tömb rendelkezik egy has_key metódussal, amely megmondja, hogy a argumentuma (a keresett szó) eleme -e az asszociatív tömbnek. Ettől függően írjuk ki a keresett szót vagy a hibaüzenetet.

Csak hogy lássuk élőben is a szótárunkat, itt egy próba a felhasználó által beírt részt kövér betűtípussal kiemelve:

> =apple
apple -> alma
> =honey
honey -> méz
> =sin
sin -> bűn
> ?
honey -> méz
apple -> alma
sin -> bűn
> honey
méz

Ennyi erre a hónapra. A Python legyen veled, meg a jó szerencse és ami még jól esik. Minden cikkel kapcsolatos kritikát vagy bármi mást boldogan fogadok a laci @ monda.hu levélcímemre vagy ha gondolod a honlapomat is megnézheted a http://monda.hu webcímen.

Filename Encoding Hell

Wednesday, April 12th, 2006

Anyone whose native language is other than English and uses Linux has probably experienced some kind of filename encoding issues. This problem can happen, because there is no standard filename encoding on Linux so depending on the active locales that the applications use, they can encode filenames with any encoding.

This can be a serious pain, because many applications fail to decode these badly encoded filenames and cannot open these files at all. You can rename the corrupted filenames one by one, of course, but this can be a very tiresome experience.

To make things better, here is a script named fix-filenames.py. It is originally written by Federico Mena Quintero, a hardcore GNOME hacker who I respect very much. His script had some problems so I have (hopefully) fixed most them. It is by no means perfect, but it's pretty usable.

amaroK 1.4 Analyzes the Mood of Your Songs

Wednesday, April 12th, 2006

I'm pretty fascinated with the amaroK moodbar. Haven't tried it yet, but sounds interesting. You gotta also check out the screenshot, as it looks pretty cool.

I cannot agree with the statement in the article that amaroK is the best audio player out there, because I don't like its interface that much. My favourite audio player is Rhythmbox. Its not so polished as Banshee, but Rhythmbox can play radio streams which is a must for me.

Holy Shit!

Sunday, April 9th, 2006

You can find some crazy shit on the net once in a while. Here's how a steamloller looks like:

Image

Rolls me on the floor.

Memo

Thursday, April 6th, 2006