<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-32054652</id><updated>2012-01-04T20:48:39.169-08:00</updated><category term='completion'/><category term='gpg'/><category term='gtkdoc'/><category term='web'/><category term='development'/><category term='last.fm'/><category term='tdpkg'/><category term='algorithms'/><category term='dbus'/><category term='prolog'/><category term='firefox'/><category term='sdchat'/><category term='mutt'/><category term='audio'/><category term='italy'/><category term='rss'/><category term='dpkg'/><category term='corraza'/><category term='performance'/><category term='probability'/><category term='generator'/><category term='facebook'/><category term='aruanne'/><category term='mafia'/><category term='java'/><category term='talk'/><category term='security'/><category term='archicad'/><category term='bluez'/><category term='bash'/><category term='networking'/><category term='pdf'/><category term='logic programming'/><category term='smalltalk syx development'/><category term='mips'/><category term='report'/><category term='holidays'/><category term='syx'/><category term='gmua'/><category term='maja'/><category term='ssl'/><category term='gio'/><category term='ubuntu'/><category term='crypto'/><category term='xlib'/><category term='google'/><category term='mipsdis'/><category term='ruby'/><category term='media'/><category term='mail'/><category term='yahoo'/><category term='ray tracing'/><category term='rsa'/><category term='reverse engineering'/><category term='social'/><category term='tomcat'/><category term='lua'/><category term='graphviz'/><category term='gnome'/><category term='webkit'/><category term='opengl'/><category term='clutter'/><category term='python'/><category term='comparison'/><category term='vala'/><category term='valag'/><category term='debian'/><category term='aptitude'/><category term='aggregator'/><category term='sslguard'/><category term='gstreamer'/><category term='apache'/><category term='coroutine'/><category term='soup'/><category term='emacs'/><category term='smalltalk'/><category term='awesome'/><category term='pango'/><category term='matrices'/><category term='sorting'/><category term='gtk'/><category term='freespeak'/><category term='web services'/><category term='bluetooth'/><category term='unical'/><category term='twitter'/><category term='spadi'/><category term='languages'/><category term='wav'/><category term='zsh'/><category term='decrew'/><category term='search'/><category term='valagtkdoc'/><category term='cairo'/><category term='duckduckgo'/><category term='axis'/><category term='mimaggia'/><title type='text'>Thoughts about computer technologies</title><subtitle type='html'>I'm Luca, an Italian (who?!? an engineer?) who love computers.&lt;br&gt;
This blog contains mostly &lt;b&gt;GNOME/Debian&lt;/b&gt; related posts, but also life and other technologies posts.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default?start-index=101&amp;max-results=100'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>120</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-32054652.post-2687607021512461362</id><published>2011-09-08T03:09:00.000-07:00</published><updated>2011-09-08T03:22:02.890-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='talk'/><title type='text'>Vala language introduction on IRC</title><content type='html'>Hi,&lt;br /&gt;I've lately held an talk on IRC about the &lt;a href="http://live.gnome.org/Vala"&gt;Vala programming language&lt;/a&gt; for the &lt;a href="https://wiki.ubuntu.com/UbuntuAppDeveloperWeek"&gt;Ubuntu App Developer Week&lt;/a&gt;. I've introduced the basics of the Vala language and its features.&lt;br /&gt;You can read the log of the &lt;a href="https://wiki.ubuntu.com/MeetingLogs/appdevweek1109/HelloValaIntroduction"&gt;talk here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-2687607021512461362?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/2687607021512461362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=2687607021512461362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2687607021512461362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2687607021512461362'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/09/vala-language-introduction-on-irc.html' title='Vala language introduction on IRC'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5837149787224976846</id><published>2011-08-09T10:29:00.000-07:00</published><updated>2011-08-10T00:45:16.739-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='algorithms'/><category scheme='http://www.blogger.com/atom/ns#' term='probability'/><title type='text'>Probability of a union of independent events algorithm</title><content type='html'>Lately I was looking for a copy 'n paste algorithm to calculate the &lt;a href="http://en.wikipedia.org/wiki/Probability"&gt;probability&lt;/a&gt; of a union of &lt;a href="http://en.wikipedia.org/wiki/Independence_%28probability_theory%29"&gt;independent&lt;/a&gt; events that are not &lt;a href="http://en.wikipedia.org/wiki/Mutually_exclusive_events"&gt;mutually exclusive&lt;/a&gt; (aka &lt;a href="http://en.wikipedia.org/wiki/Inclusion-exclusion_principle#In_probability"&gt;inclusion-exclusion principle in probability&lt;/a&gt;). Unfortunately I couldn't find any algorithm for such a basic problem.&lt;br /&gt;Therefore, I decided to write the following naive algorithm which is fast enough for my purposes (&lt;span style="font-style: italic;"&gt;O(n&lt;/span&gt;&lt;sup style="font-style: italic;"&gt;2&lt;/sup&gt;&lt;span style="font-style: italic;"&gt;) in time and space, where n is the number of events&lt;/span&gt;), and share with everyone:&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;You can find the &lt;a href="http://www.refactory.org/s/probability_of_a_union_of_independent_non_mutually_exclusive_events/view/latest"&gt;code snippet here&lt;/a&gt;, sorry for not embedding it in the blog post but blogger is really boring me with snippets having broken layout.&lt;br /&gt;&lt;br /&gt;The idea behind the &lt;a href="http://en.wikipedia.org/wiki/Dynamic_programming"&gt;dynamic programming&lt;/a&gt; approach starts from this observation:&lt;br /&gt;&lt;br /&gt;Let A, B and C be independent non mutually exclusive events. Then:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;P(A or B or C) &lt;/span&gt;= P(A) + P(B) + P(C) - P(A)P(B) - P(A)P(C) - P(B)P(C) + P(A)P(B)P(C)&lt;br /&gt;&lt;br /&gt;Let me simplify the expression using A instead of P(A):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;P(A or B or C) &lt;/span&gt;= A+B+C - AB - AC - BC + ABC&lt;br /&gt;&lt;br /&gt;Notice that AB+AC+BC = A(B+C) + BC. In general:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;AB+AC+AD+...+AZ + BC+BD+....+BZ &lt;/span&gt;= A(B+C+D+...+Z) + B(C+D+...+Z)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ABC+...+ABZ + ACD+...+ACZ+...+AYZ + BCD+...+BYZ &lt;/span&gt;= A(B(C+D+...+Z)+C(D+...+Z)+...+YZ) + B(C(D+...+Z)+...+YZ)&lt;br /&gt;&lt;br /&gt;That's exactly where we exploit the dynamic programming to avoid recalculating the same expressions twice.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Edit:&lt;/span&gt; My effort was totally useless given that for independent events this is equivalent to 1 - (1 - pA)(1 - pB)..., which can be calculated in linear time. I even used this formula once and forgot about it :-(&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5837149787224976846?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5837149787224976846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5837149787224976846' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5837149787224976846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5837149787224976846'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/08/probability-of-union-of-independent.html' title='Probability of a union of independent events algorithm'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-6781179400185109204</id><published>2011-07-23T09:13:00.000-07:00</published><updated>2011-08-09T15:33:07.364-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Give my luck back, Firefox 5!</title><content type='html'>Today I've upgraded to firefox 5, special thanks to Debian developer for packaging it. So far, everything works well and better than before, except two things (one of which I managed to tweak):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The tabs bar is higher than before. This means that the mouse must move more to reach them. This has been solved. Thanks for allowing me to put the tabs bar below back again.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The address bar no more involves "I feel lucky" search. The feature was awesome, because I often write a partial website name and I get most of the time to the right page without actually typing the whole name. Also, since we already have a search bar on the top-right, why was this feature removed? It's kind of duplicated now.&lt;/li&gt;&lt;/ol&gt;So, dear readers, do you know of any add-on so that I can have "I feel lucky" search back, before I write one? Having it on the top-right bar is good as well.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Edit:&lt;/span&gt; The solution is to open &lt;span style="font-weight:bold;"&gt;about:config&lt;/span&gt; and set the &lt;span style="font-weight:bold;"&gt;keyword.URL&lt;/span&gt; value to "&lt;span style="font-style:italic;"&gt;http://www.google.com/search?btnI=745&amp;q=&lt;/span&gt;" (without quotes). Thanks to Giuseppe for &lt;a href="http://www.blogger.com/comment.g?blogID=32054652&amp;postID=6781179400185109204"&gt;the hint&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-6781179400185109204?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/6781179400185109204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=6781179400185109204' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6781179400185109204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6781179400185109204'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/07/dear-firefox-5.html' title='Give my luck back, Firefox 5!'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5348340271602952399</id><published>2011-07-09T00:42:00.000-07:00</published><updated>2011-09-07T08:44:20.028-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='coroutine'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><category scheme='http://www.blogger.com/atom/ns#' term='generator'/><title type='text'>Python/Ruby like generators in Vala</title><content type='html'>Hello,&lt;br /&gt;the post below is copied straight &lt;a href="http://valajournal.blogspot.com/2011/07/generators-in-vala.html"&gt;from here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here I'll show a cool snippet code making use Vala async functions and iterators for emulating Python/Ruby generators. Creating a generator is as simple as extending the &lt;span style="font-weight: bold;"&gt;Generator&lt;/span&gt; class and implementing the &lt;span style="font-weight: bold;"&gt;generate()&lt;/span&gt; method.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: #ffffff; color: black;"&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;abstract&lt;/span&gt; &lt;span style="color: maroon; font-weight: bold;"&gt;class&lt;/span&gt; Generator&lt;span style="color: #808030;"&gt;&lt;/span&gt;&lt;g&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;private&lt;/span&gt; &lt;span style="color: maroon; font-weight: bold;"&gt;bool&lt;/span&gt; consumed&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;private&lt;/span&gt; G value&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;private&lt;/span&gt; SourceFunc callback&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;public&lt;/span&gt; Generator &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        helper &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;private&lt;/span&gt; async &lt;span style="color: maroon; font-weight: bold;"&gt;void&lt;/span&gt; helper &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        yield generate &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        consumed &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: maroon; font-weight: bold;"&gt;true&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;protected&lt;/span&gt; &lt;span style="color: maroon; font-weight: bold;"&gt;abstract&lt;/span&gt; async &lt;span style="color: maroon; font-weight: bold;"&gt;void&lt;/span&gt; generate &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;protected&lt;/span&gt; async &lt;span style="color: maroon; font-weight: bold;"&gt;void&lt;/span&gt; feed &lt;span style="color: #808030;"&gt;(&lt;/span&gt;G value&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;value &lt;span style="color: #808030;"&gt;=&lt;/span&gt; value&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: #808030;"&gt;.&lt;/span&gt;callback &lt;span style="color: #808030;"&gt;=&lt;/span&gt; feed&lt;span style="color: #808030;"&gt;.&lt;/span&gt;callback&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        yield&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;public&lt;/span&gt; &lt;span style="color: maroon; font-weight: bold;"&gt;bool&lt;/span&gt; next &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: #808030;"&gt;!&lt;/span&gt;consumed&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;public&lt;/span&gt; G get &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        var result &lt;span style="color: #808030;"&gt;=&lt;/span&gt; value&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        callback &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt; result&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;public&lt;/span&gt; Generator&amp;lt;&lt;span style="color: #808030;"&gt;&lt;/span&gt;G&amp;gt;&lt;span style="color: #808030;"&gt;&lt;/span&gt; iterator &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span style="color: maroon; font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;class&lt;/span&gt; IntGenerator &lt;span style="color: #808030;"&gt;:&lt;/span&gt; Generator&lt;span style="color: #808030;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;int&amp;gt;&lt;/span&gt;&lt;span style="color: #808030;"&gt;&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;protected&lt;/span&gt; &lt;span style="color: maroon; font-weight: bold;"&gt;override&lt;/span&gt; async &lt;span style="color: maroon; font-weight: bold;"&gt;void&lt;/span&gt; generate &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: maroon; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;int&lt;/span&gt; i&lt;span style="color: #808030;"&gt;=&lt;/span&gt;&lt;span style="color: #008c00;"&gt;0&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt; i &lt;span style="color: #808030;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #008c00;"&gt;10&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt; i&lt;span style="color: #808030;"&gt;+&lt;/span&gt;&lt;span style="color: #808030;"&gt;+&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;            yield feed &lt;span style="color: #808030;"&gt;(&lt;/span&gt;i&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: maroon; font-weight: bold;"&gt;void&lt;/span&gt; main &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;    var gen &lt;span style="color: #808030;"&gt;=&lt;/span&gt; &lt;span style="color: maroon; font-weight: bold;"&gt;new&lt;/span&gt; IntGenerator &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: maroon; font-weight: bold;"&gt;foreach&lt;/span&gt; &lt;span style="color: #808030;"&gt;(&lt;/span&gt;var i &lt;span style="color: maroon; font-weight: bold;"&gt;in&lt;/span&gt; gen&lt;span style="color: #808030;"&gt;)&lt;/span&gt; &lt;span style="color: purple;"&gt;{&lt;/span&gt;&lt;br /&gt;        message &lt;span style="color: #808030;"&gt;(&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #0000e6;"&gt;%d&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="color: #808030;"&gt;,&lt;/span&gt; i&lt;span style="color: #808030;"&gt;)&lt;/span&gt;&lt;span style="color: purple;"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: purple;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/g&gt;&lt;/pre&gt;&lt;br /&gt;You can find the above &lt;a href="http://www.refactory.org/s/generators_in_vala/view"&gt;code snippet here&lt;/a&gt; as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5348340271602952399?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5348340271602952399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5348340271602952399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5348340271602952399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5348340271602952399'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/07/pythonruby-like-generators-in-vala.html' title='Python/Ruby like generators in Vala'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-2904795394012550869</id><published>2011-07-05T03:29:00.000-07:00</published><updated>2011-07-05T04:12:14.974-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Why I'm still using Emacs</title><content type='html'>Hello,&lt;br /&gt;I'm using emacs since a long time by now. Everytime I ask myself why I'm using it, given emacs certainly isn't the easiest environment for programming. So, I often tried to replace emacs with other IDEs or editors, using several extensions and so on, but I still miss these killer features in a single editor:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pressing a key (whatever it is, TAB in emacs) correctly/smartly indent the row  according to the current language.&lt;/li&gt;&lt;li&gt;Split view, horizontal and vertical&lt;/li&gt;&lt;li&gt;No horizontal scrollbar, rather wrap the text&lt;/li&gt;&lt;li&gt;Opening/closing files without either opening a dialog or using the mouse&lt;/li&gt;&lt;li&gt;Search, search and replace (also with regexp variant) without opening any dialog&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Switching between buffers using the longest-common-subsequence matching, without using the mouse (i.e. I don't care about file tabs, but about switching among them fast)&lt;/li&gt;&lt;li&gt;Indent entire code regions&lt;/li&gt;&lt;li&gt;Vala, C, Python, Java, Shell, Autoconf/Automake, Make and Javascript support&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;So, I'm not using emacs because I love it, but because it's actually the only editor with the above features.&lt;br /&gt;&lt;br /&gt;What I'm looking for? I'm looking for a new editor/IDE, less complex, easier to customize, having the above features plus smart completion and symbol browser.&lt;br /&gt;Emacs can have completion and symbol browser as well, but managing those buffers such as speedbar suck a little, things get complicated to use and to customize.&lt;br /&gt;&lt;br /&gt;If anybody knows of such an editor, please let me know :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-2904795394012550869?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/2904795394012550869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=2904795394012550869' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2904795394012550869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2904795394012550869'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/07/why-im-still-using-emacs.html' title='Why I&apos;m still using Emacs'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-745531953259213169</id><published>2011-06-02T03:04:00.001-07:00</published><updated>2011-06-02T03:15:37.981-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='wav'/><category scheme='http://www.blogger.com/atom/ns#' term='audio'/><title type='text'>Writing binary files with bash</title><content type='html'>Hello,&lt;br /&gt;I'm trying to see if I'm able to write some binary file using bash. So, when writing a binary file you often want to write a number into binary format. I ended up with this simple function for writing numbers in little endian:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;function num2bin() {&lt;br /&gt;   printf $(printf %.$(($2*2))x\\n $1|&lt;br /&gt;        sed 's/\([0-9a-f][0-9a-f]\)/\\x\1/g')|&lt;br /&gt;        awk -F '' '{ printf $4$3$2$1 }'&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The first parameter is the number to write, the second is the number of bytes (up to 4). For example "num2bin 40 4" will output a 4-byte long string containing the number 40 in little endian.&lt;br /&gt;&lt;br /&gt;How do we use it? I wrote an example script for creating a wav file with noise (according to &lt;a href="http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html"&gt;wav specifications&lt;/a&gt;) that you can &lt;a href="http://www.refactory.org/s/writing_wav_files_with_bash/view/latest"&gt;read here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Let me know if you have a simpler version of the num2bin function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-745531953259213169?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/745531953259213169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=745531953259213169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/745531953259213169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/745531953259213169'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/06/writing-binary-files-with-bash.html' title='Writing binary files with bash'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-280489025977417125</id><published>2011-05-27T05:51:00.000-07:00</published><updated>2011-05-27T07:14:42.614-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><category scheme='http://www.blogger.com/atom/ns#' term='completion'/><title type='text'>Complete variables with cd command in bash</title><content type='html'>Hello,&lt;br /&gt;lately I've been searching for a way to complete variables containing directories with the "cd" command in bash. This is very helpful if you have something like "cd $mydir/&lt;tab&gt;". This is &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=628123"&gt;not actually working in debian&lt;/a&gt; bash-completion.&lt;br /&gt;Then I've realized that other commands such as "ls" actually expand variables. I looked for some "complete" combo used for "ls" but not for "cd" in /etc/bash_completion and I came out with the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;complete -F _longopt -o default cd&lt;/blockquote&gt;&lt;br /&gt;Luckily, this is exactly the command needed to enable variable expansion with the "cd" command. Put that in your .bashrc &lt;span style="font-weight: bold;"&gt;after&lt;/span&gt; loading bash_completion and you're done.&lt;br /&gt;&lt;/tab&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-280489025977417125?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/280489025977417125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=280489025977417125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/280489025977417125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/280489025977417125'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/05/complete-variables-with-cd-command-in.html' title='Complete variables with cd command in bash'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1860388738442329509</id><published>2011-05-22T14:59:00.000-07:00</published><updated>2011-05-22T15:09:12.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='decrew'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='sslguard'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><title type='text'>Enforce facebook chat through SSL</title><content type='html'>&lt;p&gt;Hello,&lt;/p&gt;&lt;p style="text-align: left;"&gt;since a few days facebook is supporting SSL for the chat. The problem is that it can't be enabled.&lt;/p&gt;&lt;p style="text-align: left;"&gt;Until facebook enables this you can use the &lt;a href="https://addons.mozilla.org/en-us/firefox/addon/sslguard/"&gt;SSLGuard&lt;/a&gt; plugin for firefox, which enforces SSL for a list of web sites, including all facebook pages and the chat as well.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;We have some good ideas for sslguard that we'd like to get in for the next releases... stay tuned.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1860388738442329509?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1860388738442329509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1860388738442329509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1860388738442329509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1860388738442329509'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/05/enforce-facebook-chat-through-ssl.html' title='Enforce facebook chat through SSL'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8756499041691535344</id><published>2011-05-14T03:11:00.000-07:00</published><updated>2011-05-14T03:23:50.922-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphviz'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='valag'/><title type='text'>Valag 1.2 released</title><content type='html'>Hello,&lt;br /&gt;I've just released the 1.2 version of &lt;a href="http://lethalman.hostei.com/valag.html"&gt;Valag&lt;/a&gt;, the graph generator for analyzing &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt; code trees. Only relevant change is the fact that it now builds against libvala-0.14.&lt;br /&gt;&lt;br /&gt;More information and download at the &lt;a href="http://lethalman.hostei.com/valag.html"&gt;Valag homepage&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8756499041691535344?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8756499041691535344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8756499041691535344' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8756499041691535344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8756499041691535344'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/05/vala-12-released.html' title='Valag 1.2 released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1676093447066955265</id><published>2011-02-24T10:30:00.000-08:00</published><updated>2011-02-24T13:57:48.715-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='logic programming'/><category scheme='http://www.blogger.com/atom/ns#' term='algorithms'/><category scheme='http://www.blogger.com/atom/ns#' term='prolog'/><category scheme='http://www.blogger.com/atom/ns#' term='sorting'/><title type='text'>Bubble sort for prolog</title><content type='html'>Hello again,&lt;br /&gt;this time I've found a version of &lt;a href="http://kti.mff.cuni.cz/%7Ebartak/prolog/sorting.html"&gt;bubble sort here&lt;/a&gt;. I wanted to provide my version, which is less iterative and, I think, more intuitive. What it does is, simply, bubble until it's sorted:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;bubblesort&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;L1&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; L2&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;:-&lt;/span&gt; bubblesort2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;L1&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;L2&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;unsorted&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;bubblesort2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;L&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;L&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;sorted&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;bubblesort2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;L1&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;L2&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;unsorted&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;:-&lt;/span&gt; bubble&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;L1&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;L3&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;C&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; bubblesort2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;L3&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;L2&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;C&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;bubble&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;sorted&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;bubble&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;X&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;X&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;sorted&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;bubble&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;X&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;Y&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;L&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;X&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;L1&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; C&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;:-&lt;/span&gt; X &lt;span style="color: rgb(128, 128, 48);"&gt;&lt;=&lt;/span&gt; Y&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; bubble&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;Y&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;L&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;L1&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;C&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;bubble&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;X&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;Y&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;L&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;Y&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;L1&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; unsorted&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;:-&lt;/span&gt; X &lt;span style="color: rgb(128, 128, 48);"&gt;&gt;&lt;/span&gt; Y&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; bubble&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;X&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;L&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;L1&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;_&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, the exam is tomorrow so I will finally stop annoying you readers ;)&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1676093447066955265?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1676093447066955265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1676093447066955265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1676093447066955265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1676093447066955265'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/02/bubble-sort-for-prolog.html' title='Bubble sort for prolog'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1661332487572590304</id><published>2011-02-19T13:17:00.000-08:00</published><updated>2011-02-19T13:34:21.534-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='aptitude'/><title type='text'>Aptitude string for downgradable packages</title><content type='html'>Hello,&lt;br /&gt;I'm lately doing some tests with Debian experimental packages thus I often upgrade some packages to experimental and downgrade them back to unstable.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;WARNING: Downgrading in Debian is not supported etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;aptitude search &lt;span style="color: rgb(0, 0, 230);"&gt;"?narrow(?installed,?archive(experimental))"&lt;/span&gt; -F %p&lt;span style="color: rgb(227, 74, 220);"&gt;|&lt;/span&gt;&lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;\&lt;br /&gt;sed&lt;/span&gt; &lt;span style="color: rgb(0, 0, 230);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;s&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(15, 105, 255);"&gt;\(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;^&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;*&lt;/span&gt;&lt;span style="color: rgb(15, 105, 255);"&gt;\)&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(15, 105, 255);"&gt;\1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;/unstable&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 230);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(227, 74, 220);"&gt;|&lt;/span&gt;xargs &lt;span style="color: rgb(187, 121, 119); font-weight: bold;"&gt;echo&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This will give you a list of experimental packages installed on your system each concatenated with &lt;span style="font-style: italic;"&gt;"/unstable"&lt;/span&gt;. The output can go straight to &lt;span style="font-style: italic;"&gt;"aptitude install"&lt;/span&gt;. I don't directly use &lt;span style="font-style: italic;"&gt;"xargs aptitude install"&lt;/span&gt; because it's not interactive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1661332487572590304?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1661332487572590304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1661332487572590304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1661332487572590304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1661332487572590304'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/02/aptitude-string-for-downgradable.html' title='Aptitude string for downgradable packages'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7391681454777052918</id><published>2011-02-15T12:20:00.000-08:00</published><updated>2011-08-09T15:43:42.362-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='matrices'/><category scheme='http://www.blogger.com/atom/ns#' term='logic programming'/><category scheme='http://www.blogger.com/atom/ns#' term='algorithms'/><category scheme='http://www.blogger.com/atom/ns#' term='prolog'/><title type='text'>Matrix transpose with Prolog</title><content type='html'>Hello,&lt;br /&gt;an exam exercise requires me to write a matrix transpose method. I've written one and it took a little before I was able to define it completely in 4 rules.&lt;br /&gt;I'm curious then I've found this on &lt;a href="http://stackoverflow.com/questions/4280986/how-to-transpose-a-matrix-in-prolog"&gt;stackoverflow&lt;/a&gt;: the approach is to calculate first transposed column, then shift by one column and calculate the transpose of that new matrix.&lt;br /&gt;This was one of the first solutions I've thought but I haven't realized it because I'm too lazy to create a rule for calculating the shifted matrix.&lt;br /&gt;&lt;br /&gt;My approach is iterative thus less intuitive:&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;trans&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;M1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;M2&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;:-&lt;/span&gt; trans2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;M1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;M1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;M2&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 140, 0);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;!&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;trans2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;A&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;_&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;_&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;_&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;N&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;:-&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;length&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;A&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;N&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;trans2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;M&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;H1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;H1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;R1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;N&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;:-&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;N1&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;is&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;N&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(0, 140, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; trans2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;M&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;M&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;R1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;N1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;trans2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;M&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;H&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;R&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;L&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;H1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;R1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;N&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;:-&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;nth0&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;N&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;H&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;X&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: rgb(128, 0, 0); font-weight: bold;"&gt;append&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;L&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;X&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;L1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; trans2&lt;span style="color: rgb(128, 128, 48);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;M&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;R&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;L1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(128, 128, 48);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;H1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;|&lt;/span&gt;&lt;span style="color: rgb(0, 121, 151);"&gt;R1&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 121, 151);"&gt;N&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;)&lt;/span&gt;&lt;span style="color: rgb(128, 128, 48);"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ok, apart the fact that I haven't got the time to beautify it, the code will iterate columns and for each column it calculates a row of the transposed matrix (yes, exactly what you expect a transpose method to do :P). The key is "passing" around the nth column we're looking at.&lt;br /&gt;After we finish calculating a row, we restart from the first row but looking at the nth+1 column. Recursion ends when there are no more resulting rows, i.e. when we reached the end of the columns.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7391681454777052918?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7391681454777052918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7391681454777052918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7391681454777052918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7391681454777052918'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/02/matrix-transpose-with-prolog.html' title='Matrix transpose with Prolog'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1864939244115603013</id><published>2011-02-09T07:10:00.000-08:00</published><updated>2011-02-09T07:17:30.541-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='dbus'/><category scheme='http://www.blogger.com/atom/ns#' term='bluez'/><title type='text'>Bluetooth simple one-line device connection pairing with Bluez</title><content type='html'>Hello,&lt;br /&gt;I've written a simple Python script using the Bluez (version 4.66) stack (thanks to &lt;a href="http://shr-project.org/trac/wiki/Using"&gt;http://shr-project.org/trac/wiki/Using&lt;/a&gt;) with this usage:&lt;br /&gt;&lt;br /&gt;python connect.py MACADDRESS PIN MOUNTPOINT&lt;br /&gt;&lt;br /&gt;Snippet code for &lt;a href="http://www.refactory.org/s/bluez_connection_pairing_with_bluetooth_device/view/2"&gt;connect.py is here&lt;/a&gt;. If the device is paired, it will be removed and unmounted.&lt;br /&gt;&lt;br /&gt;Disconnection is as easy with:&lt;br /&gt;&lt;br /&gt;python disconnect.py MACADDRESS MOUNTPOINT&lt;br /&gt;&lt;br /&gt;Snippet code for &lt;a href="http://www.refactory.org/s/bluez_disconnect_device/view/1"&gt;disconnect.py is here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Feel free to use the code also for other services, in this case my primary concern was to mount the file system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1864939244115603013?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1864939244115603013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1864939244115603013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1864939244115603013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1864939244115603013'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/02/bluetooth-simple-one-line-device.html' title='Bluetooth simple one-line device connection pairing with Bluez'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-6968806286879849770</id><published>2011-02-09T00:37:00.001-08:00</published><updated>2011-02-09T00:50:57.650-08:00</updated><title type='text'>Rubik's Cube 3D Game in Vala/Clutter</title><content type='html'>Hello,&lt;br /&gt;I've written a simple program for playing with a &lt;a href="http://www.rubiks.com/"&gt;Rubik's Cube&lt;/a&gt; using &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt; and &lt;a href="http://www.clutter-project.org/"&gt;Clutter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;high simplicity in rotating cube slices and rotating the cube itself in a very natural manner&lt;br /&gt;&lt;/li&gt;&lt;li&gt;shuffle the cube&lt;/li&gt;&lt;li&gt;autosave the game&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://lethalman.hostei.com/shots/rubik.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 60%;" src="http://lethalman.hostei.com/shots/rubik.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Download and more usage information at &lt;a href="http://lethalman.hostei.com/rubik.html"&gt;the homepage&lt;/a&gt;... have fun :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-6968806286879849770?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/6968806286879849770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=6968806286879849770' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6968806286879849770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6968806286879849770'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/02/rubiks-cube-game-in-valaclutter.html' title='Rubik&apos;s Cube 3D Game in Vala/Clutter'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5168330735374387691</id><published>2011-01-14T23:55:00.000-08:00</published><updated>2011-01-15T00:15:16.460-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mutt'/><category scheme='http://www.blogger.com/atom/ns#' term='decrew'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='gio'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='gmua'/><title type='text'>Base64 and Quoted-Printable GConverters for GMua</title><content type='html'>Hello,&lt;div&gt;lately I'm writing &lt;a href="http://gitorious.org/decrew/gmua/"&gt;GMua&lt;/a&gt; for educational purposes and for evaluating &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt;, whose purpose is to simplify writing Mail User Agents or simple scripts, ala &lt;a href="http://www.oracle.com/technetwork/java/index-jsp-139225.html"&gt;Java Mail&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;It currently parses IMAP (not yet complete) and has a graphical interface called Gutt (yes, inspired by Mutt) for testing.&lt;/div&gt;&lt;div&gt;In order to parse MIME parts with base64 or quopri content-transfer-encoding I chose to implement a couple of &lt;a href="http://library.gnome.org/devel/gio/unstable/GConverter.html#GConverter-struct"&gt;GConverter&lt;/a&gt; (will use GMime a day, maybe when they switch to gio, not yet needed) in Vala that you can find here:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://gitorious.org/decrew/gmua/blobs/master/gmua/base64.vala"&gt;Base64 GConverter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gitorious.org/decrew/gmua/blobs/master/gmua/quopri.vala"&gt;Quoted-Printable GConverter&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I'm pretty sure there are bugs in these converters, by the way I wanted to share them :)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5168330735374387691?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5168330735374387691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5168330735374387691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5168330735374387691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5168330735374387691'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2011/01/base64-and-quoted-printable-gconverters.html' title='Base64 and Quoted-Printable GConverters for GMua'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1794630168006400358</id><published>2010-12-19T04:19:00.000-08:00</published><updated>2010-12-19T04:26:12.519-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphviz'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='valag'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Valag 1.1 released, graph generator for the Vala AST</title><content type='html'>Hello,&lt;div&gt;a new version of &lt;a href="http://lethalman.hostei.com/valag.html"&gt;Valag&lt;/a&gt;, a graphviz generator for the &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt; language AST, has been released.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Changes since 1.0 version:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Add --format and --prefix options.&lt;/li&gt;&lt;li&gt;Update to latest libvala-0.12.&lt;/li&gt;&lt;li&gt;Bug fixes.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;This new version also distributes the &lt;a href="http://code.google.com/p/jrfonseca/wiki/XDot"&gt;xdot.py program&lt;/a&gt; as a viewer for the generated graphs.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More information and download at the &lt;a href="http://lethalman.hostei.com/valag.html"&gt;Valag homepage&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1794630168006400358?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1794630168006400358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1794630168006400358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1794630168006400358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1794630168006400358'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/12/valag-11-released.html' title='Valag 1.1 released, graph generator for the Vala AST'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-309088758876023619</id><published>2010-12-17T10:42:00.000-08:00</published><updated>2010-12-17T10:57:15.530-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maja'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Maja - The Vala to Javascript compiler</title><content type='html'>Hello,&lt;div&gt;I've just released the first version of &lt;a href="http://lethalman.hostei.com/maja/index.html"&gt;Maja&lt;/a&gt;, the &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt; to Javascript compiler. The mapping is not quite complete but you can do pretty much everything you could do with javascript directly. There are (still incomplete) bindings for the &lt;a href="http://qooxdoo.org/"&gt;qooxdoo framework&lt;/a&gt; and the &lt;a href="http://demo.qooxdoo.org/current/demobrowser/"&gt;demo browser&lt;/a&gt; is being ported to vala successfully.&lt;/div&gt;&lt;div&gt;Maja can be used in any environments, not only web browsers.&lt;/div&gt;&lt;div&gt;Programming in Vala saves you from lots of type safety troubles (Javascript), lot of typing (Java) and the syntax is really enjoyable as it is quite close to the Javascript model.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Usage and download &lt;a href="http://lethalman.hostei.com/maja/index.html"&gt;at the homepage&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-309088758876023619?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/309088758876023619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=309088758876023619' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/309088758876023619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/309088758876023619'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/12/maja-vala-to-javascript-compiler.html' title='Maja - The Vala to Javascript compiler'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-4956176526436040162</id><published>2010-09-15T05:16:00.000-07:00</published><updated>2010-09-15T05:25:22.756-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='duckduckgo'/><title type='text'>DuckDuckGo search engine</title><content type='html'>Hello,&lt;br /&gt;in this post I'd like to hint you a very nice search engine: &lt;a href="http://duckduckgo.com/"&gt;DuckDuckGo&lt;/a&gt;. I've been pointed out to this by a post &lt;a href="http://robsheldon.com/giving-up-on-google"&gt;here&lt;/a&gt; on why both Google and Yahoo suck (and why Google search does more).&lt;br /&gt;In older posts of mine you can find some examples on how Google search can miserably fail a search.&lt;br /&gt;The main problem with the two approaches is: Google (and Bing too) sorts by popularity, Yahoo by match. So, what can happen is: Google finds something completely unrelated to what you need, Yahoo is much sensible to the keywords you put.&lt;br /&gt;&lt;br /&gt;This DuckDuckGo search engine instead, looks up the search keywords and asks you for the meaning of the words (Yahoo phase), and then sorts it by popularity (Google phase). Especially with web 2.0 and publicity, popularity of web sites loses much more importance over the actual relationship between the meaning of the search and the web page itself.&lt;br /&gt;&lt;br /&gt;So, as usual the conclusion is: don't use only one search engine, use multiple ones because implementation matters; don't say people "Google is your friend" because it can happen to be offensive, say instead "use your favourite search engine (YFSE)".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-4956176526436040162?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/4956176526436040162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=4956176526436040162' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4956176526436040162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4956176526436040162'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/09/duckduckgo-search-engine.html' title='DuckDuckGo search engine'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1414633067571633586</id><published>2010-08-16T05:26:00.000-07:00</published><updated>2010-08-16T05:32:48.771-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Debian Appreciation Day</title><content type='html'>Hello,&lt;br /&gt;today is the &lt;a href="http://www.debian.org"&gt;Debian&lt;/a&gt; birthday. For this event a Debian Appreciation Day has been prepared to thank all the Debian organization, all the contributors, developers, teams and everything related to the universal operating system. If you want to thank Debian and make developers feel loved :P here's the page: &lt;a href="http://thanks.debian.net/"&gt;thanks.debian.net&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.debian.org/Pics/Debian17.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 380px; height: 269px;" src="http://www.debian.org/Pics/Debian17.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1414633067571633586?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1414633067571633586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1414633067571633586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1414633067571633586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1414633067571633586'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/08/debian-appreciation-day.html' title='Debian Appreciation Day'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-2676011631664147501</id><published>2010-07-29T06:22:00.000-07:00</published><updated>2010-07-29T07:04:05.728-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='clutter'/><title type='text'>Using Mash with Vala</title><content type='html'>Hello,&lt;br /&gt;recently &lt;a href="http://git.clutter-project.org/mash/"&gt;Mash&lt;/a&gt; has been released. It is a library for reading models in &lt;a href="http://en.wikipedia.org/wiki/PLY_(file_format)"&gt;PLY format&lt;/a&gt; and creating &lt;a href="http://www.clutter-project.org/"&gt;Clutter&lt;/a&gt; actors from them. For reference, &lt;a href="http://www.blender.org/"&gt;Blender&lt;/a&gt; is able to export to PLY. It means you can draw your models with Blender and use Clutter as rendering engine.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Clutter is a 3D canvas and animation toolkit while Blender is a 3D modelling suite.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What I've tested so far is porting the &lt;a href="http://git.clutter-project.org/mash/tree/example/viewer.c"&gt;Monkey Viewer C example&lt;/a&gt; to &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt;: &lt;a href="http://live.gnome.org/action/edit/Vala/ClutterSamples#Blender_models"&gt;code snippet and monkey PLY here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://live.gnome.org/Vala/ClutterSamples?action=AttachFile&amp;amp;do=get&amp;amp;target=mash-monkey.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 648px; height: 505px;" src="http://live.gnome.org/Vala/ClutterSamples?action=AttachFile&amp;amp;do=get&amp;amp;target=mash-monkey.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;That is going to be awesome, stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-2676011631664147501?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/2676011631664147501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=2676011631664147501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2676011631664147501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2676011631664147501'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/07/using-mash-with-vala.html' title='Using Mash with Vala'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8295808553085780776</id><published>2010-07-29T02:28:00.001-07:00</published><updated>2010-07-29T02:36:45.362-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mips'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='reverse engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='mipsdis'/><title type='text'>Mipsdis MIPS32 disassembler</title><content type='html'>Hello,&lt;br /&gt;I've written a MIPS32 (Release 2) disassembler for ELF files. It is not a simple disassembler, it's mostly made for reverse engineering proprietary boxes for educational purposes. It has been successfully tested on Vodafone Station which has Broadcom binaries. These boxes don't have a sections table, therefore normal disassemblers don't work. Mipsdis instead will guess the bounds of those sections (most important ones are TEXT and RODATA for strings).&lt;br /&gt;&lt;br /&gt;This console program outputs a friendly assembly code, whose each instruction is commented (comments copied directly from the mips specification). It also features labels for branches and symbol resolution for strings, global variables and functions.&lt;br /&gt;&lt;br /&gt;More information and downloads &lt;a href="http://lethalman.hostei.com/mipsdis.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8295808553085780776?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8295808553085780776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8295808553085780776' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8295808553085780776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8295808553085780776'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/07/mipsdis-mips32-disassembler.html' title='Mipsdis MIPS32 disassembler'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7789256708722400163</id><published>2010-06-18T01:08:00.000-07:00</published><updated>2010-06-18T01:32:43.539-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='decrew'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='sslguard'/><category scheme='http://www.blogger.com/atom/ns#' term='ssl'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Idea duplicated again</title><content type='html'>Hello,&lt;br /&gt;I'd like to point you to this firefox extension &lt;a href="http://www.eff.org/deeplinks/2010/06/encrypt-web-https-everywhere-firefox-extension"&gt;HTTPS Everywhere&lt;/a&gt; (June 17th, 2010) and &lt;a href="http://decrew.indivia.net/sslguard/index.html"&gt;SSLGuard&lt;/a&gt; which is also a firefox extension (first released Oct 14th, 2009).&lt;br /&gt;&lt;br /&gt;The code of the former extension is a lot more complicated and the result is not always quite the same as SSLGuard. In fact, while they support secure cookies and per-website custom rules, SSLGuard lets you add custom websites to be secured directly from a friendly graphical dialog.&lt;br /&gt;&lt;br /&gt;You could even install both of them, apparently they don't conflict.&lt;br /&gt;&lt;br /&gt;It's the second time &lt;a href="http://decrew.indivia.net"&gt;decrew&lt;/a&gt; ideas are being duplicated. This happened sometimes ago with &lt;a href="http://decrew.indivia.net/ssltohtml/index.html"&gt;SSLtoHTML&lt;/a&gt; (ettercap plugin) and &lt;a href="http://www.thoughtcrime.org/software/sslstrip"&gt;sslstrip&lt;/a&gt; (standalone application), but they released the code before us. Funny isn't it?&lt;br /&gt;&lt;br /&gt;I'm not complaining about anything (I'm not saying "copy", I say "duplicate"), just clearing things out. Of course, better have more choice and more works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7789256708722400163?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7789256708722400163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7789256708722400163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7789256708722400163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7789256708722400163'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/06/idea-duplicated-again.html' title='Idea duplicated again'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1802465669540121966</id><published>2010-05-02T12:08:00.000-07:00</published><updated>2010-05-02T12:19:15.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aggregator'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><category scheme='http://www.blogger.com/atom/ns#' term='rss'/><title type='text'>Google Reader Fail</title><content type='html'>Hello,&lt;br /&gt;Google Reader has just wiped out my subscriptions list, which made me scream like a crazy monkey (other than cleaning up the list).Now I'm using bloglines, which looks pretty good except there's nothing like "read all items", but you must clean on each feed to see the items (any alternative to bloglines supporting this?).&lt;br /&gt;&lt;br /&gt;But as far as I can see, I'm not &lt;a href="http://www.google.com/support/forum/p/reader/thread?tid=6c3e329b13c0526d&amp;hl=en"&gt;the only one&lt;/a&gt; that lost the feeds, the difference is that I just opened the reader without any other operation.&lt;br /&gt;&lt;br /&gt;I've also heard of MyYahoo! being a good aggregator, the only problem is that Epiphany/Webkit is broken with yahoo (no css), anybody experiencing this?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1802465669540121966?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1802465669540121966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1802465669540121966' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1802465669540121966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1802465669540121966'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/05/google-reader-fail.html' title='Google Reader Fail'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5686116703281843106</id><published>2010-04-02T08:14:00.001-07:00</published><updated>2010-04-02T08:18:49.187-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='valagtkdoc'/><category scheme='http://www.blogger.com/atom/ns#' term='gtkdoc'/><title type='text'>Valagtkdoc 1.0</title><content type='html'>Hello,&lt;br /&gt;yes... this is the nth program I'm writing in this period. I hope this is the last one :)&lt;br /&gt;&lt;br /&gt;Valagtkdoc is a tool that integrates Vala with GTK-Doc for documentation generation.&lt;br /&gt;&lt;br /&gt;You can find download and example usage at &lt;a href="http://lethalman.hostei.com/valagtkdoc"&gt;the homepage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I think it's far from being perfect, and actually I haven't tried integrating it with autotools, but it shouldn't be that hard. Unfortunately, you have to somehow break the gtk-doc rule "do not run it manually" because valagtkdoc goes in the middle between gtkdoc-scan and gtkdoc-mkdb.&lt;br /&gt;&lt;br /&gt;If anybody has a better solution, please tell me :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5686116703281843106?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5686116703281843106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5686116703281843106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5686116703281843106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5686116703281843106'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/04/valagtkdoc-10.html' title='Valagtkdoc 1.0'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-393372324033710784</id><published>2010-03-16T13:05:00.000-07:00</published><updated>2010-03-16T14:54:35.387-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='dpkg'/><category scheme='http://www.blogger.com/atom/ns#' term='tdpkg'/><category scheme='http://www.blogger.com/atom/ns#' term='aptitude'/><title type='text'>Tdpkg troubleshooting and some news</title><content type='html'>Hello,&lt;br /&gt;lately I've received some feedback, thanks for this.&lt;br /&gt;&lt;br /&gt;1) Is it compatible with apt? Can I use dpkg back again after using tdpkg?&lt;br /&gt;The answer is... yes! You can use what you want in the order you want, and use tdpkg when you want. Take in consideration that after using dpkg (or apt) without tdpkg, then you use tdpkg the cache will be rebuilt for consistency.&lt;br /&gt;&lt;br /&gt;2) It's not working here (Ubuntu, other distro...), doesn't create the cache.&lt;br /&gt;First of all you have to be root when first running tdpkg in order to create the cache. If this didn't solve the problem you are maybe using an untested platform. Debian uses eglibc and tdpkg has been tested on i386 and amd64. Since tdpkg does wrapping around glibc calls it might happen to not wrap the right functions. If you want tdpkg to be ported to your platform please comment here with the result of these commands:&lt;br /&gt;objdump -T /usr/bin/dpkg|grep open&lt;br /&gt;objdump -T /usr/bin/dpkg|grep stat&lt;br /&gt;objdump -T libtdpkg.so|grep open&lt;br /&gt;objdump -T libtdpkg.so|grep stat&lt;br /&gt;&lt;br /&gt;3) Should I put the alias also for apt-get and aptitude?&lt;br /&gt;Yes you have to. Aptitude and apt-get bypass the shell so the only alias for dpkg won't work.&lt;br /&gt;&lt;br /&gt;Another thing I'd like to say is that dpkg/experimental has a patch that speeds up a lot database reading by asking the kernel to cache .list files... i.e. dpkg will avoid cold start. This brings timing from 14 seconds to about 3 seconds! At all, using tokyocabinet you get 1 second. Think that including a cache inside dpkg would mean even less than 1 second.&lt;br /&gt;&lt;br /&gt;Have fun... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-393372324033710784?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/393372324033710784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=393372324033710784' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/393372324033710784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/393372324033710784'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/03/tdpkg-and-some-news.html' title='Tdpkg troubleshooting and some news'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-788486431772356222</id><published>2010-03-15T13:21:00.000-07:00</published><updated>2010-03-15T14:48:03.268-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='dpkg'/><category scheme='http://www.blogger.com/atom/ns#' term='tdpkg'/><category scheme='http://www.blogger.com/atom/ns#' term='aptitude'/><title type='text'>Tdpkg 1.0 - speed up reading dpkg database</title><content type='html'>Hello,&lt;br /&gt;you may have noticed that dpkg takes a long time reading the database the first time you run it (e.g. through apt). This is because of the huge number of /var/lib/dpkg/info/*.list files (1700+ on my desktop machines). It can take up to 14 seconds and more at cold start to install/remove a single package.&lt;br /&gt;Since 2007 in dpkg mailing list a first proposal (by Sean Finney) to using sqlite as cache has been posted, then a couple of weeks ago I reproposed it. No reply since then from the maintainers.&lt;br /&gt;&lt;br /&gt;My first idea was to fork dpkg and only change the part about reading the list files. This means you had to install another dpkg version, and I haven't done it for two main reasons: most of people wouldn't have replaced dpkg and it'd have been too hard to maintain it.&lt;br /&gt;The solution is &lt;a href="http://lethalman.hostei.com/tdpkg.html"&gt;tdpkg&lt;/a&gt;, a shared library that wrappes around glibc function calls of dpkg. You'll find in README to backup your /var/lib/dpkg/info but tdpkg is robust enough to not fuck it up.&lt;br /&gt;&lt;br /&gt;Tdpkg comes with tokyocabinet (faster) and sqlite (handles concurrency better) cache backends. I've managed to bring cold startup time from about 14 seconds down to about 2 seconds. I will definitely have fun installing and removing applications back again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-788486431772356222?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/788486431772356222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=788486431772356222' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/788486431772356222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/788486431772356222'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/03/tdpkg-speed-up-reading-dpkg-database.html' title='Tdpkg 1.0 - speed up reading dpkg database'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-4900081629582028704</id><published>2010-03-14T04:37:00.001-07:00</published><updated>2010-03-14T04:42:24.862-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphviz'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='valag'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Vala and Graphviz</title><content type='html'>Hello,&lt;br /&gt;it's often useful for &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt; hackers to have a graphical representation of the code tree and control flow blocks. Therefore I've created a simple application called &lt;a href="http://lethalman.hostei.com/valag.html"&gt;Valag&lt;/a&gt; which generates four types of diagrams using &lt;a href="http://www.graphviz.org"&gt;Graphviz&lt;/a&gt; for each state of the Vala compiler.&lt;br /&gt;&lt;br /&gt;This is the first release, there're many things to fix and enhance (like command line options) but it is working quite good already to give support when hacking Vala.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lethalman.hostei.com/valag.html"&gt;Homepage, screenshots and download here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-4900081629582028704?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/4900081629582028704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=4900081629582028704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4900081629582028704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4900081629582028704'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/03/vala-and-graphviz.html' title='Vala and Graphviz'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7354520148318642790</id><published>2010-03-05T04:37:00.001-08:00</published><updated>2010-03-05T04:47:27.896-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google search wrong again</title><content type='html'>Hello,&lt;br /&gt;sometimes ago I posted twice about google search having wrong results.&lt;br /&gt;Now it happens again after a few months (it's like google breaks page weights like every 4-5 months).&lt;br /&gt;The search is &lt;span style="font-weight:bold;"&gt;"debian dpkg list"&lt;/span&gt;, I really expect the mailing list info page but after 3-4 pages of google search (and also bing this time) I couldn't find it. With yahoo search it's at the first position (lists.debian.org/debian-dpkg).&lt;br /&gt;&lt;br /&gt;Like for the previous posts, using different search engines matters and matches your needs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7354520148318642790?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7354520148318642790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7354520148318642790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7354520148318642790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7354520148318642790'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/03/google-search-wrong-again.html' title='Google search wrong again'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5008486551416190580</id><published>2010-03-03T01:51:00.000-08:00</published><updated>2010-03-03T02:11:21.800-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Debian/GNOME bug triage ended</title><content type='html'>Hello,&lt;br /&gt;I'm writing about the work done in the &lt;a href="http://np237.livejournal.com/27754.html"&gt;bug&lt;/a&gt; &lt;a href="http://np237.livejournal.com/27966.html"&gt;triage&lt;/a&gt; weekend of the Debian/GNOME team, started at 27th Feb and ended in 28th Feb.&lt;br /&gt;The result is great, 167 bugs have been closed and many more have been triaged and forwarded upstream.&lt;br /&gt;&lt;br /&gt;Thanks to everybody who contributed, especially to whom has done it for the first time (well, you can still continue working on the remaining bugs ;) ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5008486551416190580?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5008486551416190580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5008486551416190580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5008486551416190580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5008486551416190580'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/03/debiangnome-bug-triage-ended.html' title='Debian/GNOME bug triage ended'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1710385766805963655</id><published>2010-02-16T03:11:00.001-08:00</published><updated>2010-02-16T03:16:37.848-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rsa'/><category scheme='http://www.blogger.com/atom/ns#' term='gpg'/><category scheme='http://www.blogger.com/atom/ns#' term='sdchat'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='networking'/><title type='text'>Secure and Decentralized Chat</title><content type='html'>Hello,&lt;div&gt;I'm writing to let you know of the first release of &lt;a href="http://decrew.indivia.net/sdchat/index.html"&gt;SDChat&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;It is a protocol with libraries and programs to create secure IM networks using GPG and RSA.&lt;/div&gt;&lt;div&gt;All the stack is written in Python but the page says it will be rewritten from scratch to provide a C API.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It features a GTK+ interface with many plugins (unfortunately audio and video are being broken due to gstreamer updates) and a simple server for routing. No installation is required.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wondering if this can be any useful for Iranians.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1710385766805963655?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1710385766805963655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1710385766805963655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1710385766805963655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1710385766805963655'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/02/secure-and-decentralized-chat.html' title='Secure and Decentralized Chat'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7664758401226973915</id><published>2010-02-04T12:43:00.000-08:00</published><updated>2010-02-04T12:49:24.931-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Vala 0.7.10 released</title><content type='html'>&lt;div&gt;Hello,&lt;/div&gt;&lt;div&gt;I'm lately following the Vala development and finally we got a new release with plenty of bug fixes and enhancements which makes Vala even more interesting and usable as general purpose language.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's the &lt;a href="http://mail.gnome.org/archives/vala-list/2010-February/msg00040.html"&gt;announcement&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;I'd like to point you to the new &lt;a href="http://valajournal.blogspot.com/"&gt;Vala journal&lt;/a&gt;, a good resource to stay tuned with Vala changes periodically.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;News:&lt;/div&gt;&lt;div&gt;&lt;div&gt; * Support coalescing operator ??.&lt;/div&gt;&lt;div&gt; * Support to_string and bitwise complement with enums.&lt;/div&gt;&lt;div&gt; * Return handler id when connecting signal handlers.&lt;/div&gt;&lt;div&gt; * Support struct comparison.&lt;/div&gt;&lt;div&gt; * Support constructor chaining in structs.&lt;/div&gt;&lt;div&gt; * Enforce protected member restrictions.&lt;/div&gt;&lt;div&gt; * Improve performance of flow analysis.&lt;/div&gt;&lt;div&gt; * Support automatic line continuations in Genie.&lt;/div&gt;&lt;div&gt; * Improvements to the .gir reader and writer.&lt;/div&gt;&lt;div&gt; * Add --enable-mem-profiler commandline option.&lt;/div&gt;&lt;div&gt; * Many bug fixes and binding updates.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7664758401226973915?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7664758401226973915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7664758401226973915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7664758401226973915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7664758401226973915'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/02/vala-0710-released.html' title='Vala 0.7.10 released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-4021431448231211366</id><published>2010-01-24T03:04:00.000-08:00</published><updated>2010-01-24T03:38:46.487-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vala'/><category scheme='http://www.blogger.com/atom/ns#' term='soup'/><title type='text'>Fetch web page with Vala and Soup</title><content type='html'>Hello,&lt;div&gt;I'm lately using the &lt;a href="http://live.gnome.org/Vala"&gt;Vala&lt;/a&gt; language widely. I find it a great and well designed language.&lt;/div&gt;&lt;div&gt;You may know I'm the maintainer of &lt;a href="http://freespeak.berlios.de/"&gt;Freespeak&lt;/a&gt;. This program is written in Python. Now I'm rewriting it in Vala, both for providing a good and really simple API in C and for learning Vala.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will now paste a snippet from the new freespeak code that I use for creating a cancellable asyncronous operation for fetching a web page using libsoup either with a GET or a POST method.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's the &lt;a href="http://www.refactory.org/s/fetch_web_pages_with_vala_and_soup/view/3"&gt;snippet at refactory&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-4021431448231211366?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/4021431448231211366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=4021431448231211366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4021431448231211366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4021431448231211366'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2010/01/fetch-web-page-with-vala-and-soup.html' title='Fetch web page with Vala and Soup'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3697196607481135832</id><published>2009-12-25T01:23:00.001-08:00</published><updated>2009-12-25T01:33:03.104-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='holidays'/><title type='text'>Happy Holidays</title><content type='html'>&lt;div  style="text-align: center;font-family:times new roman;"&gt;&lt;span style="font-weight: bold; font-style: italic; color: rgb(255, 0, 0);font-size:180%;" &gt;I wish you all a Merry Christmas and a Happy New Year!&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3697196607481135832?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3697196607481135832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3697196607481135832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3697196607481135832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3697196607481135832'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/12/merry-christmas.html' title='Happy Holidays'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-2737439549979918521</id><published>2009-12-14T09:38:00.000-08:00</published><updated>2009-12-14T09:49:42.178-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='mafia'/><category scheme='http://www.blogger.com/atom/ns#' term='italy'/><title type='text'>Facebook and Berlusconi</title><content type='html'>Hello,&lt;br /&gt;today many people are &lt;span style="font-weight:bold;"&gt;getting subscribed&lt;/span&gt; (with NO authorization) automatically to this group: Sosteniamo SILVIO BERLUSCONI contro i FAN di massimo tartaglia. You have &lt;span style="font-weight:bold;"&gt;NO notification&lt;/span&gt; that you've been subscribed to this group.&lt;br /&gt;&lt;br /&gt;Also consider the geographic position (&lt;a href="http://img197.imageshack.us/img197/3143/31590708.png"&gt;screenshot&lt;/a&gt;) of the group contact.&lt;br /&gt;&lt;br /&gt;Also consider that &lt;span style="font-weight:bold;"&gt;the group can't be signaled&lt;/span&gt; to facebook, because the feature looks like out of service.&lt;br /&gt;&lt;br /&gt;It's clearly a mafia group, beware of!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-2737439549979918521?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/2737439549979918521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=2737439549979918521' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2737439549979918521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2737439549979918521'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/12/facebook-and-berlusconi.html' title='Facebook and Berlusconi'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8838191782917020327</id><published>2009-12-14T04:15:00.001-08:00</published><updated>2009-12-14T04:18:06.790-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='lua'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Lua for Pythoners - Dictionary</title><content type='html'>Hello,&lt;br /&gt;as promised this is the &lt;a href="http://lethalman.blogspot.com/2009/12/lua-for-pythoners-lists.html"&gt;second post&lt;/a&gt;, this time for dictionaries. The most important thing to notice is that tbl[key]=nil means deleting the entry from the table, while in python dict[key]=None is still a valid entry with None value.&lt;br /&gt;&lt;br /&gt;Here's &lt;a href="http://www.refactory.org/s/lua_for_pythoners_dictionary/view/1"&gt;the snippet&lt;/a&gt; you can launch in a lua interpreter and this is the &lt;a href="http://www.java2s.com/Code/Python/Dictionary/CatalogDictionary.htm"&gt;catalog of python dictionary&lt;/a&gt; examples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8838191782917020327?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8838191782917020327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8838191782917020327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8838191782917020327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8838191782917020327'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/12/lua-for-pythoners-dictionary.html' title='Lua for Pythoners - Dictionary'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3514290418319920503</id><published>2009-12-13T05:58:00.001-08:00</published><updated>2009-12-13T06:43:58.935-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='lua'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Lua for Pythoners - Lists</title><content type='html'>Hello,&lt;br /&gt;lately I'm discovering &lt;a href="http://www.lua.org"&gt;Lua&lt;/a&gt; as general purpose language. Many people don't agree with lua being used as a general purpose language, many others (including a newbie like me) think Lua has such a simple syntax and powerful tables to become a full fledged language.&lt;br /&gt;I use a lot of Python, so I start from here: what Python does that Lua can't do almost in the same way? Read the question as it is, don't read "what Python does that Lua can't do", it's different.&lt;br /&gt;&lt;br /&gt;This is the first of several post series I'm writing. I'm trying to "translate" &lt;a href="http://www.java2s.com/Code/Python/CatalogPython.htm"&gt;python pills&lt;/a&gt; in Lua + &lt;a href="http://penlight.luaforge.net"&gt;Penlight&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please consider that many things can be done really better in Lua. As I said, this is a kind of "translation". You will understand that Lua does better than Python in other things that will not be shown because the examples are made in Python.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.refactory.org/s/lua_for_pythoners_lists/view/2"&gt;Here's the snippet&lt;/a&gt;, you can run it with a stand-alone Lua interpreter.&lt;br /&gt;&lt;br /&gt;If you know better ways of doing things like in Python please comment. Comments like 'Hey, it's inefficient! This is not the way you do things in Lua' are accepted of course but not related to the post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Errata:&lt;/span&gt;&lt;br /&gt;I've had some important feedback thanks to #lua people in IRC:&lt;br /&gt;- Variables in Lua are globally assigned, so at least in functions you must use &lt;span style="font-weight:bold;"&gt;local&lt;/span&gt;&lt;br /&gt;- Using table.insert in loops is slow, better use tbl[#tbl+1] assignment, and even better remember the next free position &lt;span style="font-weight:bold;"&gt;tbl[next] = element; next = next + 1&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3514290418319920503?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3514290418319920503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3514290418319920503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3514290418319920503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3514290418319920503'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/12/lua-for-pythoners-lists.html' title='Lua for Pythoners - Lists'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1079904741632548691</id><published>2009-11-27T04:21:00.001-08:00</published><updated>2009-11-27T04:25:22.292-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='mimaggia'/><category scheme='http://www.blogger.com/atom/ns#' term='cairo'/><title type='text'>Mimaggia, cairo tester</title><content type='html'>Hello,&lt;br /&gt;&lt;table align="right" style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/eame-pQdBfqL7fex8ocG1Q?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_E0EaaGGWB9c/Sw_CytFH6hI/AAAAAAAAAPQ/xmTBc5HdUWM/s144/Screenshot-Mimaggia.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="http://picasaweb.google.com/lethalman88/GNOME?feat=embedwebsite"&gt;GNOME&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;I've created a simple pygtk project for testing cairo statements. It includes a sort of terminal where you write statements in a simple language. It features immediate preview of what you write.&lt;br /&gt;&lt;br /&gt;Say it's a new format for images.&lt;br /&gt;If you want to test it and see the code, ask me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1079904741632548691?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1079904741632548691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1079904741632548691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1079904741632548691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1079904741632548691'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/11/mimaggia-cairo-tester.html' title='Mimaggia, cairo tester'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_E0EaaGGWB9c/Sw_CytFH6hI/AAAAAAAAAPQ/xmTBc5HdUWM/s72-c/Screenshot-Mimaggia.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8661068966426780645</id><published>2009-11-14T06:34:00.000-08:00</published><updated>2009-11-18T13:33:50.467-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crypto'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Python and RSA</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sial.org/howto/openssl/lock.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" width="20%" src="http://sial.org/howto/openssl/lock.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;There are many Python toolkits for crypto, so I hope I've done the best choice (at least for now). This is a simple utility class for managing RSA keys, a sort of wrappera to the &lt;a target="_blank" href="http://sandbox.rulemaker.net/ngps/m2/"&gt;m2crypto&lt;/a&gt; &lt;a href="http://www.heikkitoivonen.net/m2crypto/api/M2Crypto.RSA.RSA-class.html" target="_blank"&gt;class&lt;/a&gt;.&lt;br /&gt;&lt;span class="Apple-style-span"  style=" white-space: pre; font-family:monospace;"&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style=" white-space: pre; font-family:monospace;"&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;import&lt;/span&gt; M2Crypto&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;class&lt;/span&gt; RSA &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;object&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;:&lt;br /&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;def&lt;/span&gt; &lt;span style="color:#0000cd;"&gt;__init__&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;self&lt;/span&gt;, bits=&lt;span style="color:#ff4500;"&gt;1024&lt;/span&gt;, padding=M2Crypto.&lt;span style="color:black;"&gt;RSA&lt;/span&gt;.&lt;span style="color:black;"&gt;pkcs1_padding&lt;/span&gt;, exp=&lt;span style="color:#ff4500;"&gt;65537&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;:&lt;br /&gt;    &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;bits&lt;/span&gt; = bits&lt;br /&gt;    &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;padding&lt;/span&gt; = padding&lt;br /&gt;    &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;exp&lt;/span&gt; = exp&lt;br /&gt;    &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;rsa&lt;/span&gt; = &lt;span style="color:#008000;"&gt;None&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;def&lt;/span&gt; generate &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;self&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;:&lt;br /&gt;    &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;rsa&lt;/span&gt; = M2Crypto.&lt;span style="color:black;"&gt;RSA&lt;/span&gt;.&lt;span style="color:black;"&gt;gen_key&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;bits&lt;/span&gt;, &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;exp&lt;/span&gt;, &lt;span style="font-weight:bold;color:#ff7700;"&gt;lambda&lt;/span&gt; x: &lt;span style="color:#008000;"&gt;None&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;def&lt;/span&gt; encrypt &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;self&lt;/span&gt;, s&lt;span style="color:black;"&gt;)&lt;/span&gt;:&lt;br /&gt;    c = &lt;span style="color:#483d8b;"&gt;""&lt;/span&gt;&lt;br /&gt;    bytes = &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;bits&lt;/span&gt;/&lt;span style="color:#ff4500;"&gt;8&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;-11&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight:bold;color:#ff7700;"&gt;for&lt;/span&gt; i &lt;span style="font-weight:bold;color:#ff7700;"&gt;in&lt;/span&gt; &lt;span style="color:#008000;"&gt;range&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color:#008000;"&gt;len&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;s&lt;span style="color:black;"&gt;)&lt;/span&gt;, bytes&lt;span style="color:black;"&gt;)&lt;/span&gt;:&lt;br /&gt;        c += &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;rsa&lt;/span&gt;.&lt;span style="color:black;"&gt;public_encrypt&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;s&lt;span style="color:black;"&gt;[&lt;/span&gt;i:i+bytes&lt;span style="color:black;"&gt;]&lt;/span&gt;, &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;padding&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight:bold;color:#ff7700;"&gt;return&lt;/span&gt; c&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;def&lt;/span&gt; sign &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;self&lt;/span&gt;, s, algo=&lt;span style="color:#483d8b;"&gt;"sha1"&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;:&lt;br /&gt;    dgst = M2Crypto.&lt;span style="color:black;"&gt;EVP&lt;/span&gt;.&lt;span style="color:black;"&gt;MessageDigest&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;algo&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;    dgst.&lt;span style="color:black;"&gt;update&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;s&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight:bold;color:#ff7700;"&gt;return&lt;/span&gt; &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;rsa&lt;/span&gt;.&lt;span style="color:black;"&gt;sign&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;dgst.&lt;span style="color:black;"&gt;digest&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;, algo&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;def&lt;/span&gt; verify &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;self&lt;/span&gt;, s, sign, algo=&lt;span style="color:#483d8b;"&gt;"sha1"&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;:&lt;br /&gt;    dgst = M2Crypto.&lt;span style="color:black;"&gt;EVP&lt;/span&gt;.&lt;span style="color:black;"&gt;MessageDigest&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;algo&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;    dgst.&lt;span style="color:black;"&gt;update&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;s&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight:bold;color:#ff7700;"&gt;try&lt;/span&gt;:&lt;br /&gt;        &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;rsa&lt;/span&gt;.&lt;span style="color:black;"&gt;verify&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;dgst.&lt;span style="color:black;"&gt;digest&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;, sign, algo&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight:bold;color:#ff7700;"&gt;except&lt;/span&gt;:&lt;br /&gt;        &lt;span style="font-weight:bold;color:#ff7700;"&gt;return&lt;/span&gt; &lt;span style="color:#008000;"&gt;False&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight:bold;color:#ff7700;"&gt;return&lt;/span&gt; &lt;span style="color:#008000;"&gt;True&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;def&lt;/span&gt; decrypt &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;"&gt;self&lt;/span&gt;, c&lt;span style="color:black;"&gt;)&lt;/span&gt;:&lt;br /&gt;    s = &lt;span style="color:#483d8b;"&gt;""&lt;/span&gt;&lt;br /&gt;    bytes = &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;bits&lt;/span&gt;/&lt;span style="color:#ff4500;"&gt;8&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight:bold;color:#ff7700;"&gt;for&lt;/span&gt; i &lt;span style="font-weight:bold;color:#ff7700;"&gt;in&lt;/span&gt; &lt;span style="color:#008000;"&gt;range&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color:#008000;"&gt;len&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;c&lt;span style="color:black;"&gt;)&lt;/span&gt;, bytes&lt;span style="color:black;"&gt;)&lt;/span&gt;:&lt;br /&gt;        s += &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;rsa&lt;/span&gt;.&lt;span style="color:black;"&gt;private_decrypt&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;c&lt;span style="color:black;"&gt;[&lt;/span&gt;i:i+bytes&lt;span style="color:black;"&gt;]&lt;/span&gt;, &lt;span style="color:#008000;"&gt;self&lt;/span&gt;.&lt;span style="color:black;"&gt;padding&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span style="font-weight:bold;color:#ff7700;"&gt;return&lt;/span&gt; s&lt;/pre&gt;Example usage:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;code&gt;rsa = RSA &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;rsa.&lt;span style="color:black;"&gt;generate&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt; &lt;span style=" font-style: italic;color:#808080;"&gt;# generate key pair&lt;/span&gt;&lt;br /&gt;s = &lt;span style="color:#483d8b;"&gt;"a"&lt;/span&gt;&lt;span style="color:#66cc66;"&gt;*&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;2000&lt;/span&gt; &lt;span style=" font-style: italic;color:#808080;"&gt;# test data&lt;/span&gt;&lt;br /&gt;edata = rsa.&lt;span style="color:black;"&gt;encrypt&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;s&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;sign = rsa.&lt;span style="color:black;"&gt;sign&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;s&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ddata = rsa.&lt;span style="color:black;"&gt;decrypt&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;edata&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;color:#ff7700;"&gt;assert&lt;/span&gt; rsa.&lt;span style="color:black;"&gt;verify&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;ddata, sign&lt;span style="color:black;"&gt;)&lt;/span&gt; == &lt;span style="color:#008000;"&gt;True&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8661068966426780645?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8661068966426780645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8661068966426780645' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8661068966426780645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8661068966426780645'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/11/there-are-many-python-toolkits-for.html' title='Python and RSA'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8066161228636694587</id><published>2009-10-09T06:08:00.001-07:00</published><updated>2009-10-09T06:27:06.013-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unical'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='web services'/><category scheme='http://www.blogger.com/atom/ns#' term='axis'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>Debian+Apache+Tomcat+Axis</title><content type='html'>Hello,&lt;br /&gt;one of the courses I'm following at the university is "Laboratorio di reti&lt;br /&gt;di calcolatori" which uses the technologies (really technologies?????)&lt;br /&gt;listed in the post title. This is a little tutorial for making them works,&lt;br /&gt;with a little script for registering .wsdd files.&lt;br /&gt;&lt;br /&gt;- aptitude install apache2 tomcat6&lt;br /&gt;- download the &lt;span style="font-weight: bold;"&gt;binaries&lt;/span&gt; of axis 1.x (latest is 2.x, it's not used in our course) and xerces then unpack them.&lt;br /&gt;- copy *.jar of xerces into the "lib" dir of axis.&lt;br /&gt;- create &lt;span style="font-style: italic;"&gt;"/etc/tomcat6/policy.d/99axis.policy"&lt;/span&gt; with:&lt;br /&gt;&lt;blockquote&gt;grant codeBase "file:/var/lib/tomcat6/webapps/-" {&lt;br /&gt;permission java.security.AllPermission;&lt;br /&gt;};&lt;/blockquote&gt;&lt;br /&gt;- copy the "axis" directory found under webapps of the axis binaries into /var/lib/tomcat6/webapps&lt;br /&gt;- invoke-rc.d apache2 restart&lt;br /&gt;- invoke-rc.d tomcat6 restart&lt;br /&gt;&lt;br /&gt;Now go to http://localhost:8080 to make sure that Apache-Axis works.&lt;br /&gt;&lt;br /&gt;Finally, this is the script for deploying web services (call it deploy.sh):&lt;br /&gt;&lt;blockquote&gt;export AXIS_HOME="/home/lethal/ingegneria/reti/axis/axis-1_4"&lt;br /&gt;export AXIS_LIB="$AXIS_HOME/lib"&lt;br /&gt;export AXISCLASSPATH="$AXIS_LIB/axis.jar:$AXIS_LIB/commons-discovery-0.2.jar:$AXIS_LIB/commons-logging-1.0.4.jar:$AXIS_LIB/jaxrpc.jar:$AXIS_LIB/saaj.jar:$AXIS_LIB/log4j-1.2.8.jar:$AXIS_LIB/xml-apis.jar:$AXIS_LIB/xercesImpl.jar"&lt;br /&gt;java -cp "$AXISCLASSPATH" org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService "$1"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;In the script, you &lt;span style="font-weight: bold;"&gt;must&lt;/span&gt; tweak the AXIS_HOME variable to point to the unpacked axis binaries: &lt;span style="font-weight: bold; font-style: italic;"&gt;avoid using spaces&lt;/span&gt; in this variable or you'll encounter several errors in terms of classpath.&lt;br /&gt;Usage of the script:&lt;br /&gt;&lt;blockquote&gt;sh deploy.sh file.wsdd&lt;/blockquote&gt;&lt;br /&gt;We're done!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8066161228636694587?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8066161228636694587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8066161228636694587' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8066161228636694587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8066161228636694587'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/10/debianapachetomcataxis.html' title='Debian+Apache+Tomcat+Axis'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8316153411634213543</id><published>2009-10-07T14:23:00.001-07:00</published><updated>2009-10-07T14:30:37.094-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='zsh'/><category scheme='http://www.blogger.com/atom/ns#' term='completion'/><title type='text'>Speeding up zsh completion</title><content type='html'>Hello,&lt;div&gt;since I've started using &lt;a href="http://www.zsh.org/"&gt;zsh&lt;/a&gt;, a great shell with great out of the box completion, one of the most boring issues was having a really slow completion. I can understand it could be slow to get a list of packages, remote files or command line options, but also paths were often slow to be completed. After lots of searches I've ended up in adding this magic line to my ~/.zshrc:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;zstyle ':completion:*' accept-exact '*(N)'&lt;/blockquote&gt;This way you tell zsh comp to take the first part of the path to be exact, and to avoid partial globs. Now path completions became nearly immediate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another important speed up is using the cache for packages and other stuff:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;div&gt;zstyle ':completion:*' use-cache on&lt;/div&gt;&lt;div&gt;zstyle ':completion:*' cache-path ~/.zsh/cache&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;If you know how to boost up options/remote files, please share :)&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8316153411634213543?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8316153411634213543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8316153411634213543' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8316153411634213543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8316153411634213543'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/10/speeding-up-zsh-completion.html' title='Speeding up zsh completion'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-6570085153262641673</id><published>2009-08-29T05:46:00.000-07:00</published><updated>2009-08-29T05:58:46.760-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gpg'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>New GPG key</title><content type='html'>Hello,&lt;br /&gt;due to some synchronization problems between my desktop and laptop, unfortunately I've lost my GPG secret key. I was planning to renew my key after the SHA issues, but this way I can't neither revoke the old key nor sign the new key. So I please anybody having my pubkey to delete it:&lt;br /&gt;gpg --delete-key &lt;a href="http://pgp.mit.edu:11371/pks/lookup?op=get&amp;amp;search=0xC3D423FBC29A9371"&gt;C29A9371&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;I've uploaded my new key as usual so you can get it:&lt;br /&gt;gpg --keyserver pgp.mit.edu --recv-keys &lt;a href="http://pgp.mit.edu:11371/pks/lookup?op=get&amp;amp;search=0x44EB1667D2C27B6B"&gt;D2C27B6B&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-6570085153262641673?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/6570085153262641673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=6570085153262641673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6570085153262641673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6570085153262641673'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/08/new-gpg-key.html' title='New GPG key'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1878233625883463565</id><published>2009-08-09T11:10:00.000-07:00</published><updated>2009-08-09T11:14:17.011-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='corraza'/><category scheme='http://www.blogger.com/atom/ns#' term='archicad'/><category scheme='http://www.blogger.com/atom/ns#' term='spadi'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Spadi source code</title><content type='html'>Hello,&lt;br /&gt;after I've written really a few docs, and cleaned up some stuff, I've published the code of both Spadi and Corraza on &lt;a href="http://gitorious.org/spadi"&gt;gitorious here&lt;/a&gt;. In the while, I've added support for floors and closeable views.&lt;br /&gt;Help... help is needed.&lt;br /&gt;&lt;br /&gt;Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1878233625883463565?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1878233625883463565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1878233625883463565' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1878233625883463565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1878233625883463565'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/08/spadi-source-code.html' title='Spadi source code'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7728548381498384666</id><published>2009-08-06T04:02:00.000-07:00</published><updated>2009-08-06T04:12:32.345-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='corraza'/><category scheme='http://www.blogger.com/atom/ns#' term='archicad'/><category scheme='http://www.blogger.com/atom/ns#' term='spadi'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ray tracing'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Constructing a free ArchiCAD alternative</title><content type='html'>Hello,&lt;br /&gt;together a couple of university mates we talked about a possible free (as in freedom) ArchiCAD alternative. There are several free CAD out there but none is free for architects/engineers. The project is too big and ambitious, but I wanted to give OpenGL a shot with this excuse to learn something new.&lt;br /&gt;&lt;br /&gt;I've started two projects:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Corraza, the OpenGL framework for editing 3d objects and exporting the scene graph to ray tracing software... think about a very very &lt;span style="font-weight: bold;"&gt;very&lt;/span&gt; minimal blender but as library&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Spadi, the GTK+ application that runs on top of Corraza&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You can find a &lt;a href="http://www.youtube.com/watch?v=i3D7CLdhvuk"&gt;video here&lt;/a&gt; to see what it can do now, after a week of development.&lt;br /&gt;There's no code published at the moment, contact me if you would like to join the development.&lt;br /&gt;&lt;br /&gt;Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7728548381498384666?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7728548381498384666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7728548381498384666' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7728548381498384666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7728548381498384666'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/08/constructing-free-archicad-alternative.html' title='Constructing a free ArchiCAD alternative'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-2169367714044073210</id><published>2009-07-21T23:34:00.000-07:00</published><updated>2009-07-21T23:43:40.903-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aruanne'/><category scheme='http://www.blogger.com/atom/ns#' term='pango'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='cairo'/><category scheme='http://www.blogger.com/atom/ns#' term='report'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Aruanne, pdf reporting framework</title><content type='html'>Hello,&lt;br /&gt;a while ago I've been talking about pango cairo and how to generate pdf with a couple of tables.&lt;br /&gt;In the meantime I've worked on it, improving and enhancing new kinds of elements. This has lead to the creation of a small project, a library providing a simple framework for generating mostly PDF reports (I haven't tried to generate SVG or something else yet).&lt;br /&gt;&lt;br /&gt;After a couple of release requests, I've found finally the time to publish a sort of working code.&lt;br /&gt;&lt;br /&gt;Here's the &lt;a href="http://gitorious.org/aruanne"&gt;git repository&lt;/a&gt; and &lt;a href="http://gitorious.org/aruanne/aruanne/archive-tarball/master"&gt;here you can download the snapshot tarball&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Any patches welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-2169367714044073210?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/2169367714044073210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=2169367714044073210' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2169367714044073210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2169367714044073210'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/07/aruanne-pdf-reporting-framework.html' title='Aruanne, pdf reporting framework'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-6193530327052850732</id><published>2009-06-20T13:10:00.000-07:00</published><updated>2009-06-21T00:59:28.328-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='gstreamer'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>The less consuming radio player ever</title><content type='html'>Hello,&lt;br /&gt;multimedia always killed desktop performance, also audio with all such effect-based players out there. I've been using &lt;a href="http://www.deezer.org"&gt;deezer&lt;/a&gt; for a long time, but sometimes I'm tired to see my desktop lagging.&lt;br /&gt;I don't need that, I need random music from internet while I'm either programming or studying, and my computer has only 512mb ram and 2.4ghz amd64 (onLY??? yes nowadays it's a little amount).&lt;br /&gt;&lt;br /&gt;Let's see what we can do using gst-launch:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;while [ 1 ]; do wget -q -O - http://66.250.45.112:80/hard.ogg|gst-launch fdsrc fd=0 ! decodebin ! audioconvert ! alsasink; done&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The URL above is a hard rock station :) The &lt;b&gt;while&lt;/b&gt; ensures re-connection. I think performances are great, 6% cpu and 2% ram.&lt;br /&gt;&lt;br /&gt;But there's yet a bettere solution (see comments):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mplayer http://66.250.45.112:80/hard.ogg&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-6193530327052850732?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/6193530327052850732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=6193530327052850732' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6193530327052850732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6193530327052850732'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/06/less-consuming-radio-player-ever.html' title='The less consuming radio player ever'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-4269526809163930587</id><published>2009-05-29T15:45:00.000-07:00</published><updated>2009-05-29T16:10:31.884-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><title type='text'>Syx changes web and git hosting</title><content type='html'>&lt;em&gt;&lt;div&gt;Hello,&lt;/div&gt;&lt;div&gt;I'm officializing the change of web hosting and git hosting from googlecode to berlios:&lt;/div&gt;&lt;div&gt;&lt;/em&gt;&lt;br /&gt;&lt;img align="right" border="0" src="http://syx.berlios.de/images/syx-logo.png" /&gt;&lt;/div&gt;&lt;div&gt;The new &lt;a href="http://syx.berlios.de/"&gt;website&lt;/a&gt; is up!&lt;/div&gt;&lt;div&gt;For &lt;a href="http://groups.google.com/group/syx-discuss/t/eac3bb648bec6dfa"&gt;several&lt;/a&gt; &lt;a href="http://groups.google.com/group/syx-discuss/t/aa7cfd76fbd77e11"&gt;reasons&lt;/a&gt;, including &lt;a href="http://groups.google.com/group/syx-discuss/browse_thread/thread/ab71093a2f69e1de/c89f23195d40a871?lnk=gst&amp;amp;q=svn#c89f23195d40a871"&gt;reliability&lt;/a&gt;, we switched both the website and git hosting to berlios. Also the purpose of this change is to rewrite the website backend using Syx.&lt;/div&gt;&lt;div&gt;The mailing list and the bug tracker are still hosted at &lt;a href="http://syx.googlecode.com/"&gt;googlecode&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Some progress news in the while&lt;/b&gt; &lt;/div&gt;&lt;div&gt;We're working on a new memory management, object representation and garbage collector. On the other side the lack of time is making things harder for releasing the new version. Together with the above changes, new Smalltalk standard pieces will implemented as usual. I remind you the new code is in&lt;/div&gt;&lt;div&gt;the &lt;a href="http://git.berlios.de/cgi-bin/gitweb.cgi?p=syx;a=shortlog;h=refs/heads/object"&gt;&lt;b&gt;object&lt;/b&gt;&lt;/a&gt; branch.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Website: &lt;a href="http://syx.berlios.de/"&gt;http://syx.berlios.de&lt;/a&gt;&lt;/div&gt;&lt;div&gt;GIT: &lt;a href="git://git.berlios.de/syx"&gt;git://git.berlios.de/syx&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Project page: &lt;a href="https://developer.berlios.de/projects/syx/"&gt;https://developer.berlios.de/projects/syx/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-4269526809163930587?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/4269526809163930587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=4269526809163930587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4269526809163930587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4269526809163930587'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/05/syx-changes-web-and-git-hosting.html' title='Syx changes web and git hosting'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8734694823229845657</id><published>2009-05-27T14:22:00.000-07:00</published><updated>2009-05-27T14:46:55.421-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pango'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='cairo'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Render tables with pangocairo like reportlab</title><content type='html'>Hello,&lt;br /&gt;lately I was wondering if there was any alternative to the well known &lt;a href="http://www.reportlab.org/"&gt;reportlab&lt;/a&gt; python software for creating PDF reports. I immediately thought about &lt;a href="http://cairographics.org/"&gt;Cairo&lt;/a&gt;. The only two problems are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cairo doesn't create multiple pages&lt;/li&gt;&lt;li&gt;No support for creating tables containing text, necessary for table-based reports&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I still can't realize how to achieve the first feature, but the second one could be solved using &lt;a href="http://www.pango.org/"&gt;Pango&lt;/a&gt; layouts.&lt;/div&gt;&lt;div&gt;The idea is to create the cells of the table using such layouts, so that the text get wrapped etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Here's the &lt;a href="https://developer.berlios.de/snippet/detail.php?type=snippet&amp;amp;id=100049"&gt;Pango tables code snippet&lt;/a&gt; containing the necessary classes for achieving the job. Notice that the methods in the snippet often make use of Pango units instead of pixels.&lt;div&gt;Now let's use the Table class as follows: &lt;b&gt;create a table with two rows and two columns, then show it twice with different background colors&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;code&gt;surface = cairo.&lt;span style="color:black;"&gt;PDFSurface&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#483d8b;"&gt;"test.pdf"&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;300&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;400&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr = cairo.&lt;span style="color:black;"&gt;Context&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;surface&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr = pangocairo.&lt;span style="color:black;"&gt;CairoContext&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;cairo.&lt;span style="color:black;"&gt;Context&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;surface&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;sizes = &lt;span style="color:black;"&gt;[&lt;/span&gt;pango.&lt;span style="color:black;"&gt;SCALE*&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;12&lt;/span&gt;&lt;span style="color:#66cc66;"&gt;*&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;10&lt;/span&gt;, pango.&lt;span style="color:black;"&gt;SCALE*&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;12&lt;/span&gt;&lt;span style="color:#66cc66;"&gt;*&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;10&lt;/span&gt;&lt;span style="color:black;"&gt;]&lt;/span&gt;&lt;br /&gt;data = &lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:#483d8b;"&gt;"first test with pango tables"&lt;/span&gt;, &lt;span style="color:#483d8b;"&gt;"seems to work correctly"&lt;/span&gt;&lt;span style="color:black;"&gt;]&lt;/span&gt;,&lt;br /&gt;   &lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:#483d8b;"&gt;"though it needs"&lt;/span&gt;, &lt;span style="color:#483d8b;"&gt;"support for borders and spans"&lt;/span&gt;&lt;span style="color:black;"&gt;]&lt;/span&gt;&lt;span style="color:black;"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;table = Table &lt;span style="color:black;"&gt;(&lt;/span&gt;cr, sizes, data, pango.&lt;span style="color:black;"&gt;FontDescription&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#483d8b;"&gt;"Sans 12"&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr.&lt;span style="color:black;"&gt;rectangle&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, pango.&lt;span style="color:black;"&gt;PIXELS&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;table.&lt;span style="color:black;"&gt;get_width&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;, pango.&lt;span style="color:black;"&gt;PIXELS&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;table.&lt;span style="color:black;"&gt;get_height&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr.&lt;span style="color:black;"&gt;set_source_rgb&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;0.8&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0.8&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0.8&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr.&lt;span style="color:black;"&gt;fill&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr.&lt;span style="color:black;"&gt;set_source_rgb&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;table.&lt;span style="color:black;"&gt;show_table&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;cr&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cr.&lt;span style="color:black;"&gt;translate&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;200&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr.&lt;span style="color:black;"&gt;rectangle&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, pango.&lt;span style="color:black;"&gt;PIXELS&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;table.&lt;span style="color:black;"&gt;get_width&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;, pango.&lt;span style="color:black;"&gt;PIXELS&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;table.&lt;span style="color:black;"&gt;get_height&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr.&lt;span style="color:black;"&gt;set_source_rgb&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;0.4&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0.5&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0.7&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr.&lt;span style="color:black;"&gt;fill&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;cr.&lt;span style="color:black;"&gt;set_source_rgb&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color:#ff4500;"&gt;0&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;br /&gt;table.&lt;span style="color:black;"&gt;show_table&lt;/span&gt; &lt;span style="color:black;"&gt;(&lt;/span&gt;cr&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Here's the result &lt;b&gt;test.pdf&lt;/b&gt;:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;center&gt;&lt;img src="http://lh3.ggpht.com/_E0EaaGGWB9c/Sh2zsrcXtQI/AAAAAAAAAJ8/kvUTyh-hLcw/s800/Screenshot.png" /&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8734694823229845657?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8734694823229845657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8734694823229845657' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8734694823229845657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8734694823229845657'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/05/render-tables-with-pangocairo-like.html' title='Render tables with pangocairo like reportlab'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_E0EaaGGWB9c/Sh2zsrcXtQI/AAAAAAAAAJ8/kvUTyh-hLcw/s72-c/Screenshot.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3744281542261398799</id><published>2009-05-18T11:33:00.000-07:00</published><updated>2009-05-23T01:23:37.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Blogging from Epiphany WebKit</title><content type='html'>Hello,&lt;br /&gt;I've been using Midori for a while. It's a great browser: innovative and light. However all my bookmarks and data are in Epiphany. Last week the new epiphany-webkit version has been uploaded in Debian Sid and I couldn't wait to test it. I'm currently using it instead of gecko; it has still some issues but I begun living without it.&lt;br /&gt;&lt;a href="http://picasaweb.google.it/lethalman88/GNOME?feat=embedwebsite#5337233358166681346"&gt;&lt;img src="http://lh3.ggpht.com/_E0EaaGGWB9c/ShGpdhzj5wI/AAAAAAAAAJg/y0N8am7oZIQ/s288/Screenshot.png" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3744281542261398799?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3744281542261398799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3744281542261398799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3744281542261398799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3744281542261398799'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/05/blogging-from-epiphany-webkit.html' title='Blogging from Epiphany WebKit'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_E0EaaGGWB9c/ShGpdhzj5wI/AAAAAAAAAJg/y0N8am7oZIQ/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-2299766947964491164</id><published>2009-04-26T10:40:00.000-07:00</published><updated>2009-04-26T10:49:26.580-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='cairo'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Create a GdkPixbuf from cairo surface</title><content type='html'>Hello,&lt;br /&gt;here's the inverted code snippet of the previous post.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;w, h = surface.&lt;span style="color: black;"&gt;get_width&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;, surface.&lt;span style="color: black;"&gt;get_height&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;pixmap = gtk.&lt;span style="color: black;"&gt;gdk&lt;/span&gt;.&lt;span style="color: black;"&gt;Pixmap&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #008000;"&gt;None&lt;/span&gt;, w, h, &lt;span style="color: #ff4500;"&gt;24&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cr = pixmap.&lt;span style="color: black;"&gt;cairo_create&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cr.&lt;span style="color: black;"&gt;set_source_surface&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;surface, &lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cr.&lt;span style="color: black;"&gt;paint&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;pixbuf = gtk.&lt;span style="color: black;"&gt;gdk&lt;/span&gt;.&lt;span style="color: black;"&gt;Pixbuf&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;gtk.&lt;span style="color: black;"&gt;gdk&lt;/span&gt;.&lt;span style="color: black;"&gt;COLORSPACE_RGB&lt;/span&gt;, &lt;span style="color: #008000;"&gt;True&lt;/span&gt;, &lt;span style="color: #ff4500;"&gt;8&lt;/span&gt;, w, h&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;pixbuf = pixbuf.&lt;span style="color: black;"&gt;get_from_drawable&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;pixmap, gtk.&lt;span style="color: black;"&gt;gdk&lt;/span&gt;.&lt;span style="color: black;"&gt;colormap_get_system&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;, &lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;, &lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;, w, h&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-2299766947964491164?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/2299766947964491164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=2299766947964491164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2299766947964491164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2299766947964491164'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/04/create-pixbuf-from-cairo-surface.html' title='Create a GdkPixbuf from cairo surface'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-9209519921234896024</id><published>2009-04-25T02:03:00.000-07:00</published><updated>2009-04-25T02:13:01.462-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cairo'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='clutter'/><title type='text'>Create a cairo surface from a pixbuf</title><content type='html'>Hello,&lt;br /&gt;sometimes in the code of a couple of projects I see some hard algorithms to transform a pixbuf in a cairo surface.&lt;br /&gt;Maybe most of people don't know that GdkCairoContext, contrarily to cairo_t, is created against a cairo context not a cairo surface:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;surface = cairo.&lt;span style="color: black;"&gt;ImageSurface&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;cairo.&lt;span style="color: black;"&gt;FORMAT_ARGB32&lt;/span&gt;, pixbuf.&lt;span style="color: black;"&gt;get_width&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;, pixbuf.&lt;span style="color: black;"&gt;get_height&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cr = cairo.&lt;span style="color: black;"&gt;Context&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;surface&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;gdkcr = gtk.&lt;span style="color: black;"&gt;gdk&lt;/span&gt;.&lt;span style="color: black;"&gt;CairoContext&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;cr&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;gdkcr.&lt;span style="color: black;"&gt;set_source_pixbuf&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;pixbuf&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;gdkcr.&lt;span style="color: black;"&gt;paint&lt;/span&gt; &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Notice &lt;span style="font-weight:bold;"&gt;gtk.gdk.CairoContext (cr)&lt;/span&gt;, which cr is not the surface. That's the key of the code snippet.&lt;br /&gt;&lt;br /&gt;For instance this can be applied on a ClutterCairoTexture to render pixbufs in the canvas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-9209519921234896024?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/9209519921234896024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=9209519921234896024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/9209519921234896024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/9209519921234896024'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/04/create-cairo-surface-from-pixbuf.html' title='Create a cairo surface from a pixbuf'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-4754270548907203342</id><published>2009-02-27T15:12:00.001-08:00</published><updated>2009-02-27T15:50:59.366-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='awesome'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Awesome/other wrong keyboard layout</title><content type='html'>Hello,&lt;br /&gt;&lt;span style="font-style:italic;"&gt;due to the high resource usage by Eclipse (I have to use that unfortunately because of my professor) I've temporarly dropped GNOME and now I'm using &lt;a href="http://awesome.naquadah.org/"&gt;Awesome&lt;/a&gt; for a while.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ok let's say the problem: the keyboard. Do you have different languages, layouts and so on among several configurations (GNOME, X, ...) and your keyboard layout is messed up with awesome?&lt;br /&gt;Just do it:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;setxkbmap -layout YOURLAYOUT&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Where YOURLAYOUT for me is &lt;span style="font-weight:bold;"&gt;it&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I've found this utility in &lt;a href="http://www.mail-archive.com/awesome-devel@naquadah.org/msg00059.html"&gt;this mailing thread&lt;/a&gt;. Yet you can read that awesome is still too young and lacks some keyboard configuration features.&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-4754270548907203342?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/4754270548907203342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=4754270548907203342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4754270548907203342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4754270548907203342'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/02/awesomeother-wrong-keyboard-layout.html' title='Awesome/other wrong keyboard layout'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7911908120576053539</id><published>2009-02-24T14:11:00.000-08:00</published><updated>2009-02-24T14:22:46.526-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>JMF and MPEG</title><content type='html'>Hello,&lt;br /&gt;I'm recently writing a game with Java AWT/Swing/SwingX/JMF for a university exam.&lt;br /&gt;If you are using the Java Media Framework and most of the formats (all the well known and used formats) can't be handled by the library here's your definitive solution to the problem.&lt;br /&gt;You will usually get "&lt;span style="font-weight:bold;"&gt;Unable to handle format: MPEG&lt;/span&gt;" or something like that.&lt;br /&gt;&lt;br /&gt;How do you get rid of that and make things work? There's a great plugin named &lt;span style="font-weight:bold;"&gt;&lt;a href="http://jffmpeg.sourceforge.net/"&gt;jffmpeg&lt;/a&gt;&lt;/span&gt; which handles a huge number of audio and video formats (including ogg/vob).&lt;br /&gt;Just follow the instructions on the project website to install the plugins.&lt;br /&gt;&lt;br /&gt;Alternatively you can register only the codec and demux you use from within your application code as follows (e.g. only handle MPEG video format on input):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color: #aaaadd; font-weight: bold;"&gt;Format&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#93;&lt;/span&gt; inFormats = &lt;span style="color: #66cc66;"&gt;&amp;#123;&lt;/span&gt; &lt;span style="color: #000000; font-weight: bold;"&gt;new&lt;/span&gt; VideoFormat &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;MPEG&amp;quot;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#125;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PlugInManager.&lt;span style="color: #006600;"&gt;addPlugIn&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&amp;quot;net.sourceforge.jffmpeg.VideoDecoder&amp;quot;&lt;/span&gt;, inFormats, &lt;span style="color: #000000; font-weight: bold;"&gt;null&lt;/span&gt;, PlugInManager.&lt;span style="color: #006600;"&gt;CODEC&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;PlugInManager.&lt;span style="color: #006600;"&gt;commit&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7911908120576053539?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7911908120576053539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7911908120576053539' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7911908120576053539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7911908120576053539'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/02/jmf-and-mpeg.html' title='JMF and MPEG'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8431320876871924221</id><published>2009-01-10T02:42:00.000-08:00</published><updated>2009-01-10T02:48:11.333-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='freespeak'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>FreeSpeak 0.3.0 has been released</title><content type='html'>&lt;span style="font-weight:bold;"&gt;&lt;a href="http://freespeak.berlios.de"&gt;FreeSpeak&lt;/a&gt; is a free (as in freedom, developed and released under the terms of GPL) frontend to online translator engines (such as Google, Yahoo, etc.). It is written in Python, it uses the GTK toolkit and some GNOME infrastructure features.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a major enhancemenfts release.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://freespeak.berlios.de/screenshots/main_window-20090109.png"&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 160px; height: auto;" src="http://freespeak.berlios.de/screenshots/main_window-20090109.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Overview of Changes from FreeSpeak 0.2.0 to FreeSpeak 0.3.0&lt;br /&gt;===========================================================&lt;br /&gt;&lt;br /&gt;* Project is now hosted at BerliOS.de: http://freespeak.berlios.de&lt;br /&gt;&lt;br /&gt;* Support for cancellating operations has been added&lt;br /&gt;&lt;br /&gt;* Translation suggestions (open-tran) have been added&lt;br /&gt;&lt;br /&gt;* A menubar has been added and the toolbar has been cleaned up&lt;br /&gt;&lt;br /&gt;* The behavior of language/translation selection has been fixed and improved&lt;br /&gt;&lt;br /&gt;* GNOME documentation has been added&lt;br /&gt;&lt;br /&gt;* Dependencies in the configuration have been cleaned up&lt;br /&gt;&lt;br /&gt;* Support for global keybindings has been added through python-xlib&lt;br /&gt;&lt;br /&gt;* An introduction widget for the main window has been created&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8431320876871924221?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8431320876871924221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8431320876871924221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8431320876871924221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8431320876871924221'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2009/01/freespeak-030-has-been-released.html' title='FreeSpeak 0.3.0 has been released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3176138976220639485</id><published>2008-12-26T10:54:00.000-08:00</published><updated>2008-12-26T11:21:28.742-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mutt'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>Mailbox-to-mbox</title><content type='html'>Hello,&lt;br /&gt;lately I've been looking for a way to convert a &lt;a href="http://www.list.org/"&gt;mailman&lt;/a&gt; &lt;a href="http://www.mail-archive.com/"&gt;archive&lt;/a&gt; to an mbox format so that I could open with &lt;a href="http://www.mutt.org/"&gt;mutt&lt;/a&gt;.&lt;br /&gt;I then found a couple of scripts, but the one I've found simpler and working for my needs is &lt;a href="http://svn.rot13.org/index.cgi/perl/view/trunk/mailman2mbox.pl"&gt;mailbox2mbox.pl&lt;/a&gt;.&lt;br /&gt;Sample usage:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ gunzip YourArchive.txt.gz&lt;br /&gt;$ perl mailbox2mbox.pl &lt; YourArchive.txt &gt; mbox&lt;br /&gt;$ mutt -f mbox&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And it simply works!&lt;br /&gt;Does anybody know a method as simple as the above one but more powerful?&lt;br /&gt;&lt;br /&gt;PS: Happy holidays!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3176138976220639485?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3176138976220639485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3176138976220639485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3176138976220639485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3176138976220639485'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/12/mailmbox-to-mbox.html' title='Mailbox-to-mbox'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-6407685883656922877</id><published>2008-12-21T01:52:00.000-08:00</published><updated>2008-12-21T02:11:51.965-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='xlib'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Global keybinding on X</title><content type='html'>Hello,&lt;br /&gt;lately I've been looking for a way to create a desktop-wide keybinding for &lt;a href="http://freespeak.berlios.de/"&gt;FreeSpeak&lt;/a&gt;.&lt;br /&gt;I first looked into Tomboy and Deskbar source codes but the egg was too huge to be adopted, and it would have brought C dependency which isn't always nice for a Python project.&lt;br /&gt;Then fargiolas pointed me to a &lt;a href="http://blogs.gnome.org/brunobol/2008/12/14/global-keybindings-in-gtk/"&gt;blog post&lt;/a&gt; where I could find about &lt;a href="http://live.gnome.org/ControlCenter/ApplicationDefinedKeybindings"&gt;gnome keybindings&lt;/a&gt; owned by gnome control center. Well that was only a mirage as it doesn't really grab the key but it's only a visual entry in the keyboard shortcuts preferences.&lt;br /&gt;After a few days I've finally found a not-so-hackish solution in about one hundred lines of Python code.&lt;br /&gt;&lt;br /&gt;Here is the &lt;a href="https://www.siafoo.net/snippet/239"&gt;snippet&lt;/a&gt; (&lt;a href="https://www.siafoo.net/snippet/239/download/globalkeybinding.py"&gt;download&lt;/a&gt;), only using &lt;a href="http://python-xlib.sourceforge.net/"&gt;Xlib&lt;/a&gt; and GTK+ Python bindings.&lt;br /&gt;&lt;br /&gt;Sample usage:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def callback (keybinding):&lt;br /&gt;   print 'Callback!'&lt;br /&gt;   gtk.main_quit ()&lt;br /&gt;&lt;br /&gt;gtk.gdk.threads_init ()&lt;br /&gt;keybinding = GlobalKeyBinding ("/apps/appdir", "key_binding")&lt;br /&gt;keybinding.connect ('activate', callback)&lt;br /&gt;keybinding.grab ()&lt;br /&gt;keybinding.start ()&lt;br /&gt;gtk.main ()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The only problem is that it doesn't make use of GDK filters because PyGTK doesn't provide such function wrappers and there's no GDK-to-Xlib mapping available.&lt;br /&gt;But yes, it works very good.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-6407685883656922877?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/6407685883656922877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=6407685883656922877' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6407685883656922877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6407685883656922877'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/12/global-keybinding-on-x.html' title='Global keybinding on X'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7925744698182884264</id><published>2008-12-01T14:58:00.001-08:00</published><updated>2008-12-01T15:06:19.469-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><category scheme='http://www.blogger.com/atom/ns#' term='aptitude'/><title type='text'>Aptitude-gtk progress</title><content type='html'>Hello,&lt;br /&gt;I was curious to see if aptitude-gtk was making some progress. I haven't followed the project since it's been merged into aptitude.&lt;br /&gt;Well, I found it more functional and complete. Here's a screenshot showing pending packages for upgrade after an update:&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.it/lh/photo/IvMGBbNHUKMJqmH-yYN31Q"&gt;&lt;img src="http://lh5.ggpht.com/_E0EaaGGWB9c/STRsYre6I3I/AAAAAAAAAG4/5OkitUMe9l8/s288/Screenshot-aptitude.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="http://picasaweb.google.it/lethalman88/GNOME"&gt;GNOME&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;The team is definitely doing a good job. Hopefully I'll find the time to give some help as I'm really interested in such full-featured GUI frontend.&lt;br /&gt;Keep going on!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7925744698182884264?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7925744698182884264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7925744698182884264' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7925744698182884264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7925744698182884264'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/12/aptitude-gtk-progress.html' title='Aptitude-gtk progress'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_E0EaaGGWB9c/STRsYre6I3I/AAAAAAAAAG4/5OkitUMe9l8/s72-c/Screenshot-aptitude.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3181292721040009284</id><published>2008-11-30T03:47:00.000-08:00</published><updated>2008-11-30T03:59:40.383-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='freespeak'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>FreeSpeak gains translation suggestions</title><content type='html'>Hello,&lt;br /&gt;it hasn't been a long time since &lt;a href="http://freespeak.berlios.de/"&gt;FreeSpeak&lt;/a&gt; &lt;a href="http://lethalman.blogspot.com/2008/11/freespeak-020-has-been-released.html"&gt;0.2.0&lt;/a&gt; has been released. One of the &lt;a href="http://git.berlios.de/cgi-bin/gitweb.cgi?p=freespeak;a=blob_plain;f=TODO;h=03e80a7cd82ab56d177b25d9d0335717528d93ab;hb=HEAD"&gt;TODO&lt;/a&gt;s for the next release was to support &lt;a href="http://open-tran.eu/"&gt;open-tran&lt;/a&gt;, and more over translation suggestions for development.&lt;br /&gt;This is a screenshot of what's been included in the repository today:&lt;br /&gt;&lt;table style="width: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.it/lh/photo/k7lJRoox_f8Tx8Hb1PdHVw"&gt;&lt;img src="http://lh5.ggpht.com/_E0EaaGGWB9c/STJ80bolYbI/AAAAAAAAAGs/pQAeECpUf98/s288/Screenshot.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial,sans-serif; font-size: 11px; text-align: right;"&gt;From &lt;a href="http://picasaweb.google.it/lethalman88/GNOME"&gt;GNOME&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;FreeSpeak is a GNOME frontend to online translator engines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3181292721040009284?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3181292721040009284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3181292721040009284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3181292721040009284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3181292721040009284'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/11/freespeak-gains-translation-suggestions.html' title='FreeSpeak gains translation suggestions'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_E0EaaGGWB9c/STJ80bolYbI/AAAAAAAAAGs/pQAeECpUf98/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3067777568285553030</id><published>2008-11-28T03:57:00.000-08:00</published><updated>2008-11-28T04:11:27.741-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='freespeak'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>FreeSpeak 0.2.0 has been released</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://freespeak.berlios.de/screenshots/web_translation-20081123-sm.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 260px; height: 195px;" src="http://freespeak.berlios.de/screenshots/web_translation-20081123-sm.png" alt="" border="0" /&gt;&lt;/a&gt;Hello,&lt;br /&gt;after some work in these weeks now I have released a new version of &lt;a href="http://freespeak.berlios.de/"&gt;FreeSpeak&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;div style="text-align: justify;"&gt;FreeSpeak is a free (as in freedom, developed and released under the terms of GPL) frontend to online translator engines (such as Google, Yahoo, etc.). It is written in Python, it uses the GTK toolkit and some GNOME infrastructure features&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://freespeak.berlios.de/screenshots/text_translation-20081123-sm.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 260px; height: 195px;" src="http://freespeak.berlios.de/screenshots/text_translation-20081123-sm.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;It's been rewritten almost from scratch so I think there's no need to post release notes here. Anyway you can always read what changed from the old version released a couple of years ago &lt;a href="https://developer.berlios.de/project/shownotes.php?group_id=10396&amp;amp;release_id=15471"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Notice that the project homepage has been changed. The project has now moved to &lt;/span&gt;&lt;a style="font-style: italic;" href="https://developer.berlios.de/projects/freespeak/"&gt;BerliOS.de&lt;/a&gt;&lt;span style="font-style: italic;"&gt;.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3067777568285553030?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3067777568285553030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3067777568285553030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3067777568285553030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3067777568285553030'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/11/freespeak-020-has-been-released.html' title='FreeSpeak 0.2.0 has been released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1236964852296838360</id><published>2008-11-23T12:38:00.000-08:00</published><updated>2008-11-23T13:02:44.592-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='clutter'/><title type='text'>Replace GTK+ with Clutter for fun</title><content type='html'>Hello,&lt;br /&gt;lately I was having fun with &lt;a href="http://clutter-project.org"&gt;Clutter&lt;/a&gt; and Python. I've started by creating some Gtk-like widgets (such as GtkWindow, GtkBox, and GtkButton) in Clutter.&lt;br /&gt;Well, this is the result... it's a simple example of a very poor toolkit, but it works:&lt;br /&gt;&lt;table style="width: auto;" cellspacing="10"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.it/lh/photo/YjGKbSfgr4abDzfp1kbVMA"&gt;&lt;img src="http://lh4.ggpht.com/_E0EaaGGWB9c/SSm-4RThGlI/AAAAAAAAAFU/usOXqp4X4rE/s288/Screenshot-Untitled%20Window.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Try it, it's only &lt;a href="http://docs.google.com/View?docid=dhf97f7b_2z6s6sshk"&gt;one .py file source code&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1236964852296838360?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1236964852296838360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1236964852296838360' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1236964852296838360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1236964852296838360'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/11/replace-gtk-with-clutter-for-fun.html' title='Replace GTK+ with Clutter for fun'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_E0EaaGGWB9c/SSm-4RThGlI/AAAAAAAAAFU/usOXqp4X4rE/s72-c/Screenshot-Untitled%20Window.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-9029596304426955337</id><published>2008-11-16T10:01:00.000-08:00</published><updated>2008-11-16T10:33:21.098-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='dbus'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Single app instances, Python and DBus</title><content type='html'>Hello,&lt;br /&gt;&lt;a href="http://lethalman.blogspot.com/2008/10/freespeak-gtkgnome-translator.html"&gt;I'm working on&lt;/a&gt;  &lt;a href="http://home.gna.org/freespeak"&gt;FreeSpeak&lt;/a&gt; lately and I needed to run the application once per session, as it's got a trayicon and a notebook (maybe windows with an applet is better?)&lt;br /&gt;I decided to use &lt;a href="http://dbus.freedesktop.org/"&gt;DBus&lt;/a&gt; for making the application run only a single instance; when you try to open it again it won't start another process, instead it will use the already running one.&lt;br /&gt;&lt;br /&gt;This is how I would create a generic single app instance with dbus-python:&lt;br /&gt;&lt;pre style="overflow: scroll"&gt;import dbus&lt;br /&gt;import dbus.bus&lt;br /&gt;import dbus.service&lt;br /&gt;import dbus.mainloop.glib&lt;br /&gt;import gobject&lt;br /&gt;&lt;br /&gt;class Application (dbus.service.Object):&lt;br /&gt;  def __init__ (self, bus, path, name):&lt;br /&gt;    dbus.service.Object.__init__ (self, bus, path, name)&lt;br /&gt;    self.loop = gobject.MainLoop ()&lt;br /&gt;&lt;br /&gt; @dbus.service.method ("org.domain.YourApplication",&lt;br /&gt;                       in_signature='a{sv}', out_signature='')&lt;br /&gt; def start (self, options={}):&lt;br /&gt;   if self.loop.is_running ():&lt;br /&gt;     print 'instance already running'&lt;br /&gt;   else:&lt;br /&gt;     self.loop.run ()&lt;br /&gt;&lt;br /&gt;dbus.mainloop.glib.DBusGMainLoop (set_as_default=True)&lt;br /&gt;bus = dbus.SessionBus ()&lt;br /&gt;request = bus.request_name ("org.domain.YourApplication", dbus.bus.NAME_FLAG_DO_NOT_QUEUE)&lt;br /&gt;if request != dbus.bus.REQUEST_NAME_REPLY_EXISTS:&lt;br /&gt; app = Application (bus, '/', "org.domain.YourApplication")&lt;br /&gt;else:&lt;br /&gt; object = bus.get_object ("org.domain.YourApplication", "/")&lt;br /&gt; app = dbus.Interface (object, "org.domain.YourApplication")&lt;br /&gt;&lt;br /&gt;# Get your options from the command line, e.g. with OptionParser&lt;br /&gt;options = {'option1': 'value1'}&lt;br /&gt;app.start (options)&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;How it works?&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Setup the mainloop for dbus&lt;/li&gt;&lt;li&gt;Request a session bus name, so that other applications (in our case another instance of the same application) can connect to it&lt;/li&gt;&lt;li&gt;Create a new instance at path / if the bus name doesn't exist (so we are the primary owner). If it exists, then obtain the object from dbus and call the method on the remote Application object using the known interface.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The Application.start method checks if it's already running then decide what to do in both situations.&lt;/li&gt;&lt;/ol&gt;Creating a GTK+ application this way is really easy. It only needs to use the GTK+ mainloop.&lt;br /&gt;Let's suppose we want to present() the GtkWindow when the user tries to open another instance of the application:&lt;br /&gt;&lt;pre style="overflow: scroll"&gt;import dbus&lt;br /&gt;import dbus.bus&lt;br /&gt;import dbus.service&lt;br /&gt;import dbus.mainloop.glib&lt;br /&gt;import gobject&lt;br /&gt;import gtk&lt;br /&gt;import gtk.gdk&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;class Application (dbus.service.Object):&lt;br /&gt; def __init__ (self, bus, path, name):&lt;br /&gt;   dbus.service.Object.__init__ (self, bus, path, name)&lt;br /&gt;   self.running = False&lt;br /&gt;   self.main_window = gtk.Window ()&lt;br /&gt;   self.main_window.show_all ()&lt;br /&gt;&lt;br /&gt; @dbus.service.method ("org.domain.YourApplication",&lt;br /&gt;                       in_signature='', out_signature='b')&lt;br /&gt; def is_running (self):&lt;br /&gt;   return self.running&lt;br /&gt;&lt;br /&gt; @dbus.service.method ("org.domain.YourApplication",&lt;br /&gt;                       in_signature='a{sv}i', out_signature='')&lt;br /&gt; def start (self, options, timestamp):&lt;br /&gt;   if self.is_running ():&lt;br /&gt;     self.main_window.present_with_time (timestamp)&lt;br /&gt;   else:&lt;br /&gt;     self.running = True&lt;br /&gt;     gtk.main ()&lt;br /&gt;     self.running = False&lt;br /&gt;&lt;br /&gt;dbus.mainloop.glib.DBusGMainLoop (set_as_default=True)&lt;br /&gt;bus = dbus.SessionBus ()&lt;br /&gt;request = bus.request_name ("org.domain.YourApplication", dbus.bus.NAME_FLAG_DO_NOT_QUEUE)&lt;br /&gt;if request != dbus.bus.REQUEST_NAME_REPLY_EXISTS:&lt;br /&gt; app = Application (bus, '/', "org.domain.YourApplication")&lt;br /&gt;else:&lt;br /&gt; object = bus.get_object ("org.domain.YourApplication", "/")&lt;br /&gt; app = dbus.Interface (object, "org.domain.YourApplication")&lt;br /&gt;&lt;br /&gt;# Get your options from the command line, e.g. with OptionParser&lt;br /&gt;options = {'option1': 'value1'}&lt;br /&gt;app.start (options, int (time.time ()))&lt;br /&gt;if app.is_running ():&lt;br /&gt; gtk.gdk.notify_startup_complete ()&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;How it works?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let's say we're running the Application for the first time, the loop begins and when it ends &lt;span style="font-weight: bold;"&gt;running&lt;/span&gt; is set to False, so gtk.gdk.notify_startup_complete() won't be called. Instead, if the application is already running, start() will be called on the remote object running the loop. The method then returns immediately so gtk.gdk.notify_startup_complete() will be called.&lt;br /&gt;If you don't notify to the launcher that the startup is complete... guess what happens to your mouse and to your taskbar panel...&lt;br /&gt;&lt;br /&gt;If the loop is running, the window is presented to the user with a little delay. If you don't use any timestamp, the UI interaction won't let the window have the time to be presented.&lt;br /&gt;&lt;br /&gt;Of course, you can use DBus for many more things, like both setting options from the command line, as explained in the above code, and let other applications communicate with yours and viceversa.&lt;br /&gt;Nowadays almost all systems use DBus, so it won't be a pain to add such dependency. In my opinion, it would be much more painful to use lock files, FIFO, unix sockets or whatever. FreeSpeak used such old technologies and it was a very poor emulation of what DBus already offers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-9029596304426955337?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/9029596304426955337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=9029596304426955337' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/9029596304426955337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/9029596304426955337'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/11/single-app-instances-python-and-dbus.html' title='Single app instances, Python and DBus'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1392655129808782703</id><published>2008-10-20T13:39:00.000-07:00</published><updated>2008-10-20T13:43:41.082-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social'/><title type='text'>ping.fm is dead</title><content type='html'>Hello,&lt;br /&gt;lately I've been using &lt;a href="http://ping.fm"&gt;ping.fm&lt;/a&gt; for a couple of weeks because I've found it really useful.&lt;br /&gt;Today I've tried to update my status through sending a mail but I received delivery failures... I then discovered that ping.fm is dead!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1392655129808782703?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1392655129808782703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1392655129808782703' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1392655129808782703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1392655129808782703'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/10/pingfm-is-dead.html' title='ping.fm is dead'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-2402047531148597923</id><published>2008-10-14T14:31:00.001-07:00</published><updated>2008-10-14T14:53:14.614-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>FreeSpeak, a GTK+/GNOME translator</title><content type='html'>Hello,&lt;br /&gt;I've worked on &lt;a href="http://home.gna.org/freespeak"&gt;FreeSpeak&lt;/a&gt; a couple of years ago, a Python/GTK+/GNOME project to translate text and web pages by querying already existing online translation tools.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PRO&lt;/span&gt;: It has been packed for Ubuntu and it has been publicized by a journal in Italy.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CONS&lt;/span&gt;: It has been discontinued until now. In fact I restarted the project and I'm doing a huge refactoring because of the ugly code I wrote in the past.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3201/2942062117_d9a5d6f7a9_o.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://farm4.static.flickr.com/3201/2942062117_d9a5d6f7a9_o.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's already working, but some features are still missing.&lt;br /&gt;The new approach will allow applications to use FreeSpeak as a Python library to embed the translation widgets.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3218/2942062119_876e3eea9d_o.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://farm4.static.flickr.com/3218/2942062119_876e3eea9d_o.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Contact me if you intend to &lt;span style="font-weight: bold;"&gt;help the proje&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;ct&lt;/span&gt; with suggestions, bug reports, critiques and coding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-2402047531148597923?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/2402047531148597923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=2402047531148597923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2402047531148597923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2402047531148597923'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/10/freespeak-gtkgnome-translator.html' title='FreeSpeak, a GTK+/GNOME translator'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-6900186416222043353</id><published>2008-10-10T09:12:00.000-07:00</published><updated>2008-10-10T09:13:09.115-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>How to contribute to APT</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-6900186416222043353?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wiki.debian.org/Teams/Apt' title='How to contribute to APT'/><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/6900186416222043353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=6900186416222043353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6900186416222043353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6900186416222043353'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/10/how-to-contribute-to-apt.html' title='How to contribute to APT'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-4927981678401875884</id><published>2008-09-11T00:59:00.000-07:00</published><updated>2008-09-11T01:10:46.379-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Debian Get Satisfaction</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://getsatisfaction.com/debian"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://1.static.getsatisfaction.com/images/logo.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hello,&lt;br /&gt;lately I've found &lt;a href="http://getsatisfaction.com/"&gt;getsatisfaction&lt;/a&gt;, a social web2 free customer support for all companies and products.&lt;br /&gt;Of course, what have I done is to look for the &lt;a href="http://getsatisfaction.com/debian"&gt;Debian company&lt;/a&gt;. Well it's there, but unused.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Easy for novice users to ask and find answers there.&lt;/li&gt;&lt;li&gt;You can share you ideas and get help&lt;/li&gt;&lt;li&gt;Report problems and get help on bug reporting&lt;/li&gt;&lt;li&gt;General and specific discussion&lt;/li&gt;&lt;li&gt;Subdivide the service in variuos products (for examples ports and distributions)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-4927981678401875884?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/4927981678401875884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=4927981678401875884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4927981678401875884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4927981678401875884'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/09/debian-get-satisfaction.html' title='Debian Get Satisfaction'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7185143944963939143</id><published>2008-09-08T10:20:00.000-07:00</published><updated>2008-09-08T10:26:43.152-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>GTK Apps to replace Gnome Files</title><content type='html'>Hello,&lt;br /&gt;everyone knows that gnomefiles has went offline with that boring redirect to osnews.com.&lt;br /&gt;Now many people is looking toward &lt;a href="http://gtk-apps.org/"&gt;gtk-apps.org&lt;/a&gt;, I didn't know it before. It's looking really good.&lt;br /&gt;The only problems is that I had (and I guess I'm not the only one) a few unmaintained projects on gnomefiles and they are now lost.&lt;br /&gt;I'm wondering if it will be publicized a day by gtk.org to be something more official.&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Inserisci link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7185143944963939143?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7185143944963939143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7185143944963939143' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7185143944963939143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7185143944963939143'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/09/gtk-apps-to-replace-gnome-files.html' title='GTK Apps to replace Gnome Files'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-308724798758423126</id><published>2008-08-23T02:24:00.000-07:00</published><updated>2008-08-23T02:29:59.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social'/><title type='text'>Where are you? Yahoo! Fire Eagle</title><content type='html'>Hello,&lt;br /&gt;the Twitter question was "What are you doing?". The new question is now "&lt;span style="font-weight: bold;"&gt;Where are you?&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Yahoo! has launched a sort of social application called &lt;a href="http://fireeagle.yahoo.net/"&gt;Fire Eagle&lt;/a&gt; for updating your location and &lt;span style="font-weight: bold;"&gt;share it across other web services&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-308724798758423126?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/308724798758423126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=308724798758423126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/308724798758423126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/308724798758423126'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/08/where-are-you-yahoo-fire-eagle.html' title='Where are you? Yahoo! Fire Eagle'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3397192508007129471</id><published>2008-08-16T17:07:00.000-07:00</published><updated>2008-08-16T17:17:19.839-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><title type='text'>Cincom Industry Misinterpretations reached the 100th podcast</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos-a.ak.facebook.com/photos-ak-sf2p/v108/244/76/525409045/n525409045_99440_9625.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 320px;" src="http://photos-a.ak.facebook.com/photos-ak-sf2p/v108/244/76/525409045/n525409045_99440_9625.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Hello,&lt;br /&gt;I'm listening to the &lt;a href="http://www.cincomsmalltalk.com/userblogs/cincom/blogView?content=podcasts"&gt;Industry Misinterpretations&lt;/a&gt; podcasts (though my English is so poor to understand only a few words) and now they reached the &lt;a href="http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;amp;printTitle=Industry_Misinterpretations_100:_Where_We_Are&amp;amp;entry=3396344188"&gt;century mark&lt;/a&gt;. They're managing an account on &lt;a href="http://www.podcastalley.com/podcast_details.php?pod_id=39824"&gt;Podcast Alley.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3397192508007129471?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3397192508007129471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3397192508007129471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3397192508007129471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3397192508007129471'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/08/cincom-industry-misinterpretations.html' title='Cincom Industry Misinterpretations reached the 100th podcast'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8285046754428830692</id><published>2008-08-16T04:05:00.000-07:00</published><updated>2008-08-18T06:49:10.005-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><title type='text'>Interviewed by Clubsmalltalk</title><content type='html'>Hello,&lt;br /&gt;lately I've been &lt;a href="http://www.clubsmalltalk.org/web/index.php?option=com_content&amp;amp;view=article&amp;amp;id=107:luca-bruno-the-creator-of-smalltalk-yx&amp;amp;catid=48:interviews-to-the-new-generation-of-smalltalkers&amp;amp;Itemid=108"&gt;interviewed&lt;/a&gt; by the new &lt;a href="http://www.clubsmalltalk.org"&gt;clubsmalltalk&lt;/a&gt;. Hey, I know, I'm not so good with English ;)&lt;br /&gt;I'm glad of this, thanks to &lt;span class="small"&gt;Hernan Galante.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8285046754428830692?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8285046754428830692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8285046754428830692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8285046754428830692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8285046754428830692'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/08/interviewed-by-clubsmalltalk.html' title='Interviewed by Clubsmalltalk'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-781180976374280133</id><published>2008-08-16T03:28:00.001-07:00</published><updated>2008-08-16T03:30:37.916-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='last.fm'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Vagalume, GTK+ and Last.fm</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/28048776@N05/2767815482/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3032/2767815482_837e8a47cc_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-top: 0px;font-size:0;" &gt;&lt;a href="http://www.flickr.com/photos/28048776@N05/2767815482/"&gt;Vagalume, GTK+ and Last.fm&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/28048776@N05/"&gt;Lethalman&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;I've found this great gstreamer application to listen to the &lt;a href="http://last.fm"&gt;last.fm&lt;/a&gt; stations. It &lt;span style="font-weight: bold;"&gt;works perfectly&lt;/span&gt;, fully functional and up-to-date. Features several IM status updates, including telepathy. &lt;span style="font-style: italic;"&gt;It's definitely good-looking with my dark theme&lt;/span&gt;.&lt;br /&gt;Homepage: &lt;a href="http://vagalume.igalia.com/"&gt;http://vagalume.igalia.com/&lt;/a&gt;&lt;br /&gt;Last.fm group: &lt;a href="http://www.last.fm/group/Vagalume"&gt;http://www.last.fm/group/Vagalume &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-781180976374280133?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/781180976374280133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=781180976374280133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/781180976374280133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/781180976374280133'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/08/vagalume-gtk-and-lastfm.html' title='Vagalume, GTK+ and Last.fm'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3032/2767815482_837e8a47cc_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3677829233581737741</id><published>2008-08-11T13:41:00.000-07:00</published><updated>2008-08-11T14:06:20.472-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Compiz with ATI RS480 on Debian</title><content type='html'>Hello,&lt;br /&gt;after years that compositing has been introduced in our desktop, it's finally come the time to try it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Uninstall fglrx&lt;/span&gt;&lt;br /&gt;My video card is not supported very well with Mesa 7.0.x, in fact I've been using the fglrx driver for a long time.... until now!&lt;br /&gt;I had to manually dpkg --purge all the related packages.&lt;br /&gt;Now it's better to rmmod fglrx.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Install mesa 7.1 from experimental&lt;/span&gt;&lt;br /&gt;On #compiz-fusion some guys hinted me I should have used Mesa 7.1rc because of recent improvements on my video card. The only way to get such version was to include experimental sources.&lt;br /&gt;Ok, no problem, if it doesn't work I can downgrade back to the previous one.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Upgrade xorg to experimental&lt;/span&gt;&lt;br /&gt;But there're still problems, I had to upgrade to the latest xorg in experimental because of mesa compatibility. In fact AIGLX couldn't load DRI drivers because of missing symbols.&lt;br /&gt;I had to dpkg -l|grep xorg the install the one by one. I did pray for everything to work, really.&lt;br /&gt;Now backup xorg.conf and go ahead with &lt;span style="font-style: italic;"&gt;X -configure&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Install compizconfig-settings-manager&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;and compiz-fusion-plugins-extra&lt;/span&gt;&lt;br /&gt;For some reason, the first time I've tried running compiz it's gone Segmentation Fault. On the IRC channel they hinted me to install the crash handler plugin to back track the error. After installing such packages, magically compiz --replace worked!&lt;br /&gt;Now I have a GNOME Desktop with the Blue-Joy theme and the Avant Window Navigator.&lt;br /&gt;&lt;br /&gt;Everything both nice and unuseful, but now I understand how eye-candy fancy stuff can change your desktop.&lt;br /&gt;&lt;br /&gt;Before the war:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/28048776@N05/2742075004/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px;" src="http://farm4.static.flickr.com/3168/2742075004_d0a88922ee_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/28048776@N05/2754820348/"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px;" src="http://farm4.static.flickr.com/3165/2754820348_85fb12791f_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3677829233581737741?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3677829233581737741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3677829233581737741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3677829233581737741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3677829233581737741'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/08/compiz-with-ati-rs480-on-debian.html' title='Compiz with ATI RS480 on Debian'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3168/2742075004_d0a88922ee_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7806889574692182899</id><published>2008-08-07T10:24:00.001-07:00</published><updated>2008-08-07T10:24:47.953-07:00</updated><title type='text'>iStream</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/28048776@N05/2742054128/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3233/2742054128_f054fa1a50_m.jpg" alt="" style="border: solid 2px #000000;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.9em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/28048776@N05/2742054128/"&gt;iStream&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/28048776@N05/"&gt;Lethalman&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;Very useful applet for listening to the radio. It lacks a perferences dialog, but it's still nice.&lt;br clear="all" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7806889574692182899?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7806889574692182899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7806889574692182899' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7806889574692182899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7806889574692182899'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/08/istream.html' title='iStream'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3233/2742054128_f054fa1a50_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1369213809141978643</id><published>2008-08-07T10:09:00.001-07:00</published><updated>2008-08-07T10:12:04.126-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Gnome main menu</title><content type='html'>&lt;div style="float: right; margin-left: 10px; margin-bottom: 10px;"&gt;&lt;a href="http://www.flickr.com/photos/28048776@N05/2742014426/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3250/2742014426_904aaec3ba_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="margin-top: 0px;font-size:0;" &gt;&lt;a href="http://www.flickr.com/photos/28048776@N05/2742014426/"&gt;Gnome main menu&lt;/a&gt;&lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/28048776@N05/"&gt;Lethalman&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;Hello,&lt;br /&gt;while I was playing with apt-cache I've discovered a new kind of main menu in GNOME. It's being developed by SuSE. It feels nice, robust and innovative.&lt;br /&gt;The screenshot is showing the documents tab.&lt;br /&gt;To install, aptitude install gnome-main-menu and add the new applet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1369213809141978643?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1369213809141978643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1369213809141978643' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1369213809141978643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1369213809141978643'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/08/gnome-main-menu.html' title='Gnome main menu'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3250/2742014426_904aaec3ba_t.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-319527113039025370</id><published>2008-08-07T09:07:00.001-07:00</published><updated>2008-08-07T09:18:07.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>kqemu on Debian amd64</title><content type='html'>Hello,&lt;br /&gt;I've been using &lt;a href="http://en.wikipedia.org/wiki/Qemu"&gt;qemu&lt;/a&gt; a lot lately because I'm creating an usb hdd with &lt;a href="http://debian-live.alioth.debian.org"&gt;debian live&lt;/a&gt;.&lt;br /&gt;The image contains a system running postgresql, development packages for gtk and python and gnome-core . All this ends up loading in more than 5 minutes, this is really boring.&lt;br /&gt;&lt;br /&gt;Then I begun looking for a faster virtualization system, and found &lt;a href="http://kvm.qumranet.com/kvmwiki"&gt;KVM&lt;/a&gt;. Unfortunately my processor hasn't the right flag for it.&lt;br /&gt;&lt;br /&gt;Finally I found &lt;a href="http://en.wikipedia.org/wiki/KQEMU#Accelerator"&gt;&lt;span style="font-weight: bold;"&gt;kqemu&lt;/span&gt;&lt;/a&gt;, which is a module for the kernel that speeds up a lot qemu. I never thought it could speed up things...... so.... &lt;span style="font-weight: bold;"&gt;much&lt;/span&gt;!&lt;br /&gt;Let's install it:&lt;br /&gt;&lt;blockquote&gt;m-a a-i kqemu&lt;br /&gt;modprobe kqemu&lt;/blockquote&gt;That's it, for those who owns an amd64 processor, this is the right way to use kqemu:&lt;br /&gt;&lt;blockquote&gt;qemu-system-x86_64 -kernel-kqemu [your options]&lt;br /&gt;&lt;/blockquote&gt;You shouldn't get any error, if you do... boh.&lt;br /&gt;&lt;br /&gt;The image now boots in 33 seconds down to the bottom init scripts, and GNOME works only with a slight delay but it's definitely a great speed up. &lt;span style="font-style: italic;"&gt;With the real machine, I enter gnome in about 40 seconds.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Keep going the good work Qemu team, and thanks as usual to everyone who helped me on IRC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-319527113039025370?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/319527113039025370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=319527113039025370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/319527113039025370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/319527113039025370'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/08/kqemu-on-debian-amd64.html' title='kqemu on Debian amd64'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-117071991773981470</id><published>2008-08-06T09:08:00.000-07:00</published><updated>2008-08-06T09:45:25.590-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Debian and zd1211 wifi</title><content type='html'>Hello,&lt;br /&gt;I'm using debian lenny and I've got these two problems:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;With versions of the linux kernel prior to 2.6.20 (maybe) I could install zd1211 firmware using the module-assistant which has been now dropped from testing and unstable.&lt;/li&gt;&lt;li&gt;Boot process slowed down by 30 seconds and couldn't plug-in the usb pen because udev/hal screw up&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What I've done is to remove the source and its created firmware, with the one shipped with testing and unstable (&lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=411912"&gt;bug #411912&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;aptitude remove --purge zd1211-firmware zd1211-source&lt;br /&gt;aptitude update&lt;br /&gt;m-a clean zd1211&lt;br /&gt;aptitude install zd1211-firmware&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Now let's fix the hotplug part, open /etc/udev/rules.d/z25_persistent-net.rules and remove similar lines:&lt;br /&gt;&lt;blockquote&gt;# USB device 0ace:1215 (zd1211rw)&lt;br /&gt;SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:1d:0f:b3:66:f7", NAME="eth2"&lt;/blockquote&gt;Now try to detach and reattach your usb pen and everything should magically work.&lt;br /&gt;&lt;br /&gt;Thanks to &lt;span style="font-weight: bold;"&gt;Nss&lt;/span&gt; (#debianizzati), &lt;span style="font-weight: bold;"&gt;dcbw&lt;/span&gt; NetworkManager developer and &lt;span style="font-weight: bold;"&gt;gsimmons&lt;/span&gt; (#debian).&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-117071991773981470?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/117071991773981470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=117071991773981470' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/117071991773981470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/117071991773981470'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/08/debian-and-zd1211-wifi.html' title='Debian and zd1211 wifi'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5247994578184607279</id><published>2008-07-13T07:00:00.001-07:00</published><updated>2008-07-13T07:12:52.545-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><title type='text'>Syx gaining more stability and speed</title><content type='html'>Hello,&lt;br /&gt;in the new branches of Syx (an open source Smalltalk-80 implementation) we're working to try a new kind of memory management and add many features that have been missed until now to focus on other stuff.&lt;br /&gt;&lt;br /&gt;The new faster and more modern v0.1.8 release will contain the following refactoring:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Objects will be variable-length (minumum 12 bytes on 32-bit processors and 16 bytes on 64-bit processors)&lt;/li&gt;&lt;li&gt;By changing the objects also the GC changed to a mark and compact GC&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Threaded-switch statement to run processes&lt;/li&gt;&lt;li&gt;More efficient method cache (maybe a simple global cache lookup for this release)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;API for primitives will only change slightly.&lt;br /&gt;&lt;br /&gt;Suggestions for any new particular technologies are welcome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5247994578184607279?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5247994578184607279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5247994578184607279' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5247994578184607279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5247994578184607279'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/07/syx-gaining-more-stability-and-speed.html' title='Syx gaining more stability and speed'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7950794001135657414</id><published>2008-07-03T10:35:00.000-07:00</published><updated>2008-07-03T10:45:17.968-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>identi.ca is worse</title><content type='html'>Hello,&lt;br /&gt;I'm using Twitter in this week and the API works "almost" perfectly while the website is down most of the time.&lt;br /&gt;I've recently heard about identi.ca, so I decided to try it.&lt;br /&gt;My first impression was bad, because I've seen many redirects of the page, and DNS changes sometimes.&lt;br /&gt;But ok, I tried to register and again... I had problems. When I submitted the registration &lt;span style="font-weight: bold;"&gt;twice&lt;/span&gt; it just did &lt;span style="font-weight: bold;"&gt;nothing&lt;/span&gt;.&lt;br /&gt;I then waited for a couple of hours then I've been registered to identi.ca.&lt;br /&gt;&lt;br /&gt;Once I tuned all my account settings, the service &lt;span style="font-weight: bold;"&gt;has gone down&lt;/span&gt;. What happened? Too many twitterers have switched and now identi.ca is out of service? In the while Twitter has magically reopened its gate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7950794001135657414?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7950794001135657414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7950794001135657414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7950794001135657414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7950794001135657414'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/07/identica-is-worse.html' title='identi.ca is worse'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5292303222764461771</id><published>2008-06-30T01:16:00.000-07:00</published><updated>2008-06-30T02:02:11.246-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>New debian tool proposal</title><content type='html'>Hello,&lt;br /&gt;this is my second post about Debian. I'm lately discovering all the tools for both managing my Debian system and creating packages.&lt;br /&gt;dh_make is the first tool I've used for the "first debianization" (called so by the New maintainers' guide) which creates a basic template for your package.&lt;br /&gt;Anyway after a few packagings I've seen that something redundant could be automatized further.&lt;br /&gt;What I suggest is a tool that does the following stuff after dh_make has been called:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;First dpkg-buildpackage -rfakeroot&lt;/li&gt;&lt;li&gt;Check for libraries and binaries and create new packages in debian/control&lt;/li&gt;&lt;li&gt;Find docs in usr/shared and modify the doc-base&lt;/li&gt;&lt;li&gt;Check for .desktop files and .xpm then create menu&lt;/li&gt;&lt;li&gt;Find info and manpages files&lt;/li&gt;&lt;li&gt;Obtain copyright from COPYING/LICENSE and such, authors from AUTHORS and so on&lt;/li&gt;&lt;li&gt;Find ITP on BTS and fill in the bug number in the changelog&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rebuild the project&lt;/li&gt;&lt;li&gt;Check for lintian errors and warnings and try to fix them (such as empty directories, wrong library name, etc.)&lt;/li&gt;&lt;/ol&gt;I'm sorry if I'm missing any files such as init.d or cron.d but I'm still newbie with packaging and I haven't tried all the stuff yet.&lt;br /&gt;How this tool sounds to you? Would it be useful and easy to make at least for simple autotooled projects?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5292303222764461771?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5292303222764461771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5292303222764461771' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5292303222764461771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5292303222764461771'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/06/new-debian-tool-proposal.html' title='New debian tool proposal'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3540012800983995602</id><published>2008-06-07T14:18:00.001-07:00</published><updated>2008-06-07T14:20:58.864-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><title type='text'>Syx 0.1.7 has been released</title><content type='html'>Hello,&lt;br /&gt;after several months a new version of Syx has been released. This release contains mostly VM changes and some changes to the Smalltalk Collections. As usual, release notes follow:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This versions enhances a new version of the interpreter, major updates to the scheduler, and as usual a lot of bug fixes. Syx left the Google Code SVN repositories because of many connection problems. &lt;/p&gt;&lt;p&gt;You can find informations about the new GIT repository here: &lt;a href="http://code.google.com/p/syx/wiki/GitSource?tm=4" rel="nofollow"&gt;http://code.google.com/p/syx/wiki/GitSource?tm=4&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Installation instructions: &lt;a href="http://code.google.com/p/syx/wiki/InstallationInstructions" rel="nofollow"&gt;http://code.google.com/p/syx/wiki/InstallationInstructions&lt;/a&gt; &lt;/p&gt;&lt;p&gt;API and environment: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;SYX_ROOT_PATH and SYX_PLUGIN_PATH environment variables have been introduced. &lt;/li&gt;&lt;li&gt;Process and context creation changed. &lt;/li&gt;&lt;li&gt;New functions have been added for the scheduler, for manually do events iteration and adding idle functions to wake up semaphores. &lt;/li&gt;&lt;li&gt;Startup responsibility has been dropped from libsyx. &lt;/li&gt;&lt;li&gt;Added syx errors for system signals to be used with syx_signal. &lt;/li&gt;&lt;li&gt;Image recovering has been fixed. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Smalltalk: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Covered several standard methods for Collections, Numbers and Object printing/storing. &lt;/li&gt;&lt;li&gt;Error reporting from the VM now drops the exception to the Smalltalk environment when    the interpreter is running. &lt;/li&gt;&lt;li&gt;Random class has been added. &lt;/li&gt;&lt;li&gt;Signal handling improvements for the GTK+ plugin. &lt;/li&gt;&lt;li&gt;#display family methods have been introduced for Smalltalk objects. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Interpreter: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;System signal handling has been improved. &lt;/li&gt;&lt;li&gt;Cache hash code of Symbols. &lt;/li&gt;&lt;li&gt;The interpreter has been refactored to use one stack per Process. &lt;/li&gt;&lt;li&gt;Contexts are now created only on demand. &lt;/li&gt;&lt;li&gt;Optimized Symbols creation. &lt;/li&gt;&lt;li&gt;Signal class has been abstracted. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Parser: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;The parser have been changed for handling new interpreter specifications. &lt;/li&gt;&lt;li&gt;Several fixes to the parser for special cases. &lt;/li&gt;&lt;li&gt;Fixed blocks scope. &lt;/li&gt;&lt;li&gt;Support &lt;- assignment. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Image: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Image snapshot will nullify C pointers &lt;/li&gt;&lt;li&gt;Image format has been changed for handling new interpreter specifications. &lt;/li&gt;&lt;li&gt;Handle internal interpreter C pointers to be restored the right way. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Scheduler: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Different behavior of the scheduler for POSIX and Windows systems has been introduced. &lt;/li&gt;&lt;li&gt;Scheduler external idle sources have been added. &lt;/li&gt;&lt;li&gt;Asyncronous command line and GTK+ loop using semaphores. This leads to dropping readline. &lt;/li&gt;&lt;li&gt;A simple round robin scheduler has been added. &lt;/li&gt;&lt;li&gt;Dropped image saving of POSIX fd poll &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Documentation: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Added lots of new comments. &lt;/li&gt;&lt;li&gt;Started documentation project including a manual still under development and a manpage. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Thanks to everyone contributing to the project.&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;See the &lt;a href="http://repo.or.cz/w/syx.git?a=blob;f=ChangeLog;hb=0.1.7" rel="nofollow"&gt;ChangeLog&lt;/a&gt; for a complete list of things that changed. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3540012800983995602?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3540012800983995602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3540012800983995602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3540012800983995602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3540012800983995602'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/06/syx-017-has-been-released.html' title='Syx 0.1.7 has been released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7421118940829724906</id><published>2008-05-23T14:00:00.000-07:00</published><updated>2008-06-30T01:14:16.438-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='gtk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>Syx, GTK+ and threading</title><content type='html'>Hello,&lt;br /&gt;you all know that Gtk+ has locks for the GUI when dealing with the X server and prevent async events to be sent. This is done by manually acquiring/releasing the lock on Gdk. Many Gtk+ ports don't do this automatically.&lt;br /&gt;&lt;br /&gt;Syx used gtk_main() into a thread and automatically put gdk enter/leave for each function in its wrapper. It would be somewhat ugly in Smalltalk code having to enter/leave each time.&lt;br /&gt;Of course, on Windows everything leads to troubles with threads.&lt;br /&gt;&lt;br /&gt;But Smalltalk has Processes, handled by an internal scheduler. I decided then to not create a thread but cycle through Gtk+ events in the scheduler itself. Now everything works correctly.&lt;br /&gt;&lt;br /&gt;Difference with other wrappers? The way Smalltalk is thought let you perform multi-tasking without the need to use OS threads, which means no problems on Windows and no need to take care of the Gdk lock everytime.&lt;br /&gt;&lt;br /&gt;In addition, I rewrote part of the Console (Smalltalk-side) to be asyncronous using Semaphores. Now you can work on widgets after you run Gtk main! A small example:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;Smalltalk YX 0.1.7 is ready.&lt;br /&gt;Type "help!" to get help.&lt;br /&gt;&gt; Smalltalk loadPlugin: 'gtk'!&lt;br /&gt;true&lt;br /&gt;&gt; | w |&lt;br /&gt;&gt; w := GtkWindow new.&lt;br /&gt;&gt; Gtk main.&lt;br /&gt;&gt; w add: (GtkLabel new: 'hello').&lt;br /&gt;&gt; w showAll!&lt;br /&gt;a GtkWindow&lt;br /&gt;&lt;/blockquote&gt;You can imagine the result ;)&lt;br /&gt;If you want to try it out you can download the &lt;a href="http://repo.or.cz/w/syx.git?a=snapshot;h=scheduler;sf=tgz"&gt;scheduler branch snapshot&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Stay tuned for next 0.1.7 release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7421118940829724906?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7421118940829724906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7421118940829724906' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7421118940829724906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7421118940829724906'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/05/syx-gtk-and-threading.html' title='Syx, GTK+ and threading'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-4330241766353077493</id><published>2008-05-02T01:56:00.000-07:00</published><updated>2008-05-02T03:08:03.634-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><title type='text'>Syx Manual</title><content type='html'>Hello,&lt;br /&gt;I report the &lt;a href="http://groups.google.com/group/syx-discuss/browse_thread/thread/d8a77c3c3042087d"&gt;post on the mailing list&lt;/a&gt; below:&lt;br /&gt;&lt;br /&gt;Hello,&lt;br /&gt;with the next release 0.1.7, once I get a working interpreter and updated all the parts of Syx,&lt;br /&gt;I will move output of doxygen to doc/reference and start a texinfo manual in doc/manual.&lt;br /&gt;&lt;p&gt;My idea is to have this kind of manual:&lt;br /&gt;1) What is Smalltalk&lt;br /&gt;2) Why Smalltalk YX&lt;br /&gt;3) Introduction to the language&lt;br /&gt;4) Introduction the Syx environment&lt;br /&gt;5) COMPLETE Class and methods documentation, EACH non private method will be documented with examples&lt;br /&gt;and EACH class will have usage examples&lt;br /&gt;6) Embedding&lt;br /&gt;7) Advanced topics, internal documentation&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I know it's not the time yet for Smalltalk YX to get such documentation but I think it will be&lt;br /&gt;a nice boost for the project and also for the entire Smalltalk community.&lt;br /&gt;Since I don't have such fantasy now I will start directly with all except the 5th topic.&lt;br /&gt;&lt;/p&gt;Any hint will be appreciated.&lt;br /&gt;Bye.&lt;br /&gt;&lt;br /&gt;EDIT:&lt;br /&gt;The Smalltalk reference will be created automatically from Smalltalk itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-4330241766353077493?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/4330241766353077493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=4330241766353077493' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4330241766353077493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4330241766353077493'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/05/syx-manual.html' title='Syx Manual'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-2660709068879544499</id><published>2008-04-22T11:55:00.000-07:00</published><updated>2008-04-22T12:12:04.909-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='debian'/><title type='text'>Time for Debian</title><content type='html'>Hello,&lt;br /&gt;I switched to Debian lately and i think it will become my preferred distribution.&lt;br /&gt;I started with Slackware, then an LFS and then Gentoo. I never found them definitive for me.&lt;br /&gt;&lt;br /&gt;I used Slackware by compiling sources most of all, then i didn't see any reason to continue using it.&lt;br /&gt;&lt;br /&gt;The LFS came since my new PC as a test, and as long I could maintain it I had no problems and had fun with it.&lt;br /&gt;&lt;br /&gt;I then installed Gentoo when i got my first DSL. But the updates are slow for lack of testing, I'm on an amd64. I tried to contribute someway but for the time I've been using it I never seen a open and innovative development (not in the sense that it wasn't friendly). And also, I've seen many developers leaving the project.&lt;br /&gt;&lt;br /&gt;In other words, I "almost" used always source-based distribution. All the time I tried other binary-based distribution also to change my way of linux-life, like OpenSUSE, Ubuntu, Kubuntu, Foresight, and so on but no one satisfied me.&lt;br /&gt;&lt;br /&gt;Then i wanted to try Debian, hoping it was different than Ubuntu. And in fact it is!&lt;br /&gt;What I like of Debian is it's very high QA, how new users deal with bugs, how stable it is, how the BTS work, how the packaging works (eventough there are lots of useful tools I still don't know), the rapid updates, the security.&lt;br /&gt;&lt;br /&gt;The thing I dislike from other distribution is that they release new stable versions but that are not so stable at first. For example i had troubles with the package manager with both Ubuntu and Foresight. Boot problems with Ubuntu, several crashes with Foresight, and so on.&lt;br /&gt;&lt;br /&gt;But, I don't want to say Debian is now my preferred distro (I'm still afraid of binaries), but this is the good way and hopefully the last choice. Go Debian!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-2660709068879544499?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/2660709068879544499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=2660709068879544499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2660709068879544499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2660709068879544499'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/04/time-for-debian.html' title='Time for Debian'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5226152120294103321</id><published>2008-04-15T02:51:00.000-07:00</published><updated>2008-04-15T02:52:21.761-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><title type='text'>Smalltalk YX toward a new interpreter</title><content type='html'>Hello,&lt;br /&gt;Smalltalk YX is currently working on refactoring a part of the interpreter, relative to contexts and stack management.&lt;br /&gt;The current version uses one stack per process but always create contexts for each method or block entered.&lt;br /&gt;The new branch, called &lt;span style="font-weight: bold;"&gt;newinterp&lt;/span&gt;, won't create those contexts anymore but they will be created only on-demand (e.g. thisContext). This means both less resources and garbage collector usage, and a possible speedup.&lt;br /&gt;&lt;br /&gt;More informations on the &lt;a href="http://groups.google.com/group/syx-discuss/browse_thread/thread/6181dac94bac1cc4"&gt;mailing list here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5226152120294103321?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5226152120294103321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5226152120294103321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5226152120294103321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5226152120294103321'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/04/smalltalk-yx-toward-new-interpreter.html' title='Smalltalk YX toward a new interpreter'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-590057738060219960</id><published>2008-01-07T03:21:00.000-08:00</published><updated>2008-01-07T03:35:29.251-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><title type='text'>Smalltalk YX 0.1.6 has been released</title><content type='html'>Hello,&lt;br /&gt;as usual these release notes follows.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a id="Released_Syx_0.1.6_version"&gt;This is a major bug fixes release, but introduce as usual many features. First of all this release put the GNU build (autotools) as first build system, and SCons as secondary which is still useful for MingW and the WinCE port. &lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a id="Released_Syx_0.1.6_version"&gt;Full GNU build support &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a id="Released_Syx_0.1.6_version"&gt;X11 plugin &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a id="Released_Syx_0.1.6_version"&gt;A basic CommandLine&lt;/a&gt; class for parsing the command line &lt;/li&gt;&lt;li&gt;Basic support for handling foreign C pointers and structs/unions from Smalltalk has been added &lt;/li&gt;&lt;li&gt;Several fixes for building on Sparc 64 using SCons &lt;/li&gt;&lt;li&gt;The -e option from command line has been added &lt;/li&gt;&lt;li&gt;Some help and Syx status will be printed in console mode &lt;/li&gt;&lt;li&gt;FileStream fileIn has been fixed &lt;/li&gt;&lt;li&gt;Class declaration from Smalltalk has been fixed &lt;/li&gt;&lt;li&gt;Lexer fixes for symbols, identifier and strings &lt;/li&gt;&lt;li&gt;FileStream now handles &lt;tt&gt;FILE*&lt;/tt&gt; instead of file descriptors and this fixed several bugs &lt;/li&gt;&lt;li&gt;System startup has been fixed when fileing in files &lt;/li&gt;&lt;li&gt;Dictionary rehashing has been fixed &lt;/li&gt;&lt;li&gt;Basic support for handling foreign C structs and unions from Smalltalk has been added &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Thanks to everyone contributing to the project.&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;See the &lt;a href="http://syx.googlecode.com/svn/tags/syx-0.1.6/ChangeLog" rel="nofollow"&gt;ChangeLog&lt;/a&gt; for a complete list of things that changed. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-590057738060219960?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/590057738060219960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=590057738060219960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/590057738060219960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/590057738060219960'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/01/smalltalk-yx-016-has-been-released.html' title='Smalltalk YX 0.1.6 has been released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1424474903845480466</id><published>2008-01-05T05:00:00.000-08:00</published><updated>2008-01-05T05:15:45.906-08:00</updated><title type='text'>Google search? No thanks, Yahoo!</title><content type='html'>Hello,&lt;p&gt;&lt;br /&gt;lately I've been searching for "maemo emulator" and "mod_python psp" and the results weren't good to me.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;If you don't trust, try the above searches (without double quotes) with both Google and Yahoo. This happens with many more searches.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;In my opinion, Google lately is lacking a good page weight system and therefore it breaks results showing for example mailing lists instead of more important web pages.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Conclusion? I'm using Yahoo! as my default search engine until Google fixes these troubles.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1424474903845480466?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1424474903845480466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1424474903845480466' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1424474903845480466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1424474903845480466'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2008/01/google-search-no-thanks-yahoo-hello.html' title='Google search? No thanks, Yahoo!'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-2812723583248238783</id><published>2007-12-25T01:14:00.000-08:00</published><updated>2007-12-25T01:16:49.781-08:00</updated><title type='text'>Merry Christmas</title><content type='html'>&lt;span style="font-style: italic; color: rgb(255, 0, 0);font-size:180%;" &gt;&lt;span style="font-weight: bold;font-family:times new roman;" &gt;Hi everyone, merry Christmas.&lt;/span&gt;&lt;/span&gt;&lt;p  style="font-weight: bold; font-style: italic; color: rgb(255, 0, 0);font-family:times new roman;"&gt;&lt;span style="font-size:180%;"&gt;Happy holidays!&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-2812723583248238783?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/2812723583248238783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=2812723583248238783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2812723583248238783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/2812723583248238783'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/12/merry-christmas-hi-everyone-merry.html' title='Merry Christmas'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5810869733852984021</id><published>2007-12-17T06:11:00.000-08:00</published><updated>2007-12-17T06:25:56.546-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><title type='text'>Hello world in console and GTK+</title><content type='html'>Hello,&lt;br /&gt;lately i received a request to show how to print Hello world from Syx and a small example on how to open a GTK+ window.&lt;br /&gt;&lt;br /&gt;Here are the two examples:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/syx/wiki/ExampleHelloWorld?updated=ExampleHelloWorld&amp;amp;ts=1197899807"&gt;&lt;/a&gt;&lt;a href="http://code.google.com/p/syx/wiki/ExampleHelloWorld"&gt;Hello World&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/syx/wiki/ExampleGtkWindow"&gt;Opening a Gtk Window&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5810869733852984021?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5810869733852984021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5810869733852984021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5810869733852984021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5810869733852984021'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/12/hello-world-in-console-and-gtk.html' title='Hello world in console and GTK+'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3294348471314327691</id><published>2007-12-14T11:04:00.000-08:00</published><updated>2007-12-14T11:09:44.381-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='syx'/><title type='text'>Syx 0.1.5 has been released</title><content type='html'>Hello,&lt;br /&gt;after a few months of low activity due to the university, i finally released the new version of &lt;a href="http://syx.googlecode.com"&gt;Syx&lt;/a&gt;. Release notes follows.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This version includes yet more features, compatibility with other build systems on different platforms, important bug fixes and a great performance boost, which will be continued in next releases. A list of the major changes: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;MSVC support has been improved &lt;/li&gt;&lt;li&gt;ANSI C and strict ISO compilation &lt;/li&gt;&lt;li&gt;External declarations for C++ &lt;/li&gt;&lt;li&gt;The ST runtime compiler has been replaced with a C-side compiler &lt;/li&gt;&lt;li&gt;Class creation issues from ST has been fixed &lt;/li&gt;&lt;li&gt;Tracebacks and error reporting have been improved &lt;/li&gt;&lt;li&gt;Install desktop files on GNU/Linux platforms &lt;/li&gt;&lt;li&gt;Support for the GNU building system has been added as an alternative to SCons &lt;/li&gt;&lt;li&gt;Build under MSYS has been fixed &lt;/li&gt;&lt;li&gt;Block ensuring has been fixed &lt;/li&gt;&lt;li&gt;New examples have been added such as web code browser and a simple GTK+ application &lt;/li&gt;&lt;li&gt;Dictionary rehashing has been fixed &lt;/li&gt;&lt;li&gt;A better implentation of OrderedCollection&lt;a href="http://code.google.com/p/syx/w/edit/OrderedCollection"&gt;?&lt;/a&gt; has been enhanced &lt;/li&gt;&lt;li&gt;Internal profiling and gprof support at compile-time &lt;/li&gt;&lt;li&gt;Created one stack per process against one stack per context &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This version breaks the API for creating new processes and contexts from C and ST too. Thanks for anyone who contributed to Syx. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3294348471314327691?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3294348471314327691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3294348471314327691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3294348471314327691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3294348471314327691'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/12/syx-015-has-been-released.html' title='Syx 0.1.5 has been released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-3408915843110629137</id><published>2007-11-20T14:46:00.000-08:00</published><updated>2007-12-14T11:04:43.106-08:00</updated><title type='text'></title><content type='html'>Finally ADSL then Gentoo&lt;br /&gt;&lt;p&gt;Hello,&lt;/p&gt;&lt;p&gt;&lt;br /&gt;i was a strong Linux From Scratch user since years.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;My small city didn't have ADSL until now. ADSL came here with the Wireless technology.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;OK, I've a low 256kb but it's better than a 56k, don't you think so? Then i started getting gentoo and compiling everything, and now I've got a complete Gnome desktop with all network working as well.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Yes, my first ADSL, my first distro!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-3408915843110629137?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/3408915843110629137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=3408915843110629137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3408915843110629137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/3408915843110629137'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/11/finally-adsl-then-gentoo-hello-i-was.html' title=''/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-6821948024669747108</id><published>2007-11-01T04:25:00.000-07:00</published><updated>2007-11-01T04:31:21.681-07:00</updated><title type='text'>Syx to run code browser over CGI</title><content type='html'>Hello,&lt;br /&gt;lately Dominic Letz in the &lt;a href="http://groups.google.com/group/syx-discuss/browse_thread/thread/35f06bb88101625d"&gt;Syx mailing list&lt;/a&gt; showed his simple version of a code browser for Syx for CGI. It has been added in the examples if you want to try it on your web server.&lt;br /&gt;&lt;br /&gt;You can find an online working version on its site: &lt;a href="http://dominicletz.de/cgi-bin/syx"&gt;http://dominicletz.de/cgi-bin/syx&lt;br /&gt;&lt;/a&gt; You can also view the source code from the SVN repository: &lt;a href="http://syx.googlecode.com/svn/trunk/examples/web/"&gt;http://syx.googlecode.com/svn/trunk/examples/web/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Currently i'm not working on &lt;a href="http://syx.googlecode.com"&gt;Syx&lt;/a&gt; so much because of lack of time, but remember the project is not dead and won't be.&lt;br /&gt;Stay tuned, a new release of Syx is coming.&lt;br /&gt;&lt;a href="http://syx.googlecode.com/svn/trunk/examples/web/"&gt;&lt;br /&gt;&lt;/a&gt;Thanks to everyone.&lt;a href="http://syx.googlecode.com/svn/trunk/examples/web/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-6821948024669747108?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/6821948024669747108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=6821948024669747108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6821948024669747108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6821948024669747108'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/11/syx-to-run-code-browser-over-cgi.html' title='Syx to run code browser over CGI'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-7907616816948151023</id><published>2007-10-13T02:48:00.000-07:00</published><updated>2007-10-13T03:06:46.282-07:00</updated><title type='text'>Syx architecture</title><content type='html'>Hello,&lt;br /&gt;did you forget Syx already?&lt;br /&gt;After many months of inactivity (that will continue unfortunately) due to my lack of time, i created two images that briefly explains how the initialization and the scheduler of &lt;a href="http://syx.googlecode.com"&gt;Smalltalk YX&lt;/a&gt; work.&lt;br /&gt;&lt;br /&gt;The initialization is explained here: &lt;a href="http://code.google.com/p/syx/wiki/InitArch"&gt;http://code.google.com/p/syx/wiki/InitArch&lt;/a&gt;&lt;br /&gt;The scheduler here: &lt;a href="http://code.google.com/p/syx/wiki/SchedulerArch"&gt;http://code.google.com/p/syx/wiki/SchedulerArch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope to obtain more time to spend on Syx, i won't leave the project anyway.&lt;br /&gt;&lt;br /&gt;Bye.&lt;br /&gt;&lt;a href="http://code.google.com/p/syx/wiki/SchedulerArch"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-7907616816948151023?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/7907616816948151023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=7907616816948151023' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7907616816948151023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/7907616816948151023'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/10/syx-architecture.html' title='Syx architecture'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-6047464686835302660</id><published>2007-08-28T10:08:00.000-07:00</published><updated>2007-08-28T10:22:17.754-07:00</updated><title type='text'>Syx on NAS Linux</title><content type='html'>Hello,&lt;br /&gt;on the Syx mailing list, Brian Zhou notified about yet another Syx platform compatibility.&lt;br /&gt;&lt;br /&gt;He said Syx worked on &lt;a href="http://nslu2-linux.org"&gt;nslu2, on both unslung (armeb linux 2.4) and slugosbe&lt;br /&gt;(armeb linux 2.6) firmware&lt;/a&gt;.&lt;br /&gt;Porting Smalltalk YX to these devices wasn't hard, in fact it doesn't need any specific patch to the sources.&lt;br /&gt;&lt;br /&gt;Of course, would be a very good news if Syx   is available in &lt;a href="http://www.nslu2-linux.org/wiki/Optware/Packages"&gt;Optware&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Thanks to Brian Zhou and to everyone are currently working on Syx.&lt;br /&gt;&lt;br /&gt;Bye.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-6047464686835302660?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/6047464686835302660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=6047464686835302660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6047464686835302660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/6047464686835302660'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/08/syx-on-nas-linux.html' title='Syx on NAS Linux'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-17428004074433365</id><published>2007-08-20T12:27:00.001-07:00</published><updated>2007-08-20T12:32:21.060-07:00</updated><title type='text'>Syx 0.1.4 has been released</title><content type='html'>Hello,&lt;br /&gt;release notes follow.&lt;br /&gt;&lt;br /&gt;A more stable VM has been reached with this version. Many features have been added for both the embedding and the environment. This version also includes the "image endianness compatibility" target of the 0.2 roadmap and a lot of wrapper methods for GTK+ with a basic GtkWorkspace.&lt;br /&gt;This is the list of the major changes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Running blocking processes inside the scheduler has been fixed&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Major fixes to the garbage collector, object finalization, number parsing and to the scheduler&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Rehashing support for hashed collections such as Dictinoary, Set and Bag&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  #perform: and #copyReplace family ANSI methods have been added&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Interval and StdIOStream classes have been added&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Missing lexer rules for quoted symbols and double quotes in strings have been added&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  ZeroDivide exception check for number division&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Comparing methods to String have been added&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  A bunch of improvements for the SyxGtk plugin&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Rehash dictionaries from C&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Visual Studio compilation and debugging support&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Useful functions for embedding Syx have been added&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Reorganized inline functions to support other compilers and use dllexport and dllimport when building the library on Windows&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Inheritance for method and block objects has been fixed&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  rootdir and plugindir Scons options have been added&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Install dependent-machine object files into libdir instead of sharedir&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Option -c has been added to syx to continue the startup sequence once filed in files from the command line&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Support for big endian machines has been completed&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  System signal handling has been added&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Print a bug report to the stdout on SIGSEGV or SIGILL containing informations on the memory state, the execution state and the traceback of the active broken Process&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Image recovery on SIGSEGV and SIGILL or through the syx --recovery option&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Scripting header (e.g. #!/usr/bin/env syx) support on fileIn&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  argumentCount check for methods and blocks has been introduced&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Documentation installation and uninstallation is now supported&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Support for 'a' and 'w+' mode with O_CREAT flag have been added to FileStream&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Several issues have been fixed for packaging binary distributions of Syx using Scons&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Getopt dependency has been removed&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;  Desktop files for Posix systems have been added&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; Syx changed its logo since previous version. The Windows installer will handle .st and .sim files.&lt;br /&gt;Roadmap for 0.5 version includes both internal and OS-level threads based schedulers, with possibly parallel computing support.&lt;br /&gt;&lt;br /&gt;Thanks for all critiques and suggestions, and a special thank to everyone who's contributing to Syx.&lt;br /&gt;&lt;br /&gt;Bye.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-17428004074433365?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/17428004074433365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=17428004074433365' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/17428004074433365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/17428004074433365'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/08/syx-014-has-been-released.html' title='Syx 0.1.4 has been released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5390531494920560059</id><published>2007-08-15T16:14:00.000-07:00</published><updated>2007-08-15T16:30:51.054-07:00</updated><title type='text'>Syx image recovering</title><content type='html'>Hello,&lt;br /&gt;lately Syx  gained system signal handling. On Segmentation Violation or Illegal Instruction, a complete traceback of the execution state, the memory state and the active process contexts being entered is printed on stdout.&lt;br /&gt;&lt;br /&gt;Sometimes, i had problems with Squeak while developing SqueakGtk, because i did interact with C   and it was easy to get into an infinite loop or a segv.&lt;br /&gt;&lt;br /&gt;In other words, sometimes these errors come  just from one Process (in the above example, i'm talking about the Gtk main loop) that break things each time you start the same image.&lt;br /&gt;&lt;br /&gt;In Syx,  i managed to automatically create a copy of the image, appending the ".recover" extension, whenever SIGSEGV or SIGILL is signaled and then remove that broken Process from being scheduled.&lt;br /&gt;Also, if this didn't work because the corruption involved the VM, you're still able to use the --recovery option from the command line.&lt;br /&gt;&lt;br /&gt;Bye.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5390531494920560059?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5390531494920560059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5390531494920560059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5390531494920560059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5390531494920560059'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/08/syx-image-recovering.html' title='Syx image recovering'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1962840931179915498</id><published>2007-08-11T14:56:00.000-07:00</published><updated>2007-08-11T15:00:43.325-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk syx development'/><title type='text'>SyxGtk vs SqueakGtk</title><content type='html'>Hello,&lt;br /&gt;a friend requested me a screenshot of syxgtk, it's the first one here:&lt;br /&gt; &lt;a href="http://code.google.com/p/syx/wiki/ScreenShots"&gt;http://code.google.com/p/syx/wiki/ScreenShots&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I would like to explain how the 'asd.st' script works:&lt;br /&gt;1) Create the window, and connect buttons with something like button when:&lt;br /&gt; #clicked send: self -&gt; #onClicked&lt;br /&gt;2) Gtk main&lt;br /&gt;2.1) This forks a process that calls a primitive&lt;br /&gt;2.1.1) The primitive create a thread in which gtk_main() will run&lt;br /&gt;2.2) Semaphore new wait (won't never be signaled this semaphore, it's used&lt;br /&gt; just to keep the process suspended so keeping Syx up if no other process&lt;br /&gt; is running)&lt;br /&gt;3) Suspend the current process. This because the console actually is in&lt;br /&gt; blocking mode, so we need to suspend the process. There's a way to let the&lt;br /&gt; console be asyncronous, already tested using Semaphores, but won't work&lt;br /&gt; with readline (any suggestion here?)&lt;br /&gt;&lt;br /&gt;Now, we connected signals to a special syxgtk marshaller, which does the&lt;br /&gt; following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;transform GValue to SyxOop&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;obtain the callback to call&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;create a new process&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;wait that process for being terminated (remember the callback is called within a OS thread)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;These i think are pure Syx callbacks, really very easy to implement for&lt;br /&gt; any other external loop.&lt;br /&gt;&lt;br /&gt;How it differs from my old SqueakGtk? Just read:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;each C call had one more redirection than in Syx, because in C calls using SWIG automatically handles self pointers by accessing instance variables&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;main loop had to be implemented in a Squeak-side method by doing the iteration manually&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;the marshaller had to forward its function to Squeak, because we can't convert from GValues to Squeak objects since we can't lookup classes&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;we save all that GValues in a special C-side stack&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;set the jump for future longjmp and call the interpreter&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;the main loop checks for callbacks, then obtain the list of arguments from that list of GValues and does its job&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;once returned from all callbacks, it's time to do the longjmp to return from the C callback&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;It was a pain, slow and moreover wasn't so safe to use setjmp/longjmp and a&lt;br /&gt; stack of callbacks.&lt;br /&gt;&lt;br /&gt;Bye.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1962840931179915498?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1962840931179915498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1962840931179915498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1962840931179915498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1962840931179915498'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/08/syxgtk-vs-squeakgtk.html' title='SyxGtk vs SqueakGtk'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-4319353424645762527</id><published>2007-08-08T11:21:00.000-07:00</published><updated>2007-08-08T11:27:56.618-07:00</updated><title type='text'>Example on how to embed Smalltalk YX</title><content type='html'>Hello,&lt;br /&gt;&lt;a href="http://code.google.com/p/syx"&gt;Smalltalk YX&lt;/a&gt; is born also to be a scripting language to embed in C/C++ applications. Lately, i was &lt;a href="http://www.debian-administration.org/articles/264"&gt;looking an article&lt;/a&gt; which briefly explains how to use Lua with C.&lt;br /&gt;&lt;br /&gt;Then, i decided to remake that article for Syx, and this is the result:&lt;br /&gt;&lt;a href="http://code.google.com/p/syx/wiki/ExampleEmbeddingLua"&gt;http://code.google.com/p/syx/wiki/ExampleEmbeddingLua&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;i&gt;The examples in the article above can be executed if you have an updated working copy of the &lt;a href="http://code.google.com/p/syx/source"&gt;source repository.&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Other examples can be found &lt;a href="http://code.google.com/p/syx/wiki/Examples"&gt;here&lt;/a&gt;. Contact me if you want to contribute to this project.&lt;br /&gt;&lt;br /&gt;Thanks to everyone, bye.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-4319353424645762527?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/4319353424645762527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=4319353424645762527' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4319353424645762527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4319353424645762527'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/08/example-on-how-to-embed-smalltalk-yx.html' title='Example on how to embed Smalltalk YX'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-8706546886374010540</id><published>2007-08-06T14:15:00.000-07:00</published><updated>2007-08-06T14:26:40.878-07:00</updated><title type='text'>SWIG module for Syx</title><content type='html'>Hello,&lt;br /&gt;lately i've been trying &lt;a href="http://www.swig.org"&gt;SWIG&lt;/a&gt; to test how much it can be useful to interface &lt;a href="http://code.google.com/p/syx"&gt;Syx&lt;/a&gt; to C/C++ libraries.&lt;br /&gt;I got a good starting point with a very simple module which wraps C declarations very well. For instance, i wrapped  many Glib/Gtk includes entirely without any problem.&lt;br /&gt;&lt;br /&gt;Since writing Smalltalk YX primitives is really easy, it wasn't a pain to create a SWIG module for it. In fact, today i wrapped almost all GtkLabel functions as well.&lt;br /&gt;&lt;br /&gt;The module    is still missing C++ wrapping methods and some other typemaps, but i hope it to be available very soon for normal usage.&lt;br /&gt;&lt;br /&gt;If anyone wants to contribute to the Syx project, please let me know.&lt;br /&gt;&lt;br /&gt;Stay tuned for the next release of Syx.&lt;br /&gt;Bye!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-8706546886374010540?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/8706546886374010540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=8706546886374010540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8706546886374010540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/8706546886374010540'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/08/swig-module-for-syx.html' title='SWIG module for Syx'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5867268829776087776</id><published>2007-07-30T08:16:00.005-07:00</published><updated>2007-07-30T08:21:21.356-07:00</updated><title type='text'>Syx 0.1.3 has been released</title><content type='html'>Hello,&lt;br/&gt;this new release of &lt;a href="http://code.google.com/p/syx"&gt;Smalltalk YX&lt;/a&gt; adds yet more support for other platforms (Windows CE), a bunch of bug fixes, and many features like the ST compiler. This is a list of what changed since previous release: &lt;br/&gt;&lt;ul&gt;&lt;li&gt;Fractions, division methods and some other match functions (floor, ceiling, quo, trunc, ...) have been added &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Some lexer issues (quotes, minus, ...) have been fixed &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Fixed garbage collection while finalizing objects &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Many ANSI methods for Character have been covered &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;First attempt to reach endianness image compatibility &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;String to Number methods and viceversa have been added &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Super messages have been fixed &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Syntax shortucts such as Object&gt;&gt;#caseOf:otherwise: have been added &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Fixed cascading parsing &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;A complete Smalltalk compiler has been added &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Support for cross-compiling and with more options have been added to Scons &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Save text of methods &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Increased initial memory size from 20000 objects to 100000 objects &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;More C functions have been documented &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;An important issue in ArrayedCollection?&gt;&gt;#replace:From:To:With: primitive has been fixed &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Access mode (read, write, read and write) to Streams and more methods to FileStreams? have been added &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;CompiledMethod? and CompiledBlock? inheritance has been reorganized &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Run Smalltalk scripts from command line &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;New plugin to wrap native Win API to create a simple WinWorkspace &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Build Syx for Windows CE with WinWorkspace running on the device &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Support for user-defined startup sequence has been added &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Support for wide-character strings has been added &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;getopt, errno, fstat, access, getenv and perror are now optional functions &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;Cross-compiling to Windows CE has been done with host=arm-wince-mingw32ce using CeGCC by disabling all configuration options. Endianness compatibility is not perfectly reached yet. &lt;br/&gt;&lt;br/&gt;See the &lt;a href="http://syx.googlecode.com/svn/tags/syx-0.1.3/ChangeLog"&gt;ChangeLog&lt;/a&gt; for a complete list of things that changed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5867268829776087776?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5867268829776087776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5867268829776087776' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5867268829776087776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5867268829776087776'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/07/syx-013-has-been-released.html' title='Syx 0.1.3 has been released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-5214544408978831611</id><published>2007-07-29T11:57:00.000-07:00</published><updated>2007-07-29T12:07:25.286-07:00</updated><title type='text'>Smalltalk YX to run on PocketPC</title><content type='html'>Hello,&lt;br /&gt;&lt;a href="http://code.google.com/p/syx/"&gt;Smalltalk YX&lt;/a&gt; is known to work on many platforms at this time. However, lately i've been working to port it on PocketPC with a small graphical workspace.&lt;br /&gt;It took me about 3 days of work but now it works very well. Cross compilation has been easily done using &lt;a href="http://www.sourceforge.net/projects/cegcc"&gt;CeGCC&lt;/a&gt; on Windows with just some changes in the VM.&lt;br /&gt;&lt;br /&gt;The only problem is that Syx needs to be installed into the root device to work, it's not working in other directories, but i think this is the last problem to care about.&lt;br /&gt;&lt;br /&gt;A plugin has been added, called &lt;span style="font-weight:bold;"&gt;WinWorkspace&lt;/span&gt;, which is a native Windows GUI containing a text box for both the input and the Transcript, and a DoIt button to evaluate the code. This plugin also works on Win32.&lt;br /&gt;I think Syx can be easily ported to Smartphone as well without many changes.&lt;br /&gt;&lt;br /&gt;Here you can find some screenshots: &lt;a href="http://code.google.com/p/syx/wiki/ScreenShots"&gt;http://code.google.com/p/syx/wiki/ScreenShots&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Stay tuned with the next 0.1.3 release, bye.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-5214544408978831611?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/5214544408978831611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=5214544408978831611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5214544408978831611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/5214544408978831611'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/07/smalltalk-yx-to-run-on-pocketpc.html' title='Smalltalk YX to run on PocketPC'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-4000790108909262783</id><published>2007-07-19T10:49:00.000-07:00</published><updated>2007-07-19T10:59:44.731-07:00</updated><title type='text'>Smalltalk YX to compile itself</title><content type='html'>Hello,&lt;br /&gt;lately i've been working on a compiler for &lt;a href="http://code.google.com/p/syx"&gt;Syx&lt;/a&gt; in Smalltalk. Actually, it's mostly a plain translation of the C one, but works pretty nice. This is an example without using intermediate shortcuts:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ syx&lt;br /&gt;&gt; | text lexer parser method context |&lt;br /&gt;&gt; text := 'message ^123+32'.&lt;br /&gt;&gt; lexer := CompilerLexer on: text.&lt;br /&gt;&gt; parser := CompilerParser on: text for: nil class.&lt;br /&gt;&gt; parser parse.&lt;br /&gt;&gt; method := CompiledMethod fromParser: parser.&lt;br /&gt;&gt; context := MethodContext on: method parent: thisContext receiver: nil arguments: #().&lt;br /&gt;&gt; ^Processor enter: context!&lt;br /&gt;155&lt;br /&gt;&gt; EOF&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Eventough it's still missing features such as cascading and optimized blocks, i hope to release 0.1.3 version very soon. The purpose is to use this compiler for the console and for files instead of the C one.&lt;br /&gt;&lt;br /&gt;Stay tuned, bye!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-4000790108909262783?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/4000790108909262783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=4000790108909262783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4000790108909262783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/4000790108909262783'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/07/smalltalk-yx-to-compile-itself.html' title='Smalltalk YX to compile itself'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-32054652.post-1566077668305636781</id><published>2007-07-13T06:37:00.000-07:00</published><updated>2007-07-13T07:07:40.513-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smalltalk syx development'/><title type='text'>Syx 0.1.2 has been released</title><content type='html'>Hello,&lt;br/&gt;&lt;br/&gt;this version of &lt;a href="http://code.google.com/p/syx"&gt;Syx&lt;/a&gt; has a bunch of new features added to the Smalltalk &lt;br/&gt;environment, and a more stable VM. Major enhancements includes: &lt;br/&gt;&lt;ul&gt;&lt;li&gt;         New compiler flags to build Syx on Mac OS &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;         Added Sets and Bags &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;         Refactored objects to hold both instance variables and indexed variables &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;        Literals in methods are now constant &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;         Added basic WriteStream &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;         Doubled initial memory size to hold 20000 objects &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;         Fixed ByteArray/String small integer to character conversion &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;         Added object finalization by fixing GC transactions &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;         Added support for infinite-precision numbers using GMP &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;         Integer overflow checks when doing sum, difference, multiplication and bit-shift &lt;br/&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;        &lt;i&gt;Note that Syx can be compiled also without GMP. Eventough you use an &lt;br/&gt;  image containing LargeIntegers, Syx will run without problems but won't understand that &lt;br/&gt;  numbers.&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;Bye.&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/32054652-1566077668305636781?l=lethalman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lethalman.blogspot.com/feeds/1566077668305636781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=32054652&amp;postID=1566077668305636781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1566077668305636781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/32054652/posts/default/1566077668305636781'/><link rel='alternate' type='text/html' href='http://lethalman.blogspot.com/2007/07/syx-012-has-been-released.html' title='Syx 0.1.2 has been released'/><author><name>Luca Bruno aka Lethalman</name><uri>http://www.blogger.com/profile/06329046616630750783</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://bp2.blogger.com/_E0EaaGGWB9c/SIRcSW4rfmI/AAAAAAAAAA8/W5ETQHySFGc/S220/avatar.png'/></author><thr:total>0</thr:total></entry></feed>
