Ruby a DSL

Už je to nejaký čas čo sa cez Ruby prevalila móda Domain Specific Languages, až dodnes som tomu nevenoval pozornosť. Keďže som na zmienku o Ruby DSL natrafil znova, išiel som pohladať nejaké príklady, pretože mi nebolo celkom jasné ako to vôbec myslia.

Na výrobu DSL je zvyčajne potrebné skonštruovať akýsi parser tohoto špecializovaného jazyka. Také niečo samozrejme nie je triviálne, preto som si DSL asocioval najmä s Common Lispom, ktorý má v tomto navrch, pretože nepotrebuje žiaden špeciálny parser a tak je možné tieto DSL využívať priamo v programe. Program v programe, na to je Lisp špecialista.

Krásnym príkladom sú argumenty makra loop 1). Toto makro dovoľuje jednoducho a čitateľne zapísať veľké množstvo rôznych iterácií. Napríklad faktoriál:

(loop for i from 1 to n
      for acc = 1
      then (* acc i)
      finally (return acc))

Tento zápis pripomína iné jazyky z rodiny Algol, ale samotný Lisp ani náhodou. Je to DSL, konkrétne jazyk na zápis iterácií rôznej podoby a rôznych výsledkov. Makrá v Lispe sa prekladajú rovnako ako v C ešte pred vykonaním programu, takže použitie loop je vlastne zadarmo, neprináša žiadnu výkonnostnú penalizáciu.

Samozrejme keď mi podobný obraz behal po rozume, nebolo mi celkom jasné ako niečo také jednoducho a efektívne spraviť v Ruby. Dôvod bol omnoho prozaickejší – DSL v Ruby nie sú DSL v pravom slova zmysle.

Ukážky čo som našiel mali spoločné črty – snažili sa vyzerať ako angličtina a využívali benevolentnosť v syntaxi Ruby aby vynechali zátvorky. Prvá črta môže byť rozhodne príjemná pre používateľa, ale v žiadnom prípade to nie je nutná podmienka DSL. Tá druhá je len dôkazom, že je to stále len Ruby.

DSL je naozaj doménovo špecifický a mal by vychádzať z toho čo chceme dosiahnuť. Najskôr sa teda navrhne ako má taký zápis vyzerať a potom sa to implementuje.

Ruby je celkom praktický jazyk a toto pripodobenie DSL v konečnom dôsledku pomáha vytvárať použiteľný a konzistentný interface (názvy metód, keywords a pod.), čo je rozhodne dobrá vec. Takže nakoniec tento hype, nebol celkom zbytočný, a tým nemyslím len ako cieľ vtipkovania 2).

soup.io a web 2.0

Čo sa týka mňa, tak som konzervatívny v prijímaní nových web 2.0 služieb. Ani nie tak kvôli paranoji, ale pretože pre mňa často nemajú žiaden praktický význam. No napriek tomu samozrejme niektoré využívam.

soup.io je je lepidlom pre rôzne web 2.0 služby, o ktorom som sa dozvedel už na prvom slovenskom BarCampe, ale doteraz som ho nemal ako využiť. Taktiež poskytuje aj funkcie takzvaného “microblogu”, ale bez obmedzenia na 140 znakov (demencia). Výsledok som nazval “ramble”.

V procese vytvárania mojej polievočky som si narýchlo napísal skript, ktorý prevádza ČSFD hodnotenia na RSS feed:

csfd-hodnotenia-feed.php
<?php
echo '<?xml version="1.0" encoding="utf-8"?>';
 
// cast URL zavisla na konkretnom uzivatelovi
$USER = '';
 
//$MAX_ITEMS = 25;
$MAX_ITEMS = 100;
 
$pattern = '/<td colspan="2">.+?<img src="(.+?)".+?>.+?<a href="(.+?)">(.+?)<\/a>.+?\((.+?)\).+?<\/td>.+?<td.+?>(.+?)<\/td>.+?<td.+?>(\d+).(\d+).(\d+)<\/td>/';
 
//if (ini_get('allow_url_fopen') == '1') {
//   echo "OK"; // use fopen() or file_get_contents()
//}
 
ini_set('user_agent', 'My-Application/2.5');
$f = file_get_contents('http://www.csfd.cz/uzivatel/'.$USER.'/hodnoceni/');
$str = str_replace("\n", '', $f);
 
preg_match_all($pattern, $str, $matches, PREG_SET_ORDER);
//print_r($matches);
 
/*
 
  0 - matched block
  1 - globalne hodnotenie (img)
  2 - film - relative url
  3 - nazov filmu
  4 - rok
  5 - osobne hodnotenie
  6-8 - den, mesiac, rok hodnotenia
 
 */
 
?>
<rss version="2.0">
  <channel>
    <title>disorder - csfd.cz hodnotenia</title>
    <link>http://www.csfd.cz/</link>
    <description><![CDATA[disorder - csfd.cz hodnotenia]]></description>
    <lastBuildDate><?php echo date(DATE_RFC2822) ?></lastBuildDate>
    <generator>csfd.cz hodnotenia RSS extractor</generator>
    <ttl>360</ttl>
 
<?php $i = 0; ?>
<?php foreach ($matches as $m): ?>
<?php if ($i++ > $MAX_ITEMS) break; ?>
<item>
<guid isPermaLink="true">http://www.csfd.cz<?php echo $m[2]?></guid>
<title><?php echo trim($m[3])." ($m[4])" ?></title>
<pubDate><?php echo date(DATE_RFC2822, mktime(12, 0, 0, (int)$m[7], (int)$m[6], (int)$m[8]))?></pubDate>
  <link>http://www.csfd.cz<?php echo $m[2]?></link>
<description><![CDATA[
<a href="http://www.csfd.cz<?php echo $m[2] ?>"><img src="<?php echo $m[1] ?>" /> <?php echo trim($m[3]) ?></a> <?php echo trim($m[4]) ?>
&nbsp;<b><?php echo trim($m[5]) ?></b>
]]></description>
</item>
<?php endforeach ?>
  </channel>
</rss>

Menej je niekedy viac

Alebo ako si vydávatelia elektronických kníh pília konár na ktorom sedia?

V článku E-Book Price Increase May Stir Readers’ Passions píšu ako múdre hlavy vymysleli, že zdražia elektronické knihy. Nerozumiem ako prišli na to, že ebooky su dostatočne zabehnuté aby si mohli diktovať ceny.

V prvom rade je tu nutnosť investovať nemalú čiastku do krehkého 3) zariadenia, ktoré má aj isté nevýhody oproti knihám.

V druhom rade je tu zjednodušenie produkcie takej knihy. Elektronická verzia má odsek za odsekom, nie je ju potrebné nijak sádzať pre tlač.

A ešte je tu absencia papieru. Ako príklad som si vyhľadal knihu “The Shining” od Stephena Kinga:

  • Kindle Edition: $10.57
  • Paperback: $12.48

I keď oproti iným nákladom (za licenciu na vydanie, alebo priamo prácu vydavateľstva) môže byť zlomkom, určite by sa nemalo stávať, že elektronické verzie sú drahšie (a také príklady sa dajú ľahko nájsť).

Edície “Levné knihy” sú zrejme výsledkom výhodného nákupu sadzieb prekladov, oproti bežným cenám majú asi tretinovú cenu. Stavili na to, že predávajú lacno a veľa. A mám pocit, že im to vyšlo.

S elektronickými knihami to nie je také jednoduché. Papierovú knihu len tak niekto neskopíruje, takže strach či ich ľudia budú kopírovať tu naozaj nehrá takú rolu. Takže výsledkom relatívne malých úspor môže byť práve ten strach, preto vydavatelia udeľujú licencie za viac peňazí. Ale je možné si všimnúť, že pokiaľ tento predaj nejde cez rôznych prostredníkov, tak sa cena výrazne znižuje.

Na druhú stranu, ak by to malo pomôcť ľudom aby viac čítali, tak by to malo význam. A v konečnom dôsledku by to mohlo pomôcť budovaniu nového povedomia, a to skor či neskôr bude hrať dôležitú úlohu.

Je mi ľúto, že nemôžem jednoducho prispieť priamo autorom diel, ktoré považujem za hodnotné (hudba, filmy), pretože akoukoľvek nepriamou cestou sa veľká časť stratí na nesprávnych účtoch. V hudbe často existuje len jedna alternatíva – navštíviť koncert. Ešte menšia šanca je podporiť filmárov. Peniaze sa strácajú vo vreckách ľudí, ktorí neprispeli vôbec k tomu čo si na tom cením (distribúcia, marketing), naopak živia konzumný štýl, ktorý je mi nepríjemný.

Z e-ink technológie som nadšený, ale zrejme ešte dlho potrva kým paperbacky a knižnicu začnem nahrádzať elektronickými knihami. V zrovnaní s hudbou a filmami by pri dnešnej mentalite (nenásytných korporácií a kopírujúcich konzumentov) takúto premenu knižné odvetvie asi prežívalo ťažko. Bohužiaľ.

Nový rok, nový desktop

Po ťažkých modifikáciách ACPI handlera a OSD som porobil aj zmeny na desktope. Hlavnou motiváciou bola nespokojnosť s xfce4-session, ktorý mi prišiel úplne neudržovateľný a nemal som prehľad čo sa kedy spúšťa (navyše pri štarte sám od seba dlho “spúšťa” gnome-power-manager, ktorý som úplne odstránil). Vymenil som aj pohodlný gkrellm za pracne nakonfigurovaný conky. Výsledný desktop je o niečo prívetivejší k baterke a spúšťa sa bleskovo.

Nakoniec som sa uspokojil s týmito náhradami:

  • gkrellmconky (+conkyEmail), fbxkb
  • xfce4-panel Clipman → parcellite
  • xfce4-panel Workspace Switcher → mierne upravený netwmpager
  • xfce4-panel Iconbox, Systray → tint2 (je trochu nestabilný)

Ďalšie programy:

  • gmpc
  • nm-applet
  • mail-notification
  • rainlendar2
  • conky (+conkyForecast)

Screenshot:

(zoom)

update: nový blogísek

Znovu nadišiel čas (po vyše 3 rokoch) aby som sa posunul ďalej. Potreba dynamickejšej stránky prevýšila spokojnosť so svojím vlastným výtvorom (ale markdown blogy s geshi parserom boli dobré, išlo skôr o nespokojnosť so správou). Vizuálnu stránku si ponechávam aj po druhom prepise webu.

Zatiaľ som nevymyslel ako importovať staré zápisy a či to má vôbec zmysel. Permalinky zatiaľ fungujú zo subdomény old.disorder.sk.

1 2 ... 4 5 6 7
weblog.txt · Last modified: 2010/08/03 06:21 by 127.0.0.1