<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/2.0.11" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>context switch</title>
	<link>http://log.emmanuelebassi.net</link>
	<description>Random babblings of a geek.</description>
	<pubDate>Sat, 21 Jun 2008 11:35:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.11</generator>
	<language>en</language>
			<item>
		<title>Shiny</title>
		<link>http://log.emmanuelebassi.net/archives/2008/06/shiny/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/06/shiny/#comments</comments>
		<pubDate>Sat, 21 Jun 2008 11:35:45 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>tweet</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/06/shiny/</guid>
		<description><![CDATA[
courtesy of Ulisse Perusin, Tweet now has a rocking icon.
since 0.2 has been released, I&#8217;ve also added:

a status icon to show error messages and the number of new statuses inside a tooltip; when clicking on it, it will bring up the Tweet window and, more importantly, it will disappear until the next update.
key navigation, which [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center"><a id="p278" rel="attachment" class="imagelink" href="http://log.emmanuelebassi.net/archives/2008/06/shiny/tweet/" title="Tweet!"><img id="image278" src="http://log.emmanuelebassi.net/wp-content/2008/06/tweet-icon.png" alt="Tweet!" /></a></div>
<p>courtesy of <a href="http://ulisse.wordpress.com/">Ulisse Perusin</a>, <a href="http://live.gnome.org/Tweet">Tweet</a> now has a rocking icon.</p>
<p>since 0.2 has been released, I&#8217;ve also added:</p>
<ul>
<li>a status icon to show error messages and the number of new statuses inside a tooltip; when clicking on it, it will bring up the Tweet window and, more importantly, it will disappear until the next update.</li>
<li>key navigation, which required a new release of Clutter-GTK</li>
<li>better word wrapping and dimensioning of the cells in the ListView</li>
<li>open up the browser when clicking on the user&#8217;s icon in the status information overlay</li>
</ul>
<p>there are still features I&#8217;d like to work on before 0.4.0, but all in all current HEAD of <code>master</code> looks fairly stable and useful. if everything goes according to plan, I&#8217;ll spin 0.4.0 before GUADEC, and 0.6.0 after I port Tweet to the new shiny Clutter 0.8 API.
</p>
]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/06/shiny/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pogo Stick</title>
		<link>http://log.emmanuelebassi.net/archives/2008/05/pogo-stick/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/05/pogo-stick/#comments</comments>
		<pubDate>Fri, 30 May 2008 21:02:25 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>fun</category>

		<category>clutter</category>

		<category>tweet</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/05/pogo-stick/</guid>
		<description><![CDATA[apparently, some people &#8212; and I&#8217;m looking at you, Pippin &#8212; said that the Tweet repository is hard to find: you actually have to search in my blog.
well, not anymore: Tweet on GNOME Live
complete with a screenshot of the new UI, as suggested by Matthew Allum:

]]></description>
			<content:encoded><![CDATA[<p>apparently, some people &mdash; and I&#8217;m looking at you, Pippin &mdash; said that the Tweet repository is hard to find: you actually have to search in my blog.</p>
<p>well, not anymore: <a href="http://live.gnome.org/Tweet">Tweet on GNOME Live</a></p>
<p>complete with a screenshot of the new UI, as suggested by Matthew Allum:</p>
<div style="text-align:center"><a id="p273" rel="attachment" class="imagelink" href="http://log.emmanuelebassi.net/archives/2008/05/pogo-stick/tweet-pogo-style/" title="Tweet - Pogo style"><img id="image273" src="http://log.emmanuelebassi.net/wp-content/2008/05/tweet.png" alt="Tweet - Pogo style" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/05/pogo-stick/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Road to Somewhere</title>
		<link>http://log.emmanuelebassi.net/archives/2008/05/road-to-somewhere/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/05/road-to-somewhere/#comments</comments>
		<pubDate>Fri, 23 May 2008 21:08:01 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>C</category>

		<category>fun</category>

		<category>clutter</category>

		<category>tweet</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/05/road-to-somewhere/</guid>
		<description><![CDATA[well, after eating my dog food for a while, it seems that Tweet is starting to get more useful.
first of all, now Tweet has an authentication dialog which allows you to enter your username and password the first time you run it:

and even verify them beforehand:


then you get the list of statuses from the people [...]]]></description>
			<content:encoded><![CDATA[<p>well, after eating my dog food for a while, it seems that Tweet is starting to get more useful.</p>
<p>first of all, now Tweet has an authentication dialog which allows you to enter your username and password the first time you run it:</p>
<div style="text-align:center"><a id="p269" rel="attachment" class="imagelink" href="http://log.emmanuelebassi.net/archives/2008/05/road-to-somewhere/authentication1/" title="Authentication/1"><img id="image269" src="http://log.emmanuelebassi.net/wp-content/2008/05/tweet-auth-1.png" alt="Authentication/1" /></a></a></div>
<p>and even verify them beforehand:</p>
<div style="text-align:center"><a id="p270" rel="attachment" class="imagelink" href="http://log.emmanuelebassi.net/archives/2008/05/road-to-somewhere/authentication2/" title="Authentication/2"><img id="image270" src="http://log.emmanuelebassi.net/wp-content/2008/05/tweet-auth-2.png" alt="Authentication/2" /></a></a></div>
<div style="text-align:center"><a id="p271" rel="attachment" class="imagelink" href="http://log.emmanuelebassi.net/archives/2008/05/road-to-somewhere/authentication3/" title="Authentication/3"><img id="image271" src="http://log.emmanuelebassi.net/wp-content/2008/05/tweet-auth-3.png" alt="Authentication/3" /></a></a></div>
<p>then you get the list of statuses from the people you&#8217;re following:</p>
<div style="text-align:center"><a id="p267" rel="attachment" class="imagelink" href="http://log.emmanuelebassi.net/archives/2008/05/road-to-somewhere/loading/" title="Loading"><img id="image267" src="http://log.emmanuelebassi.net/wp-content/2008/05/tweet-loading.png" alt="Loading" /></a></div>
<p>you can scroll around using your mouse, and tap a row to get more informations about the status and the user:</p>
<div style="text-align:center"><a href="http://folks.o-hand.com/ebassi/tweet-navigation.ogg"><img id="image268" src="http://log.emmanuelebassi.net/wp-content/2008/05/tweet-navigation.png" alt="Navigation" /></a>
<p style="font-size:80%"><em>click on the screenshot&#8230;</em></p>
</div>
<p>as you can see, the <acronym title="User Interface">UI</acronym> is geared towards the touchscreen usage, but I plan to add key navigation soon.</p>
<p>still, there&#8217;s a lot to add: support for viewing your own statuses, direct messages, the list of people you&#8217;re following and the people following you &mdash; even the error messages are just printed to the console, even though I&#8217;m working on that.</p>
<p>the bits I&#8217;m most proud of:</p>
<ul>
<li>the GTK+ integration: I&#8217;m retrieving the style information straight from the <code>GtkWindow</code> embedding the Clutter stage, and even if I had to fight with the utter mess that is the themeing code, I was able to gather enough to make Clutter play nice with a GTK+ environment<sup><a href="#footnote-1-264" id="footnote-link-1-264" class="footnote-link footnote-identifier-link" title="in the screencast the scrollbar handle color, for instance, comes from the theme as well as the font">1</a></sup>;</li>
<li>the small animation API I implemented on top of the Clutter animation framework, requiring a single function (plus two completely generic classes) to <a href="http://en.wikipedia.org/wiki/Tweening">tween</a> an actor between two states; for instance:
<pre style="font-size:80%">
tweet_actor_animate (info, <span style="color:purple">TWEET_LINEAR</span>, <span style="color:red">250</span>,
                     <span style="color:red">&#8220;y&#8221;</span>, tweet_interval_new (<span style="color:purple">G_TYPE_INT</span>, y + padding, <span style="color:red">100</span> + padding),
                     <span style="color:red">&#8220;height&#8221;</span>, tweet_interval_new (<span style="color:purple">G_TYPE_INT</span>, <span style="color:red">10</span>, (height - (<span style="color:red">100</span> * <span style="color:red">2</span>))),
                     <span style="color:red">&#8220;opacity&#8221;</span>, tweet_interval_new (<span style="color:purple">G_TYPE_UCHAR</span>, <span style="color:red">0</span>, <span style="color:red">196</span>),
                     <span style="color:purple">NULL</span>);
</pre>
<p> this is the code that animates the status information actor that appears overlayed on top of the status view<sup><a href="#footnote-2-264" id="footnote-link-2-264" class="footnote-link footnote-identifier-link" title="this kind of utility API is easy to achieve given the power and flexibility of the underlying framework &mdash; but it obviously limits what you can and cannot do, and if you ty to coerce it into being more generic you start losing bits and pieces and a simple API starts getting in your way instead of helping you; that&#8217;s why Clutter&#8217;s animation framework might seem complicated at first: it&#8217;s trying very hard to allow you to build whatever animation you have in mind instead of limiting you">2</a></sup>; I&#8217;d like to thank <a href="http://codecave.org/">pippin</a> for the idea about the API behaviour;</li>
<li>Twitter-GLib, the generic API for accessing Twitter throught its <a href="http://en.wikipedia.org/wiki/RESTful">RESTful</a> API, which thanks to LibSoup has been a breeze to write even in a clunky and not-at-all-web-two-point-oh-buzzword-compliant language like C;</li>
<li>the fact that Tweet is written in a very reusable manner (apart from the base scrollable list which comes from Tidy), with every piece neatly abstracted into its own class.</li>
<li>finally, the fact that after almost a year of basically working on libraries only I can still sit down and get an application from scratch to a usable state in a couple of weeks in my spare time &mdash; even if I have to write a library to get it done. <img src='http://log.emmanuelebassi.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>
<p>by the way: is any artist out there interested in making an icon for Tweet? I really would like to avoid using Twitter&#8217;s own icon.
</p>
<ol start="1" class="footnotes"><li id="footnote-1-264" class="footnote">in the screencast the scrollbar handle color, for instance, comes from the theme as well as the font [<a href="#footnote-link-1-264" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-264" class="footnote">this kind of utility API is easy to achieve given the power and flexibility of the underlying framework &mdash; but it obviously limits what you can and cannot do, and if you ty to coerce it into being more generic you start losing bits and pieces and a simple API starts getting in your way instead of helping you; that&#8217;s why <a href="http://www.clutter-project.org">Clutter</a>&#8217;s <a href="http://www.clutter-project.org/docs/clutter/stable/clutter-animations.html">animation framework</a> might seem complicated at first: it&#8217;s trying very hard to allow you to build whatever animation you have in mind instead of limiting you [<a href="#footnote-link-2-264" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/05/road-to-somewhere/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Some Things Come From Nothing</title>
		<link>http://log.emmanuelebassi.net/archives/2008/05/some-things-come-from-nothing/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/05/some-things-come-from-nothing/#comments</comments>
		<pubDate>Mon, 19 May 2008 19:04:09 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>clutter</category>

		<category>conference</category>

		<category>crack</category>

		<category>git</category>

		<category>json-glib</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/05/some-things-come-from-nothing/</guid>
		<description><![CDATA[json-glib: 0.6 is out! please: download it, test it, use it. as far as I know, it has been packaged for Debian unstable, and has entered the NEW queue (kudos to Rob Bradford, esquire and fine gentleman).
debian: with the release of Hardy I decided to switch back to Debian after three years of Ubuntu. even [...]]]></description>
			<content:encoded><![CDATA[<p><strong>json-glib</strong>: 0.6 is <a href="http://mail.gnome.org/archives/gnome-announce-list/2008-May/msg00006.html">out</a>! please: download it, test it, use it. as far as I know, it has been packaged for Debian unstable, and has entered the <code>NEW</code> queue (<em>kudos</em> to Rob Bradford, esquire and fine gentleman).</p>
<p><strong>debian</strong>: with the release of Hardy I decided to switch back to Debian after three years of Ubuntu. even though there are still some rough edges in Lenny, the support for laptops has definitely improved a lot and so I got back to my old love. starting from Gutsy, I found myself increasingly at odds with Ubuntu decisions and even though I upgraded my wife&#8217;s laptop to Hardy, I&#8217;m really glad I got back to Debian.</p>
<p><strong>clutter/1</strong>: apparently, I&#8217;ll give a lightning talk about our reference toolkit for Clutter at this year&#8217;s GUADEC, in Istanbul. Øyvind proposed it for me because, regardless of being on the paper committee, I actually forgot the deadline for the <acronym title="Call For Papers">CFP</acronym> &mdash; <em>whoops</em>, maybe I shouldn&#8217;t have said that. <img src='http://log.emmanuelebassi.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  with the Tidy lightning talk and the <em>Clutter guts</em> talk given by <a href="http://butterfeet.org">Matthew</a>, we decided for a high-level/low-level approach, instead of going for the usual <em>this is teh Clutter, look at teh bling</em> kind of talk. if you want to understand Clutter, Matthew&#8217;s talk is definitely where you want to be; as we all know:</p>
<blockquote><p>
  <em>Clutter = Clean and nice API + Performance + Portability + Integration = ♥</em>
</p></blockquote>
<p><em style="font-size:80%">from my Clutter talk at FOSDEM</em></p>
<p>so, if you want to know <strong>how</strong> Clutter creates love, get to Istanbul this July. <img src='http://log.emmanuelebassi.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>tweet</strong>: I started <a href="http://twitter.com/ebassi/statuses/815084728">eating my own dogfood</a>. <a href="http://folks.o-hand.com/ebassi/tweet-20080519.png">Tweet</a> is by no means complete or even guaranteed not to turn you into a goat and eat your breakfast &mdash; but now it works well enough for reading your own timeline and sending new statuses; and it doesn&#8217;t require <code>trunk</code> of anything any more, thanks to a Tidy transplant. I&#8217;m using Tweet as a way to see what kind of API is needed to properly integrate a Clutter canvas into a GTK+ application: colors, fonts, etc. if you want to try it out, contribute or just mock my insanity:</p>
<pre>
  git clone <a href="http://github.com/ebassi/tweet/tree/master">git://github.com/ebassi/tweet.git</a>
</pre>
<p><strong>clutter/2</strong>: we&#8217;re really close to a 0.7 release, which will mark the beginning of the <em>slushy</em> phase of the API; as far as documentation goes, we&#8217;re in pretty good shape already, at 93% for the Clutter namespace, and another 80% for the Cogl namespace. bindings will need to be updated &mdash; but the amount of new API is not that big, so it&#8217;s not going to be a long wait. I&#8217;m making a note here: <strong>huge success</strong>.
</p>
]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/05/some-things-come-from-nothing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sincerest Forms of Flattery</title>
		<link>http://log.emmanuelebassi.net/archives/2008/04/sincerest-forms-of-flattery/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/04/sincerest-forms-of-flattery/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 12:57:36 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>GNOME</category>

		<category>fun</category>

		<category>announce</category>

		<category>clutter</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/04/sincerest-forms-of-flattery/</guid>
		<description><![CDATA[tidy: they say that imitation is the sincerest form of flattery:



the actual amount of code is quite small, and it&#8217;s already available in Tidy.
challenges: Luca dared me into making a Clutter-based coverflow-like plugin for Rhythmbox, but it was Iain that picked the challenge up and wrote some basic code for it. I, on the other [...]]]></description>
			<content:encoded><![CDATA[<p><strong>tidy</strong>: they say that <em>imitation is the sincerest form of flattery</em>:</p>
<div style="text-align:center">
<a href="http://folks.o-hand.com/ebassi/tidy-boo-yah.ogg"><img id="image253" src="http://log.emmanuelebassi.net/wp-content/2008/03/tidy-boo-yah-thumb.png" alt="TidyFingerToggle" /></a>
</div>
<p>the actual amount of code is quite small, and it&#8217;s already available in <a href="http://svn.o-hand.com/view/tidy/trunk/tidy/tidy-finger-toggle.h">Tidy</a>.</p>
<p><strong>challenges</strong>: <a href="http://elleuca.blogspot.com/">Luca</a> <a href="http://mail.gnome.org/archives/desktop-devel-list/2008-April/msg00203.html">dared</a> me into making a Clutter-based coverflow-like plugin for Rhythmbox, but it was Iain that picked the challenge up and <a href="http://mail.gnome.org/archives/desktop-devel-list/2008-April/msg00209.html">wrote</a> some basic code for it. I, on the other hand, don&#8217;t like coverflow for browsing my music collection, so I finally decided to write something for the Eye of GNOME &mdash; a <a href="http://en.wikipedia.org/wiki/Ken_Burns_Effect">Ken Burns effect</a> slide show. it&#8217;s not at all finished, and if nobody <a href="http://mail.gnome.org/archives/desktop-devel-list/2008-April/msg00211.html">picks</a> it up, I&#8217;ll try and do my best to have it ready for GNOME 2.24, if <acronym title="Eye of GNOME">EOG</acronym> maintainers want it, of course. it&#8217;s not the best display of Clutter features &mdash; except the animation framework &mdash; but if you have hardware acceleration it will make slideshows look a lot nicer.</p>
<p><strong>json-glib</strong>: this weekend I <a href="http://mail.gnome.org/archives/gnome-announce-list/2008-April/msg00061.html">released</a> the first developers snapshot of JSON-GLib 0.6; the API is stable, the test suite is rocking and this release finally fixes the last bit needed for full RFC 4627 compliance (Unicode escaping). I&#8217;m probably going to release 0.6.0 in a couple of weeks.
</p>
]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/04/sincerest-forms-of-flattery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Good Intentions/2</title>
		<link>http://log.emmanuelebassi.net/archives/2008/04/good-intentions2/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/04/good-intentions2/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 21:30:50 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>GNOME</category>

		<category>C</category>

		<category>developer</category>

		<category>gtk</category>

		<category>clutter</category>

		<category>crack</category>

		<category>json-glib</category>

		<category>glib</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/04/good-intentions2/</guid>
		<description><![CDATA[gtk+: I&#8217;ve been working again on the RecentManager and in trunk you&#8217;ll see some new stuff, namely:

use GIO to determine the MIME type of a URI, on every platform supported
use the file monitoring API to avoid polling the storage file
add a GtkSettings property for clamping the recently used resources list to a 30 days limit

more [...]]]></description>
			<content:encoded><![CDATA[<p><strong>gtk+</strong>: I&#8217;ve been working again on the <a href="http://library.gnome.org/devel/gtk/stable/GtkRecentManager.html">RecentManager</a> and in <code>trunk</code> you&#8217;ll see some new stuff, namely:</p>
<ul>
<li>use GIO to determine the MIME type of a URI, on every platform supported</li>
<li>use the file monitoring API to avoid polling the storage file</li>
<li>add a GtkSettings property for clamping the recently used resources list to a 30 days limit</li>
</ul>
<p>more stuff I&#8217;d like to add is:</p>
<ul>
<li>small parser changes to <a href="http://library.gnome.org/devel/glib/stable/glib-Bookmark-file-parser.html">GBookmarkFile</a>, to reflect changes in the spec</li>
<li>bulk addition, for applications storing multiple items when quitting</li>
<li>new API needed to follow the usability review in bug <a href="http://bugzilla.gnome.org/show_bug.cgi?id=349541">349541</a></li>
<li>moving the RecentItem icon code to GIO, and add API to extract the thumbnail</li>
</ul>
<p><strong>twitter</strong>: I&#8217;ve been using <a href="http://twitter.com">Twitter</a> a lot in the past two weeks; it&#8217;s nice, it makes it easier to copy and paste a quote or a thought, and the 160 characters limit is an interesting challenge. As it&#8217;s been ages since I last wrote an application<sup><a href="#footnote-1-261" id="footnote-link-1-261" class="footnote-link footnote-identifier-link" title="lately all I&#8217;ve been doing was writing libraries">1</a></sup>, I decided to start writing a Twitter reader/writer &mdash; using <a href="http://www.gtk.org">GTK+</a>, <a href="http://www.clutter-project.org">Clutter</a> and Tidy; without much thinking, I opened gvim and started writing code in C<sup><a href="#footnote-2-261" id="footnote-link-2-261" class="footnote-link footnote-identifier-link" title="hey, that&#8217;s what I do for a living, it&#8217;s hard to switch off; plus, I could reuse some of the platform libraries">2</a></sup> &mdash; so, the obvious thing that happened was that I ended up writing a library <em>yet again</em> in order to use Twitter&#8217;s web API. luckily for me, libsoup has now a really nice API to work with; all you need is <code>GET</code> and <code>POST</code> to their RESTful API, retrieve the result, parse it through JSON-GLib, hide everything inside a new GObject and you have a wrapper around a web service. the application, you say? oh, I was sure I forgot something. well, it&#8217;s <a href="http://github.com/ebassi/tweet/tree/master">coming along</a> &mdash; it just needs some work still.
</p>
<ol start="1" class="footnotes"><li id="footnote-1-261" class="footnote">lately all I&#8217;ve been doing was writing libraries [<a href="#footnote-link-1-261" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-261" class="footnote">hey, that&#8217;s what I do for a living, it&#8217;s hard to switch off; plus, I could reuse some of the platform libraries [<a href="#footnote-link-2-261" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/04/good-intentions2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Being Luis Villa</title>
		<link>http://log.emmanuelebassi.net/archives/2008/04/being-luis-villa/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/04/being-luis-villa/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 13:41:02 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>GNOME</category>

		<category>fun</category>

		<category>meme</category>

		<category>luis-villa-is-people</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/04/being-luis-villa/</guid>
		<description><![CDATA[


iain&#8217;s right: this is funnier than the history meme.

]]></description>
			<content:encoded><![CDATA[<div style="text-align:center">
<a id="p259" rel="attachment" class="imagelink" href="http://log.emmanuelebassi.net/archives/2008/04/being-luis-villa/i-am-luis/" title="I am Luis"><img id="image259" src="http://log.emmanuelebassi.net/wp-content/2008/04/i-am-luis.jpg" alt="I am Luis" /></a>
</div>
<p><a href="http://blogs.gnome.org/iain/2008/04/17/i-am-luis-villa/">iain</a>&#8217;s right: this is funnier than the history meme.
</p>
]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/04/being-luis-villa/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Good Intentions</title>
		<link>http://log.emmanuelebassi.net/archives/2008/04/good-intentions/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/04/good-intentions/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 14:15:24 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>announce</category>

		<category>ohand</category>

		<category>clutter</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/04/good-intentions/</guid>
		<description><![CDATA[unique: this morning I released version 0.9.4 of libunique, everyone (least) favourite library for writing single instance applications. it&#8217;s mostly a bug fixing release, and since I&#8217;ve decided to release 1.0.0 soon, this is also the first release candidate for the 1.0 milestone. I&#8217;ve also moved the git repository to github, so you can clone [...]]]></description>
			<content:encoded><![CDATA[<p><strong>unique</strong>: this morning I released version 0.9.4 of <a href="http://live.gnome.org/LibUnique">libunique</a>, everyone (least) favourite library for writing single instance applications. it&#8217;s mostly a bug fixing release, and since I&#8217;ve decided to release 1.0.0 soon, this is also the first release candidate for the 1.0 milestone. I&#8217;ve also moved the git repository to github, so you can clone it with:</p>
<pre>
  git clone git://github.com/ebassi/unique.git
</pre>
<p>I plan to add back a new x11 backend for the 1.2 release, targeting small embedded environments were D-Bus might not be an option, and support for a <code>--replace</code> command line switch. after that, I&#8217;ll try to get the same functionalities into GLib/GTK+, as part of the future &#8220;desktop platform&#8221; module.</p>
<p><strong>Clutter</strong>: I did a 0.6.2 release of both the <a href="http://lists.o-hand.com/clutter/0951.html">core</a> and the <a href="http://lists.o-hand.com/clutter/1019.html">Python bindings</a>, but things are afoot in <code>trunk</code>. we recently landed the multi-stage branch, which means that you&#8217;ll be able to create multiple windows and multiple GtkClutterEmbed widgets per application with Clutter 0.8. we&#8217;re also about to land the massive COGL rewrite that <a href="http://ivanleben.blogspot.com/">Ivan Leben</a> of ShivaVG fame did &mdash; which will make the GL and GLES abstraction more powerful, will reduce the code duplication and in general will rock your world. Neil Roberts has been doing loads of work on the native Win32 backend: he not only made it possible to run Clutter on WGL, but also use the GtkClutterEmbed on Windows natively:</p>
<div style="text-align:center"><a class="imagelink" href="http://log.emmanuelebassi.net/wp-content/2008/04/clutter-gtk-win32.png" title="GtkClutter on win32"><img id="image257" src="http://log.emmanuelebassi.net/wp-content/2008/04/clutter-gtk-win32.thumbnail.png" alt="GtkClutter on win32" /></a></div>
<p>now, only the Quartz backend is missing the party &mdash; <em>hint hint, nudge nudge</em>.</p>
<p><strong>OpenedHand</strong>: we&#8217;re <a href="http://o-hand.com/jobs/">hiring</a>!
</p>
]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/04/good-intentions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rhyme the rhyme well</title>
		<link>http://log.emmanuelebassi.net/archives/2008/04/rhyme-the-rhyme-well/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/04/rhyme-the-rhyme-well/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 21:43:34 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>GNOME</category>

		<category>developer</category>

		<category>clutter</category>

		<category>crack</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/04/rhyme-the-rhyme-well/</guid>
		<description><![CDATA[Jason, it&#8217;s not just the canvas: writing a simple 2D canvas is trivial &#8212; that&#8217;s why a lot of applications end up writing their own homegrown one.
The hard bits are the animation framework, the event handling and down to the integration with the existing platform. A generic canvas is hard, and you probably don&#8217;t want [...]]]></description>
			<content:encoded><![CDATA[<p>Jason, it&#8217;s not just <a href="http://jasondclinton.livejournal.com/65125.html">the canvas</a>: writing a simple 2D canvas is trivial &mdash; that&#8217;s why a lot of applications end up writing their own homegrown one.</p>
<p>The hard bits are the animation framework, the event handling and down to the integration with the existing platform. A generic canvas is hard, and you probably don&#8217;t want it to be developed inside gtk+ (not even for 3.0) &mdash; just like Cairo is not developed inside gtk+ but supersedes part of gtk+&#8217;s API.</p>
<p>As for 3D acceleration &mdash; I&#8217;m obviously biased here, so everyone should take what I write with a <del datetime="2008-04-10T21:32:48+00:00">grain</del>truckload of salt &mdash; but I maintain my view that if GNOME (and Linux) started heavily pushing towards more support for OpenGL, then we could get more market share<sup><a href="#footnote-1-256" id="footnote-link-1-256" class="footnote-link footnote-identifier-link" title="think Compiz, and how many more users it brought home just with a spinning cube">1</a></sup>, more visibility and thus more leverage to make the currently closed source drivers more open. Intel understood this; AMD is now getting it; I&#8217;m pretty sure nVidia will &mdash; or they will be simply pushed into irrelevance by the open drivers developed by the community<sup><a href="#footnote-2-256" id="footnote-link-2-256" class="footnote-link footnote-identifier-link" title="unless you are a gamer, and need the very best card as soon as it&#8217;s out just to play Crisis">2</a></sup>. Let&#8217;s face it: other platforms and toolkits are pushing heavily on hardware accelerated 3D effects.</p>
<p>Let&#8217;s start aggressively work to get the platform into the XXI century.</p>
<p><strong>update@2008-10-11T12:21+0100</strong> &mdash; just as a sidenote: if you have a good CPU, Mesa and software rendering, Clutter <em>will work</em>. It won&#8217;t be fast for some operations (like scaling and, possibly, rotating), but in that case you should probably start contributing to Mesa to make it fast (there&#8217;s a lot of room for improvement).
</p>
<ol start="1" class="footnotes"><li id="footnote-1-256" class="footnote">think Compiz, and how many more users it brought home just with a spinning cube [<a href="#footnote-link-1-256" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-256" class="footnote">unless you are a gamer, and need the very best card as soon as it&#8217;s out just to play Crisis [<a href="#footnote-link-2-256" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/04/rhyme-the-rhyme-well/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Time to Build</title>
		<link>http://log.emmanuelebassi.net/archives/2008/03/time-to-build/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/03/time-to-build/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 21:42:11 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>GNOME</category>

		<category>recent-files</category>

		<category>gtk</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/03/time-to-build/</guid>
		<description><![CDATA[Claudio did some interesting profiling (and patching) of the BookmarkFile implementation in GLib &#8212; so kudos to him and Felix.
one thing that he noted is:
However, I still have the feeling that letting ~\.recently-used.xbel grow without control is very, very wrong. In my laptop, this file is about 5MB, which accounts for ca. 9000 files(!).
this is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.gnome.org/~csaavedra/news-2008-03.html#D22">Claudio</a> did some interesting profiling (and patching) of the BookmarkFile implementation in GLib &mdash; so <em>kudos</em> to him and Felix.</p>
<p>one thing that he noted is:</p>
<blockquote><p>However, I still have the feeling that letting ~\.recently-used.xbel grow without control is very, very wrong. In my laptop, this file is about 5MB, which accounts for ca. 9000 files(!).</p></blockquote>
<p>this is very true, but I feel it needs some context. when I first wrote the RecentManager code I only had the EggRecent implementation as a comparison; the old EggRecentModel had an hardcoded limit of 500 items stored per file. limiting on the number, instead of the <em>age</em> of an item inside a <em>recently used</em> file list did not feel right, so I thought about hardcoding a limit of 30 days &mdash; but stopped short of doing it because I realized that hardcoding limits at the toolkit level was not a good idea:</p>
<ul>
<li>application developers will not be able to change it in any way</li>
<li>users will not be able to change it in any way</li>
<li>system administrators will not be able to change it in any way</li>
</ul>
<p>just to give a few examples: while I was still writing the RecentManager inside libegg, Alex Graveley was writing Gimmie. Gimmie had<sup><a href="#footnote-1-255" id="footnote-link-1-255" class="footnote-link footnote-identifier-link" title="and might still have &mdash; I haven&#8217;t checked it for a while now">1</a></sup> a local document and application history that could allow you to go back in time of months; had I hardcoded a limit, the Gimmie developers would have needed a new implementation, defeating the purpose of shipping the RecentManager inside GTK+ to cut down the amount of code replication.</p>
<p>hardcoding limits is also something that makes it hard, or even impossible, for users and administrators to control; I might want a 30 days limit, but other might want a 90 days, or a 7 days &mdash; or even a 1 day limit. some might not even want to save the recently used files at all (think kiosks).</p>
<p>I don&#8217;t believe in strictly hardcoding policies in the toolkit; providing fallbacks is perfectly fine, but preventing people from actually having different settings is akin to convince everyone that you&#8217;re right and they&#8217;re wrong.</p>
<p>still, this doesn&#8217;t solve the problem at hand, that is the current <em>lack of policy</em>.</p>
<p>what I&#8217;d like to see is some process taking care of purging the old entries, using some key inside gconf, at the end of the session; gnome-settings-daemon would fit the role for GNOME, and other desktop environments using GTK+ could provide the same functionality<sup><a href="#footnote-2-255" id="footnote-link-2-255" class="footnote-link footnote-identifier-link" title="if you&#8217;re not using a GTK+ based desktop environment you&#8217;re either using the same spec used by GTK+ so you can provide your own way of purging the cache, or you&#8217;re using another way to store the recently used files, so the size of the file saved/read by the RecentManager will not bubble out of control so easily &mdash; and you can still flush it yourself">2</a></sup>. after all, gnome-settings-daemon should already <a href="http://bugzilla.gnome.org/show_bug.cgi?id=523159">flush the thumbnails cache</a> &mdash; it wouldn&#8217;t be much of a complication.
</p>
<ol start="1" class="footnotes"><li id="footnote-1-255" class="footnote">and might still have &mdash; I haven&#8217;t checked it for a while now [<a href="#footnote-link-1-255" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-255" class="footnote">if you&#8217;re not using a GTK+ based desktop environment you&#8217;re either using the same spec used by GTK+ so you can provide your own way of purging the cache, or you&#8217;re using another way to store the recently used files, so the size of the file saved/read by the RecentManager will not bubble out of control so easily &mdash; and you can still flush it yourself [<a href="#footnote-link-2-255" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/03/time-to-build/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Berlin/5</title>
		<link>http://log.emmanuelebassi.net/archives/2008/03/berlin5/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/03/berlin5/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 00:35:03 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>GNOME</category>

		<category>C</category>

		<category>gtk</category>

		<category>conference</category>

		<category>hackfest</category>

		<category>berlin</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/03/berlin5/</guid>
		<description><![CDATA[last post of the Berlin Hackfest series, written on the last minutes of day 5
today was &#8220;wrap up&#8221; day. we got together in the room used for the presentations and summed up all our work during the various sessions of the week. it turned out that the amount of work, even though not reflected by [...]]]></description>
			<content:encoded><![CDATA[<p><em>last post of the Berlin Hackfest series, written on the last minutes of day 5</em></p>
<p>today was &#8220;wrap up&#8221; day. we got together in the room used for the presentations and summed up all our work during the various sessions of the week. it turned out that the amount of work, even though not reflected by the wiki page, was really enormous; the introspection guys worked a lot and now that they have received a lot of input, they are going to rework things and kick ass even more. apparently, Behdad decided that I would tackle the GL integration inside GDK &mdash; which, of course, I&#8217;d really like to do; the GL integration, and a GDK wrapper for the GLX_texture_from_pixmap (and the equivalent call for the other platforms) would obviously be the primary way to integrate Cairo 2D high quality drawing and GL 3D and hardware acceleration in a simple way. and this is a step forward the implementation of a scene graph inside GTK+.</p>
<p>in the meantime, I&#8217;m &mdash; as Ryan would put it &mdash; deeply recursing. it all started on tuesday, when I decided to start hacking on a <em>real</em> application with Vala using all the bits and pieces a modern GTK+ application requires: GtkUIManager, about dialogs, command-line switches. the application was supposedly going to read the new GTest framework reports, and allow comparing of multiple runs in a fast way. this, in turn, led to <a href="http://bugzilla.gnome.org/show_bug.cgi?id=522059">some</a> <a href="http://bugzilla.gnome.org/show_bug.cgi?id=522060">bugs</a> <a href="http://bugzilla.gnome.org/show_bug.cgi?id=522061">filed</a> against Vala GTK+ bindings. working around these issues, I also found out that the libxml-2.0 bindings in Vala &mdash; which I need to parse the GTest report XML &mdash; require a lot of pointers usage and are, in general, quite sub-obtimal, due to the very C oriented API. while investigating on a substitute, I found out XmlReader &mdash; the cursor-based XML traversal API that .Net and other high-level languages implement<sup><a href="#footnote-1-250" id="footnote-link-1-250" class="footnote-link footnote-identifier-link" title="Even libxml-2.0 implements it, even though it suffers from the same issues of its DOM API, and it&#8217;s still not GObject-based">1</a></sup>. Thus, today at a coffe shop<sup><a href="#footnote-2-250" id="footnote-link-2-250" class="footnote-link footnote-identifier-link" title="Behdad is right: a coffee shop without any Internet connectivity makes wonders with your productivity levels">2</a></sup> I started hacking very quickly on a rough implementation of a XmlReader GObject class which, as of at this moment works quite nicely:</p>
<pre>
  XmlReader *reader = xml_reader_new ();
  GError *error = <span style="color:purple">NULL</span>;

  if (xml_reader_load_from_file (reader, <span style="color:red">&#8220;book.xml&#8221;</span>, &#038;error))
    g_error (<span style="color:red">&#8220;Unable to parse book.xml: <span style="color:purple">%s</span>&#8220;</span>, error-&gt;message);

  xml_reader_read_start_element (reader, <span style="color:red">&#8220;book-info&#8221;</span>);

  xml_reader_read_start_element (reader, <span style="color:red">&#8220;author&#8221;</span>);
  author = g_strdup (xml_reader_get_element_value (reader));
  xml_reader_read_end_element (reader);

  xml_reader_read_start_element (reader, <span style="color:red">&#8220;title&#8221;</span>);
  title = g_strdup (xml_reader_get_element_value (reader));
  xml_reader_read_end_element (reader);

  xml_reader_read_end_element (reader);

  g_print (<span style="color:red">&#8220;The author of <span style="color:purple">%s</span> is <span style="color:purple">%s\n</span>&#8220;</span>, title, author);

  g_free (title);
  g_free (author);
  g_object_unref (reader);
</pre>
<p>and you&#8217;re done. at this moment, I&#8217;m cleaning it up and adding the gtk-doc API reference to the build<sup><a href="#footnote-3-250" id="footnote-link-3-250" class="footnote-link footnote-identifier-link" title="When I write new libraries, I usually stub out the API and document it at the same time; now I started to add the GTest units before I even implement the API">3</a></sup>. I&#8217;m probably going to add the generic <code>read()</code> method, so that:</p>
<pre>
  <span style="color:orange">while</span> (xml_reader_read (reader))
    {
    &#8230;
    }
</pre>
<p>will work as expected. it&#8217;s, as usual, code replication &mdash; but I&#8217;m going to need it anyway, so it&#8217;s good code replication.
</p>
<ol start="1" class="footnotes"><li id="footnote-1-250" class="footnote">Even libxml-2.0 implements it, even though it suffers from the same issues of its DOM API, and it&#8217;s still not GObject-based [<a href="#footnote-link-1-250" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-250" class="footnote">Behdad is right: a coffee shop without any Internet connectivity makes wonders with your productivity levels [<a href="#footnote-link-2-250" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-3-250" class="footnote">When I write new libraries, I usually stub out the API and document it at the same time; now I started to add the GTest units before I even implement the API [<a href="#footnote-link-3-250" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/03/berlin5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Berlin/3</title>
		<link>http://log.emmanuelebassi.net/archives/2008/03/berlin3/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/03/berlin3/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 00:35:00 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>GNOME</category>

		<category>gtk</category>

		<category>clutter</category>

		<category>conference</category>

		<category>hackfest</category>

		<category>berlin</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/03/berlin3/</guid>
		<description><![CDATA[second and third day of the hackfest, edited on day five
on tuesday, Behdad and I started working on OpenGL integration inside GTK+. as stated multiple times on the Bugzilla entry, what we both would like is a Cairo-like integration of GL inside the available drawing systems in GTK+. in short: not a specialized widget like [...]]]></description>
			<content:encoded><![CDATA[<p><em>second and third day of the hackfest, edited on day five</em></p>
<p>on tuesday, Behdad and I started working on OpenGL integration inside GTK+. as stated multiple times on the Bugzilla entry, what we both would like is a Cairo-like integration of GL inside the available drawing systems in GTK+. in short: not a specialized widget like GtkGLArea, which would make it difficult &mdash; or plainly impossible without jumping through a long series of hoops. in flames. tied. and blindfolded &mdash; to integrate GL inside existsing projects; and not the incredible API dump that GtkGLExt is.</p>
<p>the design we mostly agreed on was a shared object inside GTK+, containing the GL context abstraction object, and two simple calls to delimit the drawing code, wait for vblank and swap the GL buffers. plus, an easy to use wrapper around the <code>texture_from_pixmap</code> extension, to allow drawing with cairo on a Pixmap and then have it pushed into the GL pipeline.</p>
<p>Carl arrived on wednesday, and partecipated at the scene graph BoF we held. the BoF itself was pretty straightforward: we read the slides that Havoc sent on the mailing list and discussed the various points. we all agreed on a lot of points &mdash; and we tried to define the problem space more deeply<sup><a href="#footnote-1-252" id="footnote-link-1-252" class="footnote-link footnote-identifier-link" title="We did not always succeed in this, but the issue at hand is quite large and it&#8217;s understandable">1</a></sup>. being there, I could bring to the table my experience in the past two years<sup><a href="#footnote-2-252" id="footnote-link-2-252" class="footnote-link footnote-identifier-link" title="It&#8217;s really two years? holy crap! The time really flew&#8230;">2</a></sup> with the design and implementation of Clutter. some of the attendees were already familiar with it &mdash; something very satisfying &mdash; and I could expand some points in Havoc&#8217;s slides about Clutter that have been recently fixed or are going to be fixed in this cycle. the biggest point is that the scene graph should integrate with Cairo, in order to allow applications and people to gently merge both the 2D drawing of surfaces into a full 3D environment; I&#8217;ll leave to Carl to explain the Cairo side, because he&#8217;s obviously better at this than I am. <img src='http://log.emmanuelebassi.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>the operative result of the scene graph discussion was that Clutter emerged as an already powerful and established solution for this problem space, and given that it already nicely integrates with GTK+, we can work towards the common goal of making it &#8220;the GTK+ canvas&#8221;, outside the actual library so that it can grow unrestrained and experiment in new directions.
</p>
<ol start="1" class="footnotes"><li id="footnote-1-252" class="footnote">We did not always succeed in this, but the issue at hand is quite large and it&#8217;s understandable [<a href="#footnote-link-1-252" class="footnote-link footnote-back-link">&#8617;</a>]</li><li id="footnote-2-252" class="footnote">It&#8217;s really two years? holy crap! The time really flew&#8230; [<a href="#footnote-link-2-252" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/03/berlin3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Laws Have Changed</title>
		<link>http://log.emmanuelebassi.net/archives/2008/03/the-laws-have-changed/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/03/the-laws-have-changed/#comments</comments>
		<pubDate>Sun, 02 Mar 2008 18:09:59 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>git</category>

		<category>die-cvs-die</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/03/the-laws-have-changed/</guid>
		<description><![CDATA[This week I got an invite for trying out Github beta. Github is a nice service providing some space and tools to set up git repositories for open source projects.
Obviously, setting up HTTP (dumb) read-only git repos is doable on any box connected to the intertron by merely copying the repository; the nice bits of [...]]]></description>
			<content:encoded><![CDATA[<p>This week I got an invite for trying out <a href="http://github.com">Github beta</a>. Github is a nice service providing some space and tools to set up <a href="http://en.wikipedia.org/wiki/Git_%28software%29">git</a> repositories for open source projects.</p>
<p>Obviously, setting up HTTP (dumb) read-only git repos is doable on any box connected to the intertron by merely copying the repository; the nice bits of working with git, though, like pushing branches and tags, or fast cloning through the git: protocol are somewhat harder to set up, so anything that relieves you from actually doing this kind of work should always be welcome.</p>
<p>Github not only provides you with that: it also gives you <a href="http://github.com/ebassi/json-glib/tree/master">an incredibly nice web interface</a>; a wiki; the ability to easily track other projects through RSS feeds; the ability to easily set up a &#8220;fork&#8221; of another repository, thus easing the pain of setting up personal development repositories for contributors.</p>
<p>I decided to try Github by moving there <a href="http://live.gnome.org/JsonGlib">JSON-GLib</a>&#8217;s <a href="http://github.com/ebassi/json-glib/tree/master">development</a> git repository, plus some branches and the release tags. The operation took me approximately ten minutes, including the account creation, and it was all very easy and very well explained.</p>
<p>At the moment, Github is in beta<sup><a href="#footnote-1-245" id="footnote-link-1-245" class="footnote-link footnote-identifier-link" title="If anyone is interested to try it, I have two invites an invite left to give out invites are now all gone">1</a></sup> and there are lots of projects starting out; if anything happens, cloning out with full repository history is also a nice feature of git, so I guess that side is covered as well. Bugs and feature requests are now handled using wiki pages, so if I&#8217;d have to make a request to the guys at <a href="http://logicalawesome.com/">Logical Awesome</a> then it would be: dudes, move to a serious bug tracking system - wikis don&#8217;t scale for that (believe me: been there, done that).</p>
<p>All in all, it&#8217;s a great service - the way SourceForge should have been, if technology allowed it at the time and if they didn&#8217;t choose to reimplement the damned <acronym title="Bug Tracking System">BTS</acronym> and mailing list archives with something that can only be described as &#8220;made of fail&#8221;; and if they plan to make me pay a reasonable fee, it&#8217;s fine for me: Github&#8217;s <acronym title="User Interface">UI</acronym> alone is worth it.
</p>
<ol start="1" class="footnotes"><li id="footnote-1-245" class="footnote">If anyone is interested to try it, <del datetime="2008-03-03T16:41:56+00:00">I have</del> <del datetime="2008-03-03T14:47:28+00:00">two invites</del> <del datetime="2008-03-03T16:41:56+00:00">an invite left to give out</del> invites are now all gone [<a href="#footnote-link-1-245" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/03/the-laws-have-changed/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Helm, set a course&#8230; for love</title>
		<link>http://log.emmanuelebassi.net/archives/2008/02/helm-set-a-course-for-love/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/02/helm-set-a-course-for-love/#comments</comments>
		<pubDate>Tue, 19 Feb 2008 15:32:05 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>GNOME</category>

		<category>fun</category>

		<category>crack</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/02/helm-set-a-course-for-love/</guid>
		<description><![CDATA[a GNOME cruise? I already have the theme song&#8230;

GNOME-Love Boat, love exciting and new,
Come aboard, we're expecting you.

The GNOME-Love Boat soon will be making another release,
The GNOME-Love Boat promises something for everyone.

Set a course for adventure,
Your box's on a new romance.

And GNOME-Love
Won't hurt anymore,
It's an open source,
On a userfriendly shore.

it's GNOME-Love
Welcome aboard it's GNOME-love

]]></description>
			<content:encoded><![CDATA[<p>a <a href="http://wayofthemonkey.com/?date=2008-02-19">GNOME cruise</a>? I already have the theme song&#8230;</p>
<pre>
GNOME-Love Boat, love exciting and new,
Come aboard, we're expecting you.

The GNOME-Love Boat soon will be making another release,
The GNOME-Love Boat promises something for everyone.

Set a course for adventure,
Your box's on a new romance.

And GNOME-Love
Won't hurt anymore,
It's an open source,
On a userfriendly shore.

it's GNOME-Love
Welcome aboard it's GNOME-love
</pre>
]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/02/helm-set-a-course-for-love/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Paint the Silence/2</title>
		<link>http://log.emmanuelebassi.net/archives/2008/01/paint-the-silence2/</link>
		<comments>http://log.emmanuelebassi.net/archives/2008/01/paint-the-silence2/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 15:39:24 +0000</pubDate>
		<dc:creator>ebassi</dc:creator>
		
		<category>Hacking</category>

		<category>autotools</category>

		<guid isPermaLink="false">http://log.emmanuelebassi.net/archives/2008/01/paint-the-silence2/</guid>
		<description><![CDATA[Continuing the ongoing saga&#8230;
Using the --silence hackery from Jacob Berkman I found a way to finally STFU at least libtool. In your configure.ac add:

changequote(,)dnl
LIBTOOL=&#8220;\$(QUIET_LT)${LIBTOOL}&#8221;
changequote([,])dnl

Add a Makefile.decls file to the root of your project, containing:

QUIET_LT = @echo &#8216;&#160;&#160;&#160;&#160;&#8217; LIBTOOL $@;

And include it in every Makefile.am:

include $(top_srcdir)/Makefile.decls

This will silence all libtool invocations; you can make this all [...]]]></description>
			<content:encoded><![CDATA[<p><em>Continuing the <a href="http://log.emmanuelebassi.net/archives/2007/12/paint-the-silence/">ongoing saga</a>&#8230;</em></p>
<p>Using the <code>--silence</code> hackery from <a href="http://wednesdaynight.org/diary/2006/9/5">Jacob Berkman</a> I found a way to finally STFU at least libtool. In your <code>configure.ac</code> add:</p>
<pre>
changequote<span style="color:purple">(,)</span><span style="color:blue">dnl</span>
<span style="color:cyan">LIBTOOL</span><span style="color:orange">=</span><span style="color:red">&#8220;\$(QUIET_LT)${LIBTOOL}&#8221;</span>
changequote<span style="color:purple">([,])</span><span style="color:blue">dnl</span>
</pre>
<p>Add a <code>Makefile.decls</code> file to the root of your project, containing:</p>
<pre>
<span style="color:cyan">QUIET_LT</span> = @echo &#8216;&nbsp;&nbsp;&nbsp;&nbsp;&#8217; LIBTOOL $@;
</pre>
<p>And include it in every <code>Makefile.am</code>:</p>
<pre>
<span style="color:purple">include</span> <span style="color:blue">$(top_srcdir)</span>/Makefile.decls
</pre>
<p>This will silence all libtool invocations; you can make this all conditional, obviously: just sorround the <code>QUIET_*</code> declarations with <code>if VARIABLE...endif</code> and define <code>VARIABLE</code> using <code>AM_CONDITIONAL</code> in your configure template.</p>
<p>Now, I&#8217;ll just have to find a way to make gcc shut up<sup><a href="#footnote-1-238" id="footnote-link-1-238" class="footnote-link footnote-identifier-link" title="no, you cannot redefine CC, as it will be invoked by libtool as well">1</a></sup>, and so the saga will end with a third chapter.
</p>
<ol start="1" class="footnotes"><li id="footnote-1-238" class="footnote">no, you cannot redefine <code>CC</code>, as it will be invoked by libtool as well [<a href="#footnote-link-1-238" class="footnote-link footnote-back-link">&#8617;</a>]</li></ol>]]></content:encoded>
			<wfw:commentRss>http://log.emmanuelebassi.net/archives/2008/01/paint-the-silence2/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
