<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Rassie's Doghouse</title> <atom:link href="http://rassie.org/feed" rel="self" type="application/rss+xml" /><link>http://rassie.org</link> <description>Barking at technology</description> <lastBuildDate>Fri, 10 Jul 2009 18:18:57 +0000</lastBuildDate> <generator>http://wordpress.org/?v=2.9.2</generator> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>The time has come&#8230;</title><link>http://rassie.org/archives/276</link> <comments>http://rassie.org/archives/276#comments</comments> <pubDate>Fri, 10 Jul 2009 18:18:18 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[bleeding edge]]></category> <category><![CDATA[chrome]]></category> <category><![CDATA[flash]]></category> <category><![CDATA[google]]></category><guid
isPermaLink="false">http://rassie.org/archives/276</guid> <description><![CDATA[&#8230; and although it&#8217;s a bit rough along the edges, today&#8217;s Chromium build for Ubuntu (3.0.194.0~svn20090710r20374-0ubuntu1~ucd1) has Flash support! Gotta love those ads all around the pages :)
]]></description> <content:encoded><![CDATA[<p>&#8230; and although it&#8217;s a bit rough along the edges, today&#8217;s Chromium build for Ubuntu (3.0.194.0~svn20090710r20374-0ubuntu1~ucd1) has Flash support! Gotta love those ads all around the pages :)</p> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/276/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>If you do a corporate CPAN, please do it properly!</title><link>http://rassie.org/archives/273</link> <comments>http://rassie.org/archives/273#comments</comments> <pubDate>Mon, 25 May 2009 07:54:18 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[cpan]]></category> <category><![CDATA[cpan2dist]]></category> <category><![CDATA[enterprise]]></category> <category><![CDATA[packaging]]></category> <category><![CDATA[perl]]></category><guid
isPermaLink="false">http://rassie.org/?p=273</guid> <description><![CDATA[Coming from the &#8220;bad implementations of good ideas&#8221; department: Corporate CPAN.It&#8217;s a good idea, but a completely wrong solution. If someone is going to implement this, the proper way is not creating a PAUSE and CPAN mirror or anything like it. Corporate requirements are different. What you really need is a revival of http://debian.pkgs.cpan.org/ and [...]]]></description> <content:encoded><![CDATA[<p>Coming from the &#8220;<a
href="http://rassie.org/archives/270">bad implementations of good ideas</a>&#8221; department: <a
href="http://szabgab.com/blog/2009/05/1243228620.html">Corporate CPAN</a>.</p><p>It&#8217;s a good idea, but a completely <a
href="http://rassie.org/archives/250">wrong</a> solution. If someone is going to implement this, the proper way is not creating a PAUSE and CPAN mirror or anything like it. Corporate requirements are <a
href="http://use.perl.org/~jozef/journal/39027">different</a>. What you really need is a revival of <a
href="http://debian.pkgs.cpan.org/">http://debian.pkgs.cpan.org/</a> and also complete repositories for RHEL5, Debian, Ubuntu LTS, SLES9/10 etc. Those can be mirrored at will by usual and well-tested tools.</p><p>Thank you.</p><p><em>Update</em>: Removed last sentence, it&#8217;s been a &#8220;thinko&#8221; on my side :(</p> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/273/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>PBP 2nd ed.? Just open it up!</title><link>http://rassie.org/archives/270</link> <comments>http://rassie.org/archives/270#comments</comments> <pubDate>Fri, 22 May 2009 21:06:02 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[books]]></category> <category><![CDATA[open source]]></category> <category><![CDATA[pbp]]></category> <category><![CDATA[perl]]></category><guid
isPermaLink="false">http://rassie.org/?p=270</guid> <description><![CDATA[There are some long-overdue calls out there calling for the second edition of &#8220;Perl Best Practices&#8221;. And more often than not, people having good ideas don&#8217;t realize they are proposing a dreadful solution.I do consider PBP a good collection of recommendations. But sometimes, I loathe the impact it has on the community. It&#8217;s the Perl [...]]]></description> <content:encoded><![CDATA[<p>There are some long-overdue <a
href="http://www.dagolden.com/index.php/199/time-for-second-edition-perl-best-practices/">calls</a> out there calling for the second edition of &#8220;Perl Best Practices&#8221;. And more often than not, people having good ideas don&#8217;t realize they are proposing a dreadful solution.</p><p>I do consider PBP a good collection of recommendations. But sometimes, I loathe the impact it has on the community. It&#8217;s the Perl bible, Part II (just after the Camel book) and many people just go on believing in it. What we get as a result is a free community&#8217;s dependency on a non-free book.</p><p>At my place of work, we run <code>Perl::Critic</code> on SVN commits with PBP rule set. Everytime it finds something, it tells me to &#8220;Look at page XX of PBP for details&#8221;. So much for online help&#8230; Yes, I do have a copy of PBP in the office, even on my table. Sadly, it&#8217;s a german translation which has slightly different page numbering.</p><p>Why does a code analyzer cite some particular book edition? Imagine a second edition of PBP coming out. What do we get then, a command line parameter for book version? For a translation thereof? How many modules will we have to update? Usually a book gets updated when code changes, not other way around.</p><p>An even more heretical question: what happens if I don&#8217;t actually own a copy of PBP? Am I doomed to stay ignorant of best practices just because I&#8217;m just starting to learn and can&#8217;t or don&#8217;t want to shell out money for a book?</p><p>Other language communities are different. Both Ruby and Python give you extensive online documentation and also some dead-tree docs if you need them. But you don&#8217;t have to buy a book just to learn some best practices, those are readily available in blogs, wikis and what not. Perl&#8217;s community seems to trust in holy cows (camels or dogs for that matter) and just keeps insisting on buying books. &#8220;Modern&#8221; is something very different, though.</p><p>I know I can read PBP on Google Books, with several dozens of invisible pages. But PBP should have been online a long time ago. It should have been a community work from the beginning, since best practices is one of the first things a newbie needs.</p><p>There is only one way for PBP for the future: O&#8217;Reilly and Damian should open it up, just like &#8220;Higher Order Perl&#8221; has done. Make it downloadable at first, make it a community-driven project later. O&#8217;Reilly could even release a dead-tree edition every now and then, but the first step would be to free Damian from all the &#8220;please update PBP&#8221; e-mails &#8212; it&#8217;s perfectly probable that he doesn&#8217;t have time to do so and even more probable, no personal interest in bringing the second edition out. In that case, maybe he should raise his voice and work with O&#8217;Reilly on making that vastly important book a community project.</p> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/270/feed</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>The CPAN&#8217;s new clothes</title><link>http://rassie.org/archives/250</link> <comments>http://rassie.org/archives/250#comments</comments> <pubDate>Wed, 13 May 2009 00:19:40 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[cpan]]></category> <category><![CDATA[perl]]></category> <category><![CDATA[rant]]></category><guid
isPermaLink="false">http://rassie.org/?p=250</guid> <description><![CDATA[I must admit, I&#8217;m a bit underwhelmed by Enlightened Perl&#8217;s Iron Man competition. They&#8217;ve essentially replaced Planet Perl because every blogger from the Planet now also gets syndicated to the Iron Man (could you please work together guys and kill one of the planets?) However, the blog posts&#8217; medium quality hasn&#8217;t changed at all &#8212; [...]]]></description> <content:encoded><![CDATA[<p>I must admit, I&#8217;m a bit underwhelmed by Enlightened Perl&#8217;s <a
href="http://ironman.enlightenedperl.org/">Iron Man</a> competition. They&#8217;ve essentially replaced <a
href="http://planet.perl.org/">Planet Perl</a> because every blogger from the Planet now also gets syndicated to the Iron Man (could you please work together guys and kill one of the planets?) However, the blog posts&#8217; medium quality hasn&#8217;t changed at all &#8212; and neither have the subjects. It&#8217;s still the same: some &#8220;aren&#8217;t you using Perl 6 already? 10 reasons why you should!&#8221;, some &#8220;all hail Moose!&#8221;, some &#8220;new Padre released, it&#8217;s just as powerful as Emacs, but only for Perl stuff&#8221;, and also some &#8220;Did you know CPAN rocked?&#8221; That last bit of sensationalism is getting on my nerves.</p><p>Yes, I know, CPAN is great. I even agree. CPAN is great because of the sheer amount of data collected. But it&#8217;s a complete disaster otherwise. I might be a bloody newbie in Perl world, but everytime I&#8217;m confronted with CPAN, I&#8217;m lost and confused &#8212; and there is a major flaw in CPAN causing that feeling: every module in CPAN is essentially an open-source project, but nothing at CPAN works under this assumption. It&#8217;s full of closed down silos.</p><p>Let&#8217;s start with a simple example: toying with <a
href="http://cpan.uwinnipeg.ca/dist/CPANPLUS-Dist-RPM">CPANPLUS::Dist::RPM</a> (or maybe it&#8217;s this <a
href="http://search.cpan.org/~rsrchboy/CPANPLUS-Dist-RPM-0.0.8/">link</a>, who knows which is the canonical one) at work I&#8217;ve noticed it hangs sometimes, consuming 100% of CPU essentially doing nothing worthy. Let&#8217;s now assume I&#8217;d like to investigate this problem, but I don&#8217;t know if this is a bug or a mistake on my side.</p><p>So I go to the CPAN <a
href="http://search.cpan.org/~rsrchboy/CPANPLUS-Dist-RPM-0.0.8/">page</a> of the package. Oh, there is a discussion <a
href="http://www.cpanforum.com/dist/CPANPLUS-Dist-RPM">forum</a>, let&#8217;s click on that! Too bad, it&#8217;s broken. Bug reports? Oh yeah, there are whole three of them &#8212; none of which is my problem as far I can see. And I can actually <em>barely</em> see, since the visual component of that bug tracker makes Bugzilla of 1998 look good. But I still not sure that&#8217;s a bug, so I wouldn&#8217;t file one. What&#8217;s next? Maybe there is something new and relevant in development code in the revision control system? Oh wait, there isn&#8217;t any. CVS, SVN, Git, Mercurial, anything? Nope, no such thing on CPAN. Only release tarballs and some weird release differ tool. No revision control for an open source hosting in 2009, am I looking right?! Only way to ask something is to ask the author per e-mail? What about collaboration, patches, interactive community process for single modules?</p><p><strong>Dear Github guys, if you happen to read this, please host the CPAN for us! Revision control, bug tracking, code review, documentation parser &#8212; if you could add some discussion forums, you&#8217;d be a perfect CPAN hoster!</strong></p><p>So CPAN is so far: EPIC FAIL in discussion forums, somewhat FAIL in bug reports, EPIC FAIL in encouraging open development. Those are basic open source functionality nowadays, you know. And those are not nearly scratching the surface of critisicm.</p><p>Every other page on CPAN is different in design and interaction, there is no common and consice web interface, many different docs/search/rating mirrors which ultimatively produce a lot of Google spam. An awesome lot of cruft, a lot of broken modules which pop up prominently as first search result, no clear indication if a module is abandoned or actively developed. Even the most potentially useful features like dependencies&#8217; resolution are crippled &#8212; dependencies work only in one direction, whenever I&#8217;d like to know how people actually use some module, I&#8217;m lost again. This is CPAN of today, confusing and rusty. CPAN is naked and it seems nobody wants to point that out. I do not want to think that nobody actually notices.</p><p>The situation with CPAN is symptomatic for the whole Perl community. Whether it&#8217;s Perl.com, Perl.org, Perl Mongers site, Perl Monks, use Perl or CPAN, it&#8217;s always the same: unreadable and misaligned content, incomprehensive navigation and straining colors, self-representation on the web coming straight from 1999&#160;<sup
class='footnote'><a
href='#fn-250-1' id='fnref-250-1'>1</a></sup>. All the good code in the world and the power of the language won&#8217;t help anyone as long as people are alienated by ugly tools, visually and technically. Why can&#8217;t CPAN have the visual docs design from <a
href="http://perldoc.perl.org">http://perldoc.perl.org</a>, which at least features a syntax highlighter? Some CPAN mirror I land on every now and then from Google is even uglier than the one at <a
href="http://search.cpan.org">http://search.cpan.org</a>. Do we care at all about how those sites look? Do we care about fellow Perlers, about how hard they have to look for information? Why isn&#8217;t there some central site for Perl information? Why is every Perl project so independant that things like Perl Iron Man happen without cooperation with Planet Perl? <sup
class='footnote'><a
href='#fn-250-2' id='fnref-250-2'>2</a></sup></p><p>Perl community has so many possibilities but most of them stay unused. Most people are probably content with what they have and wouldn&#8217;t want to change anything. It&#8217;s fine, Perl&#8217;s way certainly supports that, but then we can forget about Perl revival. It&#8217;d be a shame, but we&#8217;d have only us to blame, not some superstitions about Perl being a &#8220;write-only language&#8221; or &#8220;ASCII soup&#8221;. The first impression counts and many newbies might not make it to the code at all &#8212; they&#8217;ll struggle with finding tutorials first. They won&#8217;t find out why Perl is great and will leave for other, probably inferior, languages, because they&#8217;ll be reading some ugly outdated quickstart documentation from 1997. They won&#8217;t find the shiny things, but they should be able to &#8212; as their first Google search result.</p><div
class='footnotes'><div
class='footnotedivider'></div><ol><li
id='fn-250-1'>Let&#8217;s not forget the sheer number of sites a Perler might need to visit to get all the information <span
class='footnotereverse'><a
href='#fnref-250-1'>&#8617;</a></span></li><li
id='fn-250-2'>Actually there is an easy explanation: at CPAN, if you have a proposal or a patch, you can&#8217;t actually do anything more useful than fork and upload your own package to CPAN. Same goes for Planets &#8212; open-source type cooperation seems mostly unknown to Perl 5 community. This changes with Perl 6, but it needs to change for Perl 5 too. <span
class='footnotereverse'><a
href='#fnref-250-2'>&#8617;</a></span></li></ol></div> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/250/feed</wfw:commentRss> <slash:comments>11</slash:comments> </item> <item><title>On the state of i18n in Perl</title><link>http://rassie.org/archives/247</link> <comments>http://rassie.org/archives/247#comments</comments> <pubDate>Sun, 26 Apr 2009 19:39:22 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[gettext]]></category> <category><![CDATA[i18n]]></category> <category><![CDATA[maketext]]></category> <category><![CDATA[perl]]></category><guid
isPermaLink="false">http://rassie.org/archives/247</guid> <description><![CDATA[The following text represents an effort to describe the situation I&#8217;ve encountered when I came to the Perl world last December. I&#8217;ve done some translating for the Debian project and I was a bit shocked about the state of Perl&#8217;s i18n. I have to admit, I&#8217;m still an inexperienced hacker, but I wanted to write [...]]]></description> <content:encoded><![CDATA[<p>The following text represents an effort to describe the situation I&#8217;ve encountered when I came to the Perl world last December. I&#8217;ve done some translating for the Debian project and I was a bit shocked about the state of Perl&#8217;s i18n. I have to admit, I&#8217;m still an inexperienced hacker, but I wanted to write this article to raise some awareness for the issues described if I&#8217;m right and learn something new if I&#8217;m wrong. Anyway, I tried to keep this article constructive and it&#8217;s still just my opinion, so please comment appropriately.</p><p>Disclaimer: I&#8217;m essentially talking about l10n, but most people know it as i18n, so I&#8217;m keeping &#8220;i18n&#8221; in text.</p><h2>The i18n problem</h2><p>When it comes to making your application tranlatable in Perl, there are actually two schools of doing this: via <a
href="http://search.cpan.org/dist/Locale-Maketext/lib/Locale/Maketext.pod">Maketext</a> and via <a
href="http://www.gnu.org/software/gettext/gettext.html">GNU gettext</a>. <code>GNU gettext</code> is the most known software translation tool used in most open-source projects while <code>Maketext</code> is a child of the Perl world. And the bad thing is: <code>Maketext</code> is currently more popular, but if you are using <code>Maketext</code> for making your application translatable, you are doing it wrong!</p><p>Let&#8217;s look at how <code>Maketext</code> works, according to its documentation and contrast that with the <code>gettext</code> way.</p><p><code>Maketext</code> manual defines the process as following (quoting freely):</p><ul><li>Decide what system you&#8217;ll use for lexicon keys (i.e. base language)</li><li>Create a class for your localization project</li><li>Create a class for the language your internal keys are in</li><li>Go and write your program</li><li>Once the program is otherwise done, and once its localization for the first language works right (via the data and methods in Projname::L10N::en_us), you can get together the data for translation.</li><li>Submit all messages/phrases/etc. to translators<ul><li>Translators may request clarification of the situation in which a particular phrase is found</li><li>Each translator should make clear what dependencies the number causes in the sentence</li><li>Remind the translators to consider the case where N is 0</li><li>Remember to ask your translators about numeral formatting in their language</li><li>The basic quant method that Locale::Maketext provides should be good for many languages. [&#8230;] For the particularly problematic Slavic languages, what you may need is a method which you provide with the number, the citation form of the noun to quantify, and the case and gender that the sentence&#8217;s syntax projects onto that noun slot.</li></ul></li><li>Once you&#8217;ve localized your program/site/etc. for all desired languages, be sure to show the result (whether live, or via screenshots) to the translators.</li></ul><p>There is a lot of sense in this and this has certainly been valid back in 1999, but a lot of work in this process is not specified. For example, the translation process itself is questionable:</p><ul><li>How do you &#8220;Submit all messages/phrases/etc. to translators&#8221;?</li><li>How do you integrate translations back from translators?</li><li>How do you resubmit translation strings if they change?</li><li>How do you communicate &#8220;situation in which a particular phrase is found&#8221; (i.e. context)?</li><li>What happens if one phrase has to be translated differently depending on context? How does one implement that in a module properly?</li><li>How does the translator &#8220;make clear what dependencies the number causes&#8221;? At what extents does that happen? Will the developer even understand him at all?</li><li>Does the programmer really have to understand all of implications of each language implemented? Should every programmer on the team understand them?</li><li>Who actually implements that &#8220;quant&#8221; method? How? What about languages with expections?</li></ul><p>One basic, but fatal, mistake <code>Maketext</code> does is off-loading a lot of linguistic work onto programmer.</p><ul><li>One particularly important point is the plural forms support (&#8216;1 apple&#8217;, &#8216;2 apples&#8217;), which is important for many languages outside of USA and Western Europe . <code>Maketext</code> requires you to write a <em>quant</em> function that gets a string and a number as parameters and does some voodoo to produce the right string. Voodoo is undefined. In <code>gettext</code> it is &#8212; a formula for producing plural forms is defined which selects one of provided plural phrases.</li><li>No translator in his sane mind will ever write a Perl module for a language (they aren&#8217;t programmers, remember?), the programmer will have to do it and will also have to understand the implications.</li><li>The <em>quant</em> notation (<code>"Your search matched [quant,_1,document]!"</code>) foolishly assumes word order is the same in all languages. Implementing a <em>quant</em> method properly would require passing the whole sentence into the function and doing a complete linguistic transformation which is highly non-trivial and better done by human.</li><li>Most of those linguistic &#8220;conventions&#8221; like number formatting or plural forms do not change over time and can be compiled at one place. One such place is Unicode&#8217;s <a
href="http://cldr.unicode.org">CLDR</a> project, which also includes plural form building and number/date formatting among other country- and language-dependant data.</li><li>It can&#8217;t even be assumed that the translators actually know all of these conventions! They might assume they know them, but translator is not necessarily doing translations for a living, he might be a volunteer, like in most open source projects. Imagine what happens when an amateur translator explains the inner workings of his native language to a programmer?</li></ul><p>Compared to this <code>gettext</code> has a saner, more practical approach &#8212; they provide a standardized translation string format, handle updates of message catalogs cleanly, provide all necessary tools for message extraction, don&#8217;t require any additional modules, work mostly language-agnostic, provide contexts and translators&#8217; comments, even plural forms calculation formulae are explicitely noted in the manual. It also emphasizes asynchronous translation: translation strings can be extracted and imported at any time in the lifecycle of a project. A developer essentially has to do the following:</p><ul><li>Implement using <code>gettext</code> in his project (depends on the language used)</li><li>Mark extractable strings</li><li>Run extraction and merging scripts (mostly included by <code>gettext</code>)</li><li>Submit translation files to translators</li><li>Copy received translations back into the project</li></ul><p><code>gettext</code> of course is not perfect. It lacks several vastly important features, like proper gender support (e.g. &#8220;He was born&#8221; and &#8220;She was born&#8221; is different in Russian). But it generally follows the &#8220;It mostly works&#8221; principle, making features needed 95% of the time available. Workflow tools make using <code>gettext</code> a snap. Compared to <code>Maketext</code> it is also easier to support for the programmer and easier for the translator to produce translations. The dreaded <em>quant</em> function actually makes using <code>Maketext</code> properly for translations impossible.</p><p>Apart from those techical shortcomings, there is a bigger threat.</p><h2>Community separation</h2><p>Remember <a
href="http://search.cpan.org/~ferreira/Locale-Maketext-1.13/lib/Locale/Maketext/TPJ13.pod">TPJ13</a>?
TPJ13 is an excellent summary of i18n problems, which every developer, even non-Perl one, should read. It&#8217;s solution part is hopelessly out-of-date &#8212; don&#8217;t forget, TPJ13 is getting ten years old this year. Back in 1999&#160;<code>gettext</code> hasn&#8217;t had any plural forms support and also lacked many other features so the authors&#8217; point used to be valid at that point. However, gettext had implemented its support for plurals rather fast and at that time <code>Maketext</code> should have been retired immediately. Sadly, this has not happened.</p><p>That misunderstanding haunts us until this day. Every novice Perl hacker is introduced to TPJ13 and tends to believe <code>Maketext</code> is the way to go. Failing to see its shortcomings however, yields in well-meant but still failed creations like <a
href="http://search.cpan.org/dist/Locale-Maketext-Lexicon/lib/Locale/Maketext/Lexicon.pm">Locale::Maketext::Lexicon</a> which tries hard to bring the world of <code>gettext</code> to <code>Maketext</code>-infected minds. What we get is crazy stuff like (verbatim from the POD)</p><pre><code>#: Hello.pm:11
msgid "You have %quant(%1,piece) of mail."
msgstr "Sie haben %quant(%1,Poststueck,Poststuecken)."
</code></pre><p>instead of a proper (German spelling corrected a bit):</p><pre><code>#: Hello.pm:11
msgid "You have 1 piece of mail."
msgid_plural "You have %d pieces of mail"
msgstr[0] "Sie haben 1 Poststueck"
msgstr[1] "Sie haben %d Poststuecke"
</code></pre><p>The former has virtually no tool support (not even <code>gettext</code>&#8217;s extraction routine <code>xgettext</code>), but extraction is supported by home-grown <code>xgettext.pl</code> (notice the <code>.pl</code> suffix). And there we have some fatal stuff going on:</p><ul><li><code>Locale::Maketext::Lexicon</code> is considered <strong>the</strong> solution for using <code>Maketext</code> with <code>.po</code> files.</li><li>Neither <code>Locale::Maketext::Lexicon</code> nor <code>xgettext.pl</code> have any notion of proper <code>gettext</code> plurals</li><li><code>.po</code> files created by <code>xgettext.pl</code> are not fully supported by translation tools like PoEdit, KBabel, Launchpad Rosetta, 99translations.com etc.</li><li><a
href="http://search.cpan.org/~mramberg/Catalyst-Plugin-I18N-0.09/lib/Catalyst/Plugin/I18N.pm">Catalyst::Plugin::I18N</a>, the only i18n plugin for the extremely popular <a
href="http://catalyst.perl.org">Catalyst</a> web framework, is based on <code>Locale::Maketext::Lexicon</code></li><li><code>xgettext.pl</code> has support for <a
href="http://www.template-toolkit.org">Template-Toolkit</a> templates, YAML, FormFu and Mason. Original <code>gettext</code>&#8217;s <code>xgettext</code> does not.</li></ul><p>So there we have it: Perl hackers mostly use tools which are unsuitable and incompatible with the rest of the world without knowing it. The right tools actually can&#8217;t help them become &#8220;sane&#8221;, since <code>xgettext</code> can&#8217;t extract all those formats which <code>xgettext.pl</code> can and I don&#8217;t think that&#8217;ll change sometime soon.</p><h2>Alternatives</h2><p>Luckily, some hackers have produced a <a
href="http://search.cpan.org/dist/libintl-perl/"><code>libintl-perl</code></a> library which basically re-implements <code>GNU gettext</code> in Perl. There is a pure Perl implementation of message catalogs called <code>Locale::gettext_pp</code>, an XS version called <code>Locale::gettext_xs</code> (Warning: this one has some problems with <code>mod_perl2</code>!), a Perl wrapper around that (<code>Locale::Messages</code>) and building upon that an excellent Perl-y implementation of the framework <code>Locale::TextDomain</code>. These tools are worth your time.</p><p>Even though we have <code>Locale::TextDomain</code>, what should be done to amend the whole <code>Maketext</code> situation? I&#8217;d propose several possible actions:</p><ul><li>Read the <a
href="http://www.gnu.org/software/gettext/manual/gettext.html">GNU gettext Manual</a> to fully understand what these tools can do for you</li><li>Educate your colleagues, tell them about this article and explain the differences</li><li>If you can, port your current code to <code>Locale::TextDomain</code></li><li>Don&#8217;t use <code>Maketext</code> for any new code</li><li>Update important code using <code>Maketext</code> like the Catalyst plugin mentioned above to support <code>gettext</code></li><li>Update TPJ13 to reflect the situation</li><li>Port extraction routines from <code>xgettext.pl</code> to <code>xgettext</code></li></ul><p>This and general awareness of the issue should bring Perl&#8217;s i18n back on track. Thank you for reading!</p> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/247/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Wishes coming true</title><link>http://rassie.org/archives/242</link> <comments>http://rassie.org/archives/242#comments</comments> <pubDate>Tue, 13 Jan 2009 18:35:41 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[blogs]]></category> <category><![CDATA[emacs]]></category> <category><![CDATA[google]]></category> <category><![CDATA[projects]]></category><guid
isPermaLink="false">http://rassie.org/?p=242</guid> <description><![CDATA[Lately, two of the projects I wanted implemented badly and was thinking about implementing myself have been started by other people:Google&#8217;s blog converter
Emacs Starter KitLet&#8217;s hope both produce something usable. And now I&#8217;m sort of relieved, since contributing to existing projects is simpler than starting new ones, especially with my limited knowledge on both subjects. [...]]]></description> <content:encoded><![CDATA[<p>Lately, two of the projects I wanted implemented badly and was thinking about implementing myself have been started by other people:</p><ul><li>Google&#8217;s <a
href="http://code.google.com/p/google-blog-converters-appengine/">blog converter</a></li><li><a
href="http://github.com/technomancy/emacs-starter-kit/tree/master">Emacs Starter Kit</a></li></ul><p>Let&#8217;s hope both produce something usable. And now I&#8217;m sort of relieved, since contributing to existing projects is simpler than starting new ones, especially with my limited knowledge on both subjects. Just like I&#8217;ve been shown by the second one, since I didn&#8217;t know about <a
href="http://tromey.com/elpa">ELPA</a> yet.</p> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/242/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Taming cpan2dist on Ubuntu 8.10</title><link>http://rassie.org/archives/218</link> <comments>http://rassie.org/archives/218#comments</comments> <pubDate>Sun, 04 Jan 2009 03:49:02 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[cpan2dist]]></category> <category><![CDATA[intrepid]]></category> <category><![CDATA[perl]]></category> <category><![CDATA[ubuntu]]></category><guid
isPermaLink="false">http://rassie.org/?p=218</guid> <description><![CDATA[cpan2dist is great. Easily one of the examples why people at Debian (and its derivates) absolutely love Perl and CPAN. However, it requires some fiddling to get right and since I&#8217;ve just done that today I&#8217;d like to write this stuff down for generations to come.A quick introduction for those who are unfamiliar with cpan2dist: [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://search.cpan.org/~kane/CPANPLUS-0.84/bin/cpan2dist"><code>cpan2dist</code></a> is great. Easily one of the examples why people at Debian (and its derivates) absolutely love Perl and CPAN. However, it requires some fiddling to get right and since I&#8217;ve just done that today I&#8217;d like to write this stuff down for generations to come.</p><p>A quick introduction for those who are unfamiliar with <code>cpan2dist</code>: it fetches a Perl package from CPAN and installs it into your system using distribution&#8217;s tools. Thus you can resolve possible distribution upgrades painlessly, since every Perl package is also shown in your package management. It&#8217;s part of Perl 5.10 distribution and makes native package installation easy.</p><p>There are however some catches and the first hurdle comes at the very beginning: distribution-specific packaging is done with plugins and sadly Intrepid does not include the Debian plugin for <code>cpan2dist</code>, <a
href="http://search.cpan.org/dist/CPANPLUS-Dist-Deb/"><code>CPANPLUS::Dist::Deb</code></a>. Since you can&#8217;t install that one from packages yet (due to lack of <code>CPANPLUS::Dist::Deb</code>, welcome to recursion), you&#8217;d have to install it manually &#8212; the good thing is, it will be the only package installed manually and it also can be replaced with a packaged one after bootstrapping the whole system. Just run</p><div
class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/></div></td><td><div
class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cpanp install CPANPLUS::Dist::Deb</div></td></tr></tbody></table></div><p>and the first step is done!</p><p>Now <code>cpan2dist</code> can be used. Let&#8217;s reinstall CPANPLUS::Dist::Deb, this time as a Debian package!</p><div
class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/></div></td><td><div
class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">cpan2dist <span
style="color: #660033;">--format</span> CPANPLUS::Dist::Deb <span
style="color: #660033;">--buildprereq</span> <span
style="color: #660033;">--install</span> <span
style="color: #660033;">--skiptest</span> CPANPLUS::Dist::Deb</div></td></tr></tbody></table></div><p>It should give you a <code>sudo</code> prompt at some point, this is because it installs the Debian package already, so you should be done in a couple of seconds.</p><p>The options&#8217; meanings (in this order): the desired format of the packages, pre-requisites should be all built, packages should be installed, tests should not be executed before build (time saver) and module CPANPLUS::Dist::Deb is being built.</p><p>However, we are not done yet. You&#8217;d notice that cpan2dist tries to resolve some dependencies which are provided by basic Perl packages <code>perl</code>, <code>perl-base</code> and <code>perl-modules</code>. These might, but in most cases should not be downloaded and built from CPAN. Luckily, cpan2dist can be provided with an &#8220;ignore list&#8221;, the downside is that the default one is tiny und thus mostly useless. We&#8217;d have to recreate this list from our system:</p><div
class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table
cellspacing="0" cellpadding="0"><tbody><tr><td
style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br
/></div></td><td><div
class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">dpkg -L perl perl-base perl-modules | grep \.pm$ | sed 's/^\/usr\/\(share\|lib\)\/perl\/[.0123456789]*\/\(.*\)\.pm$/^\2$/g' | sed 's/\//::/g' &gt; ignorelist</div></td></tr></tbody></table></div><p>This is my recipe. I get the list of all <code>*.pm</code> files from <code>perl</code>, <code>perl-base</code> and <code>perl-modules</code> and re-create the module name from its path. Every entry becomes a pattern (e.g. <code>^Test::Simple$</code>) so that module names wouldn&#8217;t match as substrings and the whole list is dumped to <code>ignorelist</code>. Now we have to add an <code>--ignorelist ignorelist</code> option to the cpan2dist command line.</p><p>This should round it up &#8212; if you are lucky, everything goes well and you&#8217;d have an installed module as a Debian package. If you have some bad karma on a particular day, you&#8217;d end up with some errors, all of which can be solved with some manual package installation and careful reading.</p><p>One problem remains though: <code>cpan2dist</code> doesn&#8217;t seem to check whether a particular package is available from the archive. But that&#8217;s only a small nuisance in an otherwise really useful package.</p> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/218/feed</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Private feeds in Google Reader</title><link>http://rassie.org/archives/216</link> <comments>http://rassie.org/archives/216#comments</comments> <pubDate>Mon, 29 Dec 2008 13:56:38 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[code]]></category> <category><![CDATA[google reader]]></category> <category><![CDATA[perl]]></category><guid
isPermaLink="false">http://rassie.org/?p=216</guid> <description><![CDATA[Probably the most requested feature in Google Reader has been support for private feeds. Probably, they think every good web application should support private links (the ones with a random ID attached to it) so that their users can keep control of their credentials &#8212; a very sensible thing to assume. Private links can be [...]]]></description> <content:encoded><![CDATA[<p>Probably the most requested feature in Google Reader has been support for private feeds. Probably, they think every good web application should support private links (the ones with a random ID attached to it) so that their users can keep control of their credentials &#8212; a very sensible thing to assume. Private links can be reset everytime you need it and thus you should be safe. Google also keeps such feeds private, you&#8217;d need to get the URL into main Google index to make it appear somewhere. Also, Google needn&#8217;t store any passwords for other services, thus reducing possible critisism on itself.</p><p>However, not every website supports private links and there we have a problem: I&#8217;d like to use a couple of private feeds with Google Reader but can&#8217;t. Or better couldn&#8217;t, since I&#8217;ve made myself a late Christmas present: a Google Reader private feeds workaround!</p><p>It&#8217;s a small Perl script intended to be running somewhere on your own hosting. What does it do? Not much: given a GUID it fetches an associated website and returns it to the requester. If GUID is not found, nothing happens. If an error occurs, nothing is returned either. So simple. You still have to take care of the feed list though.</p><p>I will upload the code and some instructions to the newly created <a
href="http://code.google.com/p/private-feeds/">Google Code project</a> shortly. Stay tuned!</p> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/216/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Website&#8217;s content &#8212; which goes where?</title><link>http://rassie.org/archives/203</link> <comments>http://rassie.org/archives/203#comments</comments> <pubDate>Sun, 28 Dec 2008 23:09:04 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[blogging]]></category> <category><![CDATA[git]]></category> <category><![CDATA[ikiwiki]]></category> <category><![CDATA[jekyll]]></category><guid
isPermaLink="false">http://rassie.org/?p=203</guid> <description><![CDATA[Yet another blog generator surfaced, called Jekyll. Probably nobody would have noticed, if it wasn&#8217;t for GitHub to introduce their GitHub Pages, based on Jekyll. GitHub has been a blogging platform for a while already (see e.g. Homoiconic by Reg), so this seems like making blogging an official feature. Also, this justifies a critical analysis [...]]]></description> <content:encoded><![CDATA[<p>Yet another blog generator surfaced, called <a
href="http://github.com/mojombo/jekyll/tree/master">Jekyll</a>. Probably nobody would have noticed, if it wasn&#8217;t for <a
href="http://github.com">GitHub</a> to introduce their <a
href="http://github.com/blog/272-github-pages">GitHub Pages</a>, based on Jekyll. GitHub has been a blogging platform for a while already (see e.g. <a
href="http://github.com/raganwald/homoiconic/tree/master">Homoiconic</a> by <a
href="http://reginald.braythwayt.com/">Reg</a>), so this seems like making blogging an official feature. Also, this justifies a critical analysis of the concept.</p><p>I&#8217;ve been following <a
href="http://ikiwiki.info">ikiwiki</a>, another site generator, for about half a year now. Actually, it&#8217;s a hacker&#8217;s dream, blogging with Emacs, storing the whole history in Git, having your site update automagically and being mostly secure because most web-visible content consists of generated static pages. For me, being statical is just a nice add-on, but I really <em>really</em> like the idea of blogging with my $EDITOR instead of some idiotic web-page form (but that&#8217;s a completely separate ranting topic). Lack thereof in Wordpress is the main reason I&#8217;m so lazy about blogging.</p><p>However, there is one major flaw, which so far has been exhibited by every RCS-enabled blogging engine I&#8217;ve seen: these tools <strong>violate MVC</strong>. Simple case goes like this: user creates a new blog entry somewhere under <code>posts/2008/12/26/my-blog-post.mdwn</code>, which gets transformed to <code>/posts/2008/12/26/my-blog-post.html</code> by the engine. There might be some derivation, but the principle stands &#8212; directory structure in the source is being mapped one-to-one to the web. However, this means that entry&#8217;s <strong>representation</strong> in a URL is directly attached to the <strong>content</strong> of this entry. Separating concerns, anyone?</p><p>Actually, it seems like correct behaviour: put a bunch of content into a storage and let some website generator do its work and present this content to the site visitor. In each blogging system each text is available at several locations: entry&#8217;s permalink, month&#8217;s overview, tag&#8217;s overview, category&#8217;s overview, etc. The problem is in our case that a single web-site location for the content is assumed and hard-coded by the author, every other is generated, which is to say the least, inconsistent.</p><p>A single blogger can play different roles on his website at the same time: designer, admin, coder, author, editor, usability expert etc. It&#8217;s important to remember which role starts when. Putting a text into the system is author&#8217;s task, but the editor&#8217;s the one to decide where to put it on the website. Depending on situation, there might be several locations, might be just one or even none if content is not to be published until a certain date. But it&#8217;s still in the database, it&#8217;s its visibility that changes.</p><p>Therefore separating concerns in this case requires web-site generation which relies only on content&#8217;s metadata and a set of publication rules. The contents of each page on the website could be defined by subroutines returning the entries. For example, if we assume that a list of all articles on a web-page is available (<code>@posts</code>), we could define (pseudo perl code):</p><ul><li>All posts: <code>"/posts/" =&gt; map {$_.summary} sort {$a.date cmp $b.date} @posts</code></li><li>All posts for a certain date: <code>"/posts/\d{4}/\d{2}/\d{2}/" =&gt; map {$_.summary} grep {$_.date ~= "\1/\2/\3"} @posts</code></li><li>An index page: <code>"/" =&gt; grep {$_.category ~= "start" } @posts</code></li></ul><p>In this case, it&#8217;s irrelevant how these pages are stored, the engine needs to make sure <code>@posts</code> is available and contains everything from a site.</p><p>In this context it&#8217;d make sense to define permalink strategy too. Taking an ID of an article as its permalink, one could define <code>$permalink = sub { "/id/" . $_.id }</code> to be a canonical generator for permalinks for each article.</p><p>What happens if permalinks change? Consider permalinks containing slugs (many people like them). Slugs are mostly auto-generated, so that permalink based off a slug <strong>will</strong> change if you update the title of your blog post. If it doesn&#8217;t, it might not be appropriate for the post anymore and thus misleading for the visitors. You could also change you permalink strategy completely, for whatever reason. If your writing is somehow relevant and linked to on the net, you&#8217;ll break a lot of links on other websites. Nobody wants that, but everyone does that every now and then.</p><p>If we however additionally save a URL and the subroutine which has been used for routing each time then we&#8217;d have a redirection permalink list. It could be checked by default if no current page definition matched. This way for each part of your web-site which has been visited at least once, you&#8217;d have a routing available and thus, these URLs would not die. This could help our permalinks be at least a little bit more permanent.</p><p>So to sum it up: in a perfect world we&#8217;d be putting our blog entries under version control in an arbitrary order, making sure our metadata is correct. A rule set would define how the website is built together based on this metadata. Permalinks would not die at the wave of a hand, defining additional views and URL patterns would be as simple as adding a single text line to a file. A couple of HTML templates would round up this whole stuff. A hacker&#8217;s ranting would be a little bit easier in a long run&#8230;</p> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/203/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>The games we play&#8230;</title><link>http://rassie.org/archives/183</link> <comments>http://rassie.org/archives/183#comments</comments> <pubDate>Mon, 07 Apr 2008 18:11:15 +0000</pubDate> <dc:creator>rassie</dc:creator> <category><![CDATA[Main]]></category> <category><![CDATA[games]]></category><guid
isPermaLink="false">http://rassie.org/archives/183</guid> <description><![CDATA[I guess I&#8217;m now stuck in the blogging business forever. Previously, none
of my friends blogged &#8212; some were ignorant, other paranoid or just
plain lazy. And now this: an old friend,
who literally pinged me for the last eleven years because I&#8217;ve been lazy
enough not to send a message to good old Riga, pushes me to the [...]]]></description> <content:encoded><![CDATA[<p>I guess I&#8217;m now stuck in the blogging business forever. Previously, none
of my friends blogged &#8212; some were ignorant, other paranoid or just
plain lazy. And now this: an old <a
href="http://blog.copperred.net/">friend</a>,
who literally pinged me for the last eleven years because I&#8217;ve been lazy
enough not to send a message to good old Riga, pushes me to the edge, <a
href="http://blog.copperred.net/2008/04/beloved_games/">demanding</a> a list of
games I play. Oh well. Since modern communication is just a matter of
trackbacks and comments in a blog, I guess I&#8217;ll make this public.</p><p>Geez, games&#8230; Computer games&#8230; I just don&#8217;t quite know what to write
about them, since I haven&#8217;t been playing much in the last seven or eight
years, I&#8217;ve willingly missed every single gaming fashion in the last
decade. I&#8217;ve seen and played a bit of &quot;Counter Strike&quot;, I&#8217;ve seen people
playing &quot;Need for Speed&quot; or &quot;Grand Theft Auto&quot;, I&#8217;ve talked long hours
about psychological problems concerning &quot;World of Warcraft&quot; without
having played or seen a minute of that, I&#8217;ve heard about Lineage and
wondered what that might be until I&#8217;ve researched and found out it was a
russian &quot;WoW&quot; competitor. I&#8217;ve been excited about and haven&#8217;t played a
single minute of &quot;S.T.A.L.K.E.R.&quot;, damn, even &quot;DOOM&quot; has been a game
I&#8217;ve played three years too late. I&#8217;m a gaming failure and I admit it.
Not that I&#8217;m ashamed of it&#8230;</p><p>It&#8217;s just that I find hacking my linux box, creating little scripts and
reading a lot of articles and books on computing topics <strong>vastly</strong> more
exciting that gaming. I&#8217;ve saved a lot of money by not buying the best
graphic accelerator on the market, by not upgrading my workstation to
the greatest, by not arguing about 1200dpi mice vs. 1500dpi mice with or
without a battle mouse pad. I&#8217;m not an energy drink addict. I&#8217;m not into
battle strategy, neither in &quot;Counter Strike&quot; nor in &quot;Warcraft&quot;. I
haven&#8217;t felt the need to imagine myself being a dwarf with a +8 power
hammer. I&#8217;ve never been to the coma-drinking festivals called LARP.
Sorry, I&#8217;m boring. I can spend the whole day and night reading about
virtues of classical vs. prototype-based OO, my feed list in Google
Reader is at 86 feeds at the moment, 814 entries unread &#8212; and most of
them are really interesting. In fact, I&#8217;ve been going on like this since
late 2000 and I&#8217;ve got every single job I&#8217;ve had since 2002 because of
this. I love educating myself, so I&#8217;m doing this most of the time.</p><p>Coming back to the topic, I&#8217;m sometimes tempted to play something.
Sadly, my games selection is somewhat limited by my OS, I&#8217;d have to
reboot to play most of the games, so this is one more reason I&#8217;m not an
active gamer. But still, <em>sometimes</em> I play and these are my top 3 games
I&#8217;ve found entertaining recently and actually played long hours (apart
from <em>Free Cell</em>, that is ;)):</p><ol><li><p><strong>Prince of Persia</strong> This one game &#8212; or better, three games since
I&#8217;m talking about all three modern PoP games &#8212; is a masterpiece. The
original &quot;Prince of Persia&quot; has taken a lot of time playing it, kids on
the block talked about having saved the princess in 20 minutes, about
how to kill the reflection prince, about Jafar etc. It was <strong>the game</strong> at that time, excellent in gameplay and graphics. When the second
&quot;Prince&quot; came out, it was a kind of disappointment, as it wasn&#8217;t that
much better. Still, we played it. The third one, &quot;Prince of Persia 3D&quot;
was a extraordinary failure and still, I tried playing it. When &quot;Sands
of Time&quot; came out, it was like a legend coming back, stronger than ever.
I&#8217;ve been telling my friends that this should have been the original
&quot;Prince&quot; if we had 3D graphics at that time. Excellent animation,
intuitive controls, extraordinary fights, it had it all. Then there was
&quot;The Warrior Within&quot;, which was just as mindblowing &#8212; combining &quot;The
Matrix&quot;, &quot;Mortal Kombat&quot; and &quot;Prince of Persia&quot; has been pure genius.
The same can be told about &quot;The Two Thrones&quot;. The game was fun to play,
it was difficult enough not to fall asleep, not too hard not to be
turned off and long enough to have about two weeks of continuous fun.</p></li><li><p><strong>Frets on Fire</strong> This is a new game on the block and it&#8217;s a free (as
in speech) &quot;Guitar Hero&quot; clone. Being an extremely simple concept and
providing no story at all, it&#8217;s still more fascinating than many other
games currently on the market. Just play the guitar and enjoy it!</p></li><li><p><strong>Pro Evolution Soccer</strong> Well, this one is pretty simple. I like
soccer, I like playing it and I like playing it on my computer. Not that
I was good at it, but I still can enjoy it. PES has a hard stand against
EA-produced FIFA-branded game series, but it&#8217;s nevertheless a simulator
with a better game feeling. I&#8217;ve actually bought a gamepad a long time
ago to play it.</p></li></ol><p>Apart from these, there are some games I still know from my childhood
and which can take any number of hours of my free time. These are the <strong>Monkey Island</strong> series and <strong>Alley cat</strong>. Particulary the latter is a
gem of arcade gameplay, being the only game known to man that looks
great in CGA, running at normal speed even on current quad-cores despite
its age (try that with Digger!) and providing a simple, but fascinating
aim.</p><p>I also remember playing <strong>Moorhuhnjagd</strong> a lot when it first came out
and also a great night spend at a friend&#8217;s place playing <strong>Mortal
Kombat</strong> and a <strong>Tron</strong> clone that whole night. By the way, <strong>Armagetron</strong> is one great game, the best implementation of the
tron-principle I&#8217;ve even seen.</p><p>That&#8217;s about it, there is not a lot more to say about my gaming
preferences. Hope you had fun reading this stuff :)</p> ]]></content:encoded> <wfw:commentRss>http://rassie.org/archives/183/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> </channel> </rss>
<!-- This site's performance optimized by W3 Total Cache. Dramatically improve the speed and reliability of your blog!

Learn more about our WordPress Plugins: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk

Served from: knuth.prokoschenko.de @ 2010-03-12 10:09:15 -->