Unit testing Emacs Lisp code with ElUnit

ElUnit is a unit test framework for Emacs Lisp. You can define your test suites and see how they run against your code. It’s a great toolkit for test-driven development in Emacs Lisp as well. Running your tests manually after each changes may make you bored, though. Fortunately, you are using an extensible editor. In my scenario, I taught Emacs to automatically run corresponding test suites whenever I save the file I’m editing. As for the file topology, I put my tests under sub-directory tests/, and call them in scheme my-file-test.el. On the very beginning of each code file, I place a magic comment to specify file variable elunit-default-suite that holds the name of the test suite I want to run.

;; -*- elunit-default-suite: "my-demo-suite" -*-

The following snippet does the rest of the job: my_elunit.el

Reklámok

posts.publish( pid == “webconf_2008” )

Tihanyból hazaérve ágyba be, reggel bringára fel, és irány a webkonf. A 2008-as Magyarországi Web Konferencián jártam. (Avagy jobb későn, mint soha.)

A Budapest teremben Károly György Tamás (A web jövője) nyitotta a konferenciát. Tamás prezentációjában a sorra vette az általa web 1.0, 2.0 és 3.0 fedőnévvel jelzett korszakokat. A web 3.0 olvasatában a web szabványos és szemantikus erősödését jelenti. A témafelvetés érdekes, de a vontatott tempójú előadás következtében a bemutató végén a már félig alvó közönség rohant a friss levegőre, így komolyabb eszmecserére nem nyílt lehetőség. [Ötös skálán] kettes.

Elek Márton (Drótposta Kft.) GWT: Kompromisszumok nélküli AJAX – professzionális fejlesztő környezettel előadása körképpel szolgált a Google Web Toolkit jelenlegi helyeztéről, melyet Márton GWT alapokon megvalósított fejlesztési tapasztalataival bővített. A bemutatóban túlsúlyban voltak az általános GWT-t jellemző ismérvek, kiváncsibb lettem volna Márton személyes tapasztalataira, mélyebb szakmai fogásokra. Négyes.

Mysql adatbázis technikák címmel tökéletes PR produkció Szentiványi Gábortól (ULX Kft.). Azt a mai napig nem sikerült megfejtenem, hogy ennek mi keresnivalója volt egy szakmai jellegű közösségi konferencián. Még csak támogatók sem voltak. A hanyagság legkifejezőbb jele, hogy a fóliák angol nyelvűek voltak. Egyes.

Balássy György (MSDN KK) előadásaihoz már több ízben is volt szerencsém, kiváló előadó. A Budapest teremben első alkalommal a nap folyamán (Hatékony webes alkalmazásfejlesztés ASP.NET 3.5 és Visual Studio 2008 alapokon) forráskód volt a kivetítőn! György az ASP.NET 3.5-tel érkező javított (immáron szabványos) CSS támogatásról és LINQ-ről tartott példaprogramokkal illusztrált bemutatót. A LINQ jellemzőinek taglalása közben az volt az érzésem, hogy mintha én ezt az “újdonságot” láttam már, és eszembe is jutott, hol: két éve a Djangos előadásomban én is pont ugyanígy áradoztam annak ORM képességeiről. Ötös.

Csudutov Csudinka (Mimox Kft.) témaválasztása (Webfejlesztői karrierek 2008-ban – Mi várható?) próbálta tette az előadót: vajon tud-e tényleg úgy ötletekkel, tanácsokkal szolgálni a közönség – közösség – számára, hogy mellőzze azt a puszta tényt, hogy fejvadász cégnek dolgozik. Nem tudott. Előadásának üzenete: tanuld meg a tömegtémákat (ASP.NET, Java), és rendelkezz erős szakmunkás tudással, mert arra van szükség. Gondolkodó, értelmes, tanulni képes munkaerőre nem kell, csak dotnetes favágó. Egyes.

Hurrá, immáron másodszor forráskód a képernyőn (ExtJS 2 – Táblázat mánia)! Kolman Nándor magabiztos kézzel vezette végig a hallgatóságot egy konkrét ExtJS esettanulmányon. Élvezetes előadásmód, tartalmas prezentáció. Ötös.

A konferenciát a PHP, ahogy még nem csináltad zárta. Az előadás előtt PP-n röhögtünk, aki illusztrálta, hogy ő hogyan nem csinálta még, de valójában a társagában felvetett ötletek közül senki sem gondolt arra, amit Varga Tamás (Carnation) fejlesztési igazgató mutatott be: PHP-zni úgy, hogy fogalmad sincs róla. Még szerencse, hogy a rendelkezésére álló háromnegyed óra helyett félóra után „kifutott az időből”. Egyes.

Az idei konferencián tapasztaltam először, hogy tényleg túl hosszúak a 45 perces blokkok. Több előadó is hivatkozott arra, hogy idő hiányában nem érinthet egy-egy témát mélyebben, ami persze nem igaz, miképp 5 percben is lehet ütős előadást tartani, és 45-ben pocsékot is, mint ahogy ezt idén néhány előadó be is mutatta.

Szekcióvezető lévén a Budapest teremben hallgattam az előadásokat. A konferencia kiadvány és Bártházi András élménybeszámolója egyértelműen igazolja, hogy színvonalas és értékes előadásokból ezúttal sem volt hiány, habár nekem sikerült ebből kifognom egy rossz szettet.

Veszek egy tévét, hogy ne kelljen dugni?

Annak a nevét sem akarom, aki teljesnek és nikknek kétszer ugyanazt (ráadásul volt amelyik mindkétszer a nikkjét, szia ninja!), de azét (ővét) sem, aki meg becenév híján az űrlapmezőbe belehúz egy vonalat, hogy lásd, de hát az nincsen, a kedvencem mégis a feri, a négysorosintézménynevűferi, akinek még úgyis, a végéből hogy lecsíptem, húsz percig csak tördeltem, valahogy hogy (de hogy!) kinézzen és ráférjen, amíg még volt áram, persze ha igazán kocka lennék, odaírtam volna, hogy buffer_overflow_hook(), és hogy vihogtak volna mind, szegények, mindegy.

A kiterjeszthető szövegeditor felépítéséről

Az Emacs erőssége abban rejlik, hogy programozható editor. Persze bármelyik editor programozható, akár a Gedithez (neked Vim) is írhatsz Pythonban bővítményeket, és még meg sem kell tanulnod egy új nyelvet, pláne nem egy Lispet (sic!). Az Emacs erőssége és bonyolultsága viszont tényleg abban rejlik, hogy magát az editort programozhatod. Másképp fogalmazva – fejlesztői szempontból – az Emacs egy hatalmas kódtár; ha úgy tessék, egy Elisp API. Ez persze nem teljesen igaz. Nem igaz abban a formában, hogy az API az alkalmazás fölé emelt, jól definiált réteg, amin keresztül külső bővítmények (pluginok) az API alatt meghúzódó alkalmazással kommunikálhatnak, annak szolgáltatásait használhatják, és azokra épülve egészíthetik ki annak tudását. (Az ábrák Benjamin Ferrari: Emacs is different értekezése nyomán.)

Ábra: átlagos szövegeditorok felépítése Plugin API-val

Az Emacsban az API maga az Emacs. Emacsban – amikor API-ról beszélek – magát az Emacsot értem, nem egy mezsgyéjét a kódoknak, hanem az editor teljes forráskódját, amelynek bármelyik része elérhető, módosítható, kiterjeszthető. A te kódod (bővítményed) ugyanabban a szegmensben lesz, mint a mag fejlesztőinek kódja, nincs egy éles határ (ld. API) húzva a kettő közé.

Ábra: az Emacs szövegeditor felépítése Plugin API nélkül

Tényleg nyílt forrású, és abban az értelemben is, hogy nem csak tanulmányozhatod a kódot, hanem tetszés szerint, futás időben is változtathatod annak működését. (Nem forkolod az alkalmazást, hanem testreszabod.) Gedithez is írható Last.fm plugin, sőt, meg merem kockáztatni, hogy talán még triviálisabb is: import LastFm. Az Emacs előnye akkor jelentkezik, amikor olyan funkcionalitást vagy úgy szeretnél, amire nem vagy nem úgy kínál megoldást a (plugin) API, és ez a gondolat elvezethető egészen olyan szélsőséges esetekig, mint amikor a CVS Emacsban megjelent bugot átmenetileg egy advise-zal (neked decorator) orvoslod.

Éppen ezért emacsos kiegészítő (terminussal élve: mode) fejlesztésekor külön azzal foglalkozni nem szükséges, hogy rögzítsük az alkalmazás program-interfészét. A lispes alulról felfele építkezés és az a tény, hogy bármelyik függvényünk vagy változónk mások fejlesztése során felhasználásra kerülhet, kikényszeríti, hogy a teljes kiegészítő rugalmas és biztonságos legyen, és szükség szerint API-ként funkcionáljon egyéb komponensek felé.

ha sok pénzem lesz, veszek egy tehenet

„[…] amely platform független, ezáltal nem csak Windows operációs rendszerekre, hanem különböző operációs rendszerrel működő gépekre is telepíthető.” (Megújult az APEH nyomtatványkitöltő keretprogramja)

A különböző operációs rendszerrel működő gépekre. Érzi a pikantériát? Nem csupán Windows-ra, nem különböző operációs rendszerrel működő gépekre, főleg azokra, amelyek Ubuntu alatt xenen olyan Fedorát futtatnak, amiben meg Virtual Box-ban megy az XP. Persze értem én. Először a Jolán elkezdte írni (Wikipédia szócikkét idegesen gyűrögetve), hogy „hanem AmigaOS-re, BeOS-ra, BSD-re, CP/M-re, DOS-ra”, baszki, a tököm fogja ezt mind lekörmölni, backspace, backspace (sokszor), „hanem különböző operációs rendszerrel működő”, csak hát utána már nem olvasta el, hogy az a mondat, amit mondatnak írt, valójában is mondat-e, már mint nemcsak grammatikailag, hanem értelmileg is úgy szólván. Csak az irigység beszél belőlem, hagyjad.

Listening to Last.fm in Emacs

During the backup process before I had upgraded my notebook to Fedora 10, I decided not to copy back my Music folder to the fresh installation, but start using Last.fm whenever I’d like to listen to music. The question came quite straight—so how to play Last.fm streams in Emacs?

Emacs has its great multimedia system, which has Last.fm support in development stage. Following the instructions on EMMS‘s homepage and rizoma’s dotemacs, soon I got Last.fm working under my Emacs.

(To be exact, I used the EMMS source code patched by tsdh. It has some convenient addons.)

Put the following to into your dotemacs:

(add-to-list 'load-path "~/elisp/emms/")
(require 'emms-setup)
(emms-devel)
(emms-default-players)
(emms-lastfm-enable)

At this point, you’re almost ready to play the radio. You still need to set your Last.fm username and password. For the former, you may simply customize `emms-lastfm-username‘ for future sessions, but for the latter, I don’t recommend you to store your password in a plain text file—you’d rather add the following advise into your dotemacs, that asks you interactively for your Last.fm password every time you start the radio.

(defadvice emms-lastfm-radio (before read-passwd (lastfm-url))
  (if (string= emms-lastfm-password "")
      (setq emms-lastfm-password (read-passwd "Password: "))))

(ad-activate 'emms-lastfm-radio)

Go listening to Last.fm!

M-x emms-lastfm-radio-similar-artists RET angelspit

With the offical code, try this:

M-x emms-lastfm-radio RET lastfm://artist/Imperial brothers/similarartists

Letöltenéd a Youtube videót, mi?

Indítsd el Firefoxban a videót a Youtube felületén, várd meg, míg előtölti az egészet, majd a /tmp-ből másold ki a fájlt, vagy azt hitted RAM-ba pufferol meg minden, mi?

# ls -tr /tmp/ | grep  Flash
FlashOdPQZr
# cp /tmp/FlashOdPQZr ~/Desktop/mj_dangerous.flv
# mplayer ~/Desktop/mj_dangerous.flv