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 lebutított 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íúttal rendelkez? ipari szabványok. Ilyen a C, C++, Java, vagy majd pár év míúva 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íúycsoportjá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 megírja 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