<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>simonpena.com &#187; Máster SW Libre</title>
	<atom:link href="http://simonpena.com/blog/category/mswl/feed/" rel="self" type="application/rss+xml" />
	<link>http://simonpena.com</link>
	<description>Una mezcla heterogénea de tecnología y desvaríos</description>
	<lastBuildDate>Tue, 24 Aug 2010 22:28:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>GObject Introspection has landed in Grilo!</title>
		<link>http://simonpena.com/blog/mswl/gobject-introspection-has-landed-in-grilo/</link>
		<comments>http://simonpena.com/blog/mswl/gobject-introspection-has-landed-in-grilo/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 20:28:41 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[GObject Introspection]]></category>
		<category><![CDATA[Grilo]]></category>
		<category><![CDATA[Igalia]]></category>
		<category><![CDATA[PyGObject]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=856</guid>
		<description><![CDATA[If you&#8217;re using Grilo from git, last patches enabled improved GObject Introspection so you can start using Python with PyGObject to develop your applications. A Python clone of the grilo-test-ui is provided, and should give you an idea of what can be done with these new bindings: basically enjoy all the power in Grilo without [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re using <a title="Grilo" href="http://live.gnome.org/Grilo" target="_blank">Grilo</a> from git, <a href="http://git.gnome.org/browse/grilo/log/" target="_blank">last patches</a> <span style="text-decoration: line-through;">enabled</span> improved <a title="GObject Introspection" href="http://live.gnome.org/GObjectIntrospection" target="_blank">GObject Introspection</a> so you can start using Python with <a title="PyGObject - GLib/GObject/GIO Python bindings" href="http://live.gnome.org/PyGObject" target="_blank">PyGObject</a> to develop your applications.</p>
<p>A Python clone of the grilo-test-ui is provided, and should give you an idea of what can be done with these new bindings: basically enjoy all the power in Grilo without needing to touch C code, and without us having to maintain manually created bindings.</p>
<p>If you&#8217;re a JavaScript user, then you need to watch bug <a title="Grilo's introspection data is incomplete/incorrect" href="https://bugzilla.gnome.org/show_bug.cgi?id=616961" target="_blank">#616961</a>. As JavaScript doesn&#8217;t support GParamSpecs yet (<a title=" Can't create a Javascript object for ParamSpec" href="https://bugzilla.gnome.org/show_bug.cgi?id=626047" target="_blank">#626047</a>), you&#8217;ll need <a title="Patch replacing GParamSpec annotations with uints." href="https://bugzilla.gnome.org/attachment.cgi?id=168225" target="_blank">this patch</a> which replaces GParamSpec annotations with uints. And now, time for unit testing with PyGObject!</p>
<div class="wp-caption aligncenter" style="width: 298px"><a href="http://picasaweb.google.es/lh/photo/OiE6HG9-wVUhZ6MfkkRzaQ?feat=embedwebsite"><img src="http://lh6.ggpht.com/_e7POG3HT_zk/TGwDf9o6mZI/AAAAAAAAApU/szsc99b8vyM/s288/grilo-gobject-introspection.png" alt="" width="288" height="141" /></a><p class="wp-caption-text">Using Grilo bindings from Python console</p></div>
<div class="wp-caption aligncenter" style="width: 298px"><a href="http://picasaweb.google.es/lh/photo/qyyg27AUtxo71P5_Cu2X_A?feat=embedwebsite"><img src="http://lh3.ggpht.com/_e7POG3HT_zk/TGwDgPfiYpI/AAAAAAAAApY/d18YwssyOtM/s288/grilo-test-ui-introspection.png" alt="" width="288" height="156" /></a><p class="wp-caption-text">grilo-test-ui using GObject Introspection bindings</p></div>
<div class="wp-caption aligncenter" style="width: 298px"><a href="http://picasaweb.google.es/lh/photo/ea6rSCmUo8kDXFXb7o-jKg?feat=embedwebsite"><img src="http://lh3.ggpht.com/_e7POG3HT_zk/TGwDgBnSI4I/AAAAAAAAApc/YDl4gD-0CV0/s288/gjs-grilo-introspection.png" alt="" width="288" height="99" /></a><p class="wp-caption-text">Missing GParamSpec when accessing from JavaScript</p></div>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/gobject-introspection-has-landed-in-grilo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Watch a product in (GNOME&#8217;s) Bugzilla</title>
		<link>http://simonpena.com/blog/mswl/watch-a-product-in-gnomes-bugzilla/</link>
		<comments>http://simonpena.com/blog/mswl/watch-a-product-in-gnomes-bugzilla/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 17:02:52 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[Bugzilla]]></category>
		<category><![CDATA[follow]]></category>
		<category><![CDATA[product]]></category>
		<category><![CDATA[watch]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=852</guid>
		<description><![CDATA[Another quick one: if you want to watch/follow a product in (GNOME&#8217;s) bugzilla, it is explained here. To watch an entire product, lookup the product in this page. This will show the default assignee (often productname-maint@gnome.bugs). Then add it your your watched users list. An easy one, but as it took me a while to [...]]]></description>
			<content:encoded><![CDATA[<p>Another quick one: if you want to watch/follow a product in (GNOME&#8217;s) bugzilla, it is explained <a href="https://bugzilla.gnome.org/userprefs.cgi?tab=email" target="_blank">here</a>.</p>
<blockquote><p>To watch an entire product, lookup the product in <a href="https://bugzilla.gnome.org/describecomponents.cgi" target="_blank">this page</a>. This will show the <em>default assignee</em> (often <tt><em>productname</em>-maint@gnome.bugs</tt>). Then add it your your watched users list.</p></blockquote>
<p>An easy one, but as it took me a while to find it,  I put it here as a reference.</p>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/watch-a-product-in-gnomes-bugzilla/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guadec Hispana 7: el principio</title>
		<link>http://simonpena.com/blog/mswl/guadec-hispana-7-el-principio/</link>
		<comments>http://simonpena.com/blog/mswl/guadec-hispana-7-el-principio/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 22:05:27 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[GUADEC-ES]]></category>
		<category><![CDATA[Jamp]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=839</guid>
		<description><![CDATA[Aunque se haya acabado ya la 7ª Guadec-Hispana, para mí siempre será el principio: la primera vez que aporté algo (por humilde que haya sido) a una conferencia de Software Libre. Fue una experiencia muy agradable, a pesar de que hablar delante de tanto hacker produzca cierta intimidación . Afortunadamente, la (estupenda) cena del día [...]]]></description>
			<content:encoded><![CDATA[<p>Aunque se haya acabado ya la 7ª Guadec-Hispana, para mí siempre será el principio: la primera vez que aporté algo (por humilde que haya sido) a una conferencia de Software Libre. Fue una experiencia muy agradable, a pesar de que hablar delante de tanto hacker produzca cierta intimidación <img src='http://simonpena.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Afortunadamente, la (estupenda) cena del día anterior me sirvió para ir conociendo un poco a la gente, y ver que no mordían: es gente muy maja. Desde luego, es algo totalmente recomendado, tanto si tenéis la oportunidad de presentar algo como si acudís de oyentes.</p>
<p>Todas las charlas quedaron grabadas en vídeo, y la organización se encargó también de recoger las presentaciones, así que no creo que se tarde mucho en publicarlas en la <a href="http://2010.guadec.es/guadec" target="_blank">página del evento</a>: son todas muy recomendables. Y, para ir haciendo boca, aquí están las mías: en ellas se habla de Jamp, la aplicación desarrollada en el módulo de Desktop &amp; Mobile del máster. ¡Que las disfrutéis!</p>
<div style="text-align: center;"><strong style="display: block; margin: 12px 0 4px;"><a title="Jamp: Un cliente para Jamendo" href="http://www.slideshare.net/spenap/jamp-un-cliente-para-jamendo">Jamp: Un cliente para Jamendo</a></strong></div>
<p style="text-align: center;"><object id="__sse4823851" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jamp-talk-100723101436-phpapp02&amp;stripped_title=jamp-un-cliente-para-jamendo" /><param name="name" value="__sse4823851" /><param name="allowfullscreen" value="true" /><embed id="__sse4823851" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=jamp-talk-100723101436-phpapp02&amp;stripped_title=jamp-un-cliente-para-jamendo" name="__sse4823851" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div id="__ss_4823851" style="text-align: center;">
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/spenap">Simón Pena</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/guadec-hispana-7-el-principio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JaMp talk at GUADEC-ES</title>
		<link>http://simonpena.com/blog/mswl/jamp-talk-at-guadec-es/</link>
		<comments>http://simonpena.com/blog/mswl/jamp-talk-at-guadec-es/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 18:47:27 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[GUADEC-ES]]></category>
		<category><![CDATA[Jamp]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=830</guid>
		<description><![CDATA[I&#8217;ve just finished writing the slides for the JaMp&#8216;s talk at the GUADEC-ES Maybe it&#8217;s still a bit longer than it should, but hey! So, if you want to know those issues we faced with JaMp (GObject signals, D-Bus -from both C and Python sides-, and some notes about the Maemo port) come visit us [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just finished writing the slides for the <a href="http://gitorious.org/mswl2010/jamp" target="_blank">JaMp</a>&#8216;s talk at the <a href="http://2010.guadec.es/guadec" target="_blank">GUADEC-ES</a> <img src='http://simonpena.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Maybe it&#8217;s still a bit longer than it should, but hey!</p>
<p>So, if you want to know those issues we faced with <a href="http://gitorious.org/mswl2010/jamp" target="_blank">JaMp</a> (GObject signals, D-Bus -from both C and Python sides-, and some notes about the Maemo port) come visit us to the Computer Science Faculty at A Coruña on 23rd July -next Friday- at 13:00. Grab the program <a href="http://2010.guadec.es/guadec/programa" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/jamp-talk-at-guadec-es/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another (general) status report</title>
		<link>http://simonpena.com/blog/mswl/another-general-status-report/</link>
		<comments>http://simonpena.com/blog/mswl/another-general-status-report/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 21:20:15 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Butaca]]></category>
		<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[Grilo]]></category>
		<category><![CDATA[Jamp]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[maevies]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=824</guid>
		<description><![CDATA[Some quick notes (the list of things which would deserve a full blog entry for themselves just keeps growing&#8230;) My manager (I don&#8217;t like how &#8220;boss&#8221; sounds) retired last week. Although he visited us a couple of days more to spend some time with us, things will be, at least, different. We&#8217;ll surely miss him. [...]]]></description>
			<content:encoded><![CDATA[<p>Some quick notes (the list of things which would deserve a full blog entry for themselves just keeps growing&#8230;)</p>
<ul>
<li>My manager (I don&#8217;t like how &#8220;boss&#8221; sounds) retired last week. Although he visited us a couple of days more to spend some time with us, things will be, at least, different. We&#8217;ll surely miss him.</li>
<li>I started working with <a href="http://live.gnome.org/Grilo" target="_blank">Grilo</a> at <a href="http://www.igalia.com/" target="_blank">Igalia</a>, as the practicum work for the <a href="http://www.mastersoftwarelibre.com/" target="_blank">Free Software Master</a>. I&#8217;ve been assigned a challenging task: improve the bindings infrastructure. Currently I&#8217;m getting familiar with the project, reading the doc and playing with the examples: it looks really interesting!</li>
<li>Yesterday I received permissions to <a href="http://wiki.maemo.org/Uploading_to_Extras" target="_blank">upload</a> <a href="http://extras-cauldron.garage.maemo.org/HOWTO.html#how-to-prepare-and-upload-source-packages-for-build" target="_blank">to</a> extras-devel, so&#8230; <a href="http://gitorious.org/butaca" target="_blank">maevies &amp; butaca-server</a> are available now! Of course, all <a href="http://wiki.maemo.org/Extras-devel" target="_blank">said warnings</a> about extras-devel still apply. In my case, it&#8217;s about memory consumption: the backend doesn&#8217;t free the objects exposed via DBus, so you have to kill it to get that done. It&#8217;s a small footprint and all that, but it&#8217;s not nice and of course not the way I want it: having it uploaded to extras will get me motivated to fix it <img src='http://simonpena.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  (Sure, there will be other issues as well, and I&#8217;ll set up the bugtracker as soon as possible)</li>
<li>I&#8217;ve started with the slides for the <a href="http://gitorious.org/mswl2010/jamp" target="_blank">JaMp</a> talk at <a href="http://2010.guadec.es/guadec/programa" target="_blank">GUADEC-ES</a>. There&#8217;s still time left, but with these things, you never know&#8230;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/another-general-status-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jamp is going to GUADEC-ES!</title>
		<link>http://simonpena.com/blog/mswl/jamp-is-going-to-guadec-es/</link>
		<comments>http://simonpena.com/blog/mswl/jamp-is-going-to-guadec-es/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 06:42:00 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[GUADEC-ES]]></category>
		<category><![CDATA[Jamp]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=816</guid>
		<description><![CDATA[The application we&#8217;ve been developing at the Desktop &#038; Mobile module in the Master has been accepted for a talk in the GUADEC-ES! More info on that soon, but you can start by checking the program. Or even better: why don&#8217;t you register and visit us?]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://gitorious.org/mswl2010/jamp" target="_blank">application</a> we&#8217;ve been developing at the <a href="http://www.mastersoftwarelibre.com/?page_id=273" target="_blank">Desktop &#038; Mobile</a> module in the Master has been accepted for a talk in the GUADEC-ES!</p>
<p>More info on that soon, but you can start by checking <a href="http://2010.guadec.es/guadec/programa" target="_blank">the program</a>. Or even better: why don&#8217;t you <a href="http://2010.guadec.es/guadec/registro" target="_blank">register</a> and visit us?</p>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/jamp-is-going-to-guadec-es/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>And now, introducing maevies</title>
		<link>http://simonpena.com/blog/mswl/and-now-introducing-maevies/</link>
		<comments>http://simonpena.com/blog/mswl/and-now-introducing-maevies/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 11:51:14 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Butaca]]></category>
		<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[maemo]]></category>
		<category><![CDATA[maevies]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=789</guid>
		<description><![CDATA[Back in October, a friend and I started a project targeting Maemo. We had been thinking about programming for maemo for a lot of time (but for Diablo devices), and Fremantle&#8216;s new UI, so appealing, almost got us buying a N900 (we ended up buying a HTC Tattoo, but that&#8217;s another story). At that moment, [...]]]></description>
			<content:encoded><![CDATA[<p>Back in October, <a href="http://picandocodigo.wordpress.com" target="_blank">a friend</a> and I started a project targeting Maemo. We had been thinking about programming for maemo for a lot of time (but for <a href="http://wiki.maemo.org/Internet_tablets" target="_blank">Diablo devices</a>), and <a href="http://wiki.maemo.org/Fremantle" target="_blank">Fremantle</a>&#8216;s new UI, so appealing, almost got us buying a N900 (we ended up buying a HTC Tattoo, but that&#8217;s another story).</p>
<p>At that moment, I was going to the cinema maybe twice a month, and as some of my friends have the (sometimes annoying) habit of waiting after the credits to see if the movie has extra scenes or something, I thought it would be nice if I had an app in my phone which could tell me if it was worth waiting. A nice brainstorm started, and we added showtimes and other movie info to the app, so Maevies -from <em>movies + maemo</em>- was born. After that, it was &#8220;just&#8221; a matter of researching which web services could provide that info.</p>
<p>We got the backend &#8220;working&#8221; rather soon. We started using librest and synchronous calls, so the user would be blocked until we got a response from the web services. We wanted to have a basic backend functionality, and quickly focus on the UI but&#8230; we stopped there. We met a couple of times to get started with the UI, but didn&#8217;t get too far.</p>
<p>About a month ago <a href="http://simonpena.com/blog/mswl/introducing-jamp-a-jamendo-client" target="_blank">I announced</a> that we were starting the development module in the master and that, after having enjoyed <a href="http://www.joaquimrocha.com/2010/04/25/python-class-at-master-in-free-software-0910/" target="_blank">an introduction to python</a>, I was quite convinced to port Maevies to Python. Then, <a href="http://simonpena.com/blog/mswl/introducing-jamp-a-jamendo-client/#comment-513" target="_blank">I commented</a> in the same post that I wouldn&#8217;t port it, but mimic the architecture we&#8217;re using for the master app: C with GObject for the model, and Python at the view, connected using DBus. Soon I had all the old maevies backend adapted to use GObject, all the librest references removed and replaced with libsoup&#8217;s, and a basic prototype with PyMaemo, with a fake behaviour like the one I would expect from the actual app.</p>
<p>Today, I can announce a &#8220;functional&#8221; pre-alpha version of Maevies. I&#8217;ve created a <a href="http://simonpena.com/projects/maevies/" target="_blank">page</a> for it at this blog, and linked it from the <a href="https://garage.maemo.org/projects/maevies/" target="_blank">maemo garage&#8217;s one</a>, have taken <a href="http://picasaweb.google.es/spenap/Maevies?feat=directlink" target="_blank">some screenshots</a>, and pushed the last commits (yeah, I also migrated from subversion to git, now that I&#8217;m feeling really comfortable with it).</p>
<p><strong>So what&#8217;s going on with maevies?</strong></p>
<ul>
<li>About the backend: A movie can be searched in <a href="http://www.themoviedb.org/">themoviedb.org</a> -getting its basic info- and <a href="http://whatsafterthecredits.com/" target="_blank">whatsafterthecredits.com</a> -getting the information about extra scenes. There is also a module which parses Google Movies html, not using GObject yet, but some changes in their API seem to have broken its support.</li>
<li>About the user interface: The user can query for a movie using themoviedb service, retrieve a list of results, and display the basic info for the selected movie. (The DBus service must be brought up manually, as I didn&#8217;t create the .service file to allow DBus doing it). Besides the screenshots below which should give the general idea, there&#8217;s this <a href="http://dl.dropbox.com/u/3321982/maevies-pre-alpha-3_screencast.ogg" target="_blank">screencast</a>. It has, however, a lot of flickering: it&#8217;s been recorded with the app running under Xephyr, using <a href="http://live.gnome.org/Istanbul" target="_blank">Istanbul</a>. If you know a better way to record a screencast, please drop me a comment <img src='http://simonpena.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p><strong>And what are the next steps?</strong></p>
<ul>
<li>Not all the TMDb retrieved data is exported via DBus, nor displayed later on the UI, so that would be a point.</li>
<li>It would be nice to display the movie images, also.</li>
<li>Bringing the whatsafterthecredits info to the UI would finally add the initially desired functionallity</li>
</ul>
<div class="wp-caption aligncenter" style="width: 298px"><a href="http://picasaweb.google.es/lh/photo/K04xy0vsJM4zxI5ALyyFww?feat=directlink"><img title="Maevies - Welcome window" src="http://lh5.ggpht.com/_e7POG3HT_zk/TATf1PC8u7I/AAAAAAAAAhk/nbQGM8n5ON0/s288/maevies-pre-alpha_welcome-window.png" alt="Maevies -  Welcome window" width="288" height="172" /></a><p class="wp-caption-text">Welcome Window</p></div>
<div class="wp-caption aligncenter" style="width: 298px"><a href="http://picasaweb.google.es/lh/photo/w5Xt4YKs_0JaFSVv0n2Rdw?feat=directlink"><img title="Maevies - Search dialog" src="http://lh6.ggpht.com/_e7POG3HT_zk/TATf1A-lEfI/AAAAAAAAAho/-En1rcF5fyo/s288/maevies-pre-alpha_search-window.png" alt="Maevies - Search dialog" width="288" height="173" /></a><p class="wp-caption-text">Search Dialog</p></div>
<div class="wp-caption alignleft" style="width: 298px"><a href="http://picasaweb.google.es/lh/photo/2_ny_D5Fy2wQM7akcLOGBA?feat=directlink"><img title="Maevies -  Search Results" src="http://lh4.ggpht.com/_e7POG3HT_zk/TATf1aMi9QI/AAAAAAAAAhw/2vF-lx6ij0I/s288/maevies-pre-alpha_search-results.png" alt="Maevies - Search results" width="288" height="173" /></a><p class="wp-caption-text">Search Results</p></div>
<div class="wp-caption alignleft" style="width: 298px"><a href="http://picasaweb.google.es/lh/photo/JdBpWpLsOtEHT1iefU76Sg?feat=directlink"><img title="Maevies - Movie Info" src="http://lh6.ggpht.com/_e7POG3HT_zk/TATf1ltryBI/AAAAAAAAAh0/MxwOl5GrTZ8/s288/maevies-pre-alpha_movie-info-up.png" alt="Maevies - Movie info" width="288" height="173" /></a><p class="wp-caption-text">Movie Info</p></div>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/and-now-introducing-maevies/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Discovering GObject signals</title>
		<link>http://simonpena.com/blog/mswl/discovering-gobject-signals/</link>
		<comments>http://simonpena.com/blog/mswl/discovering-gobject-signals/#comments</comments>
		<pubDate>Sat, 01 May 2010 16:25:09 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[Custom signals]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[GObject]]></category>
		<category><![CDATA[Jamp]]></category>
		<category><![CDATA[Signals]]></category>
		<category><![CDATA[signals creation]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=757</guid>
		<description><![CDATA[My first idea about this entry was to write down some things I learnt about GObject signals, while comparing them to what I feel is a close relative: C# events. However, after the first draft I think it&#8217;s better to focus on GObject now, and leave the comparison for another day. Credit should go to [...]]]></description>
			<content:encoded><![CDATA[<p>My first idea about this entry was to write down some things I learnt about GObject signals, while comparing them to what I feel is a close relative: C# events. However, after the first draft I think it&#8217;s better to focus on GObject now, and leave the comparison for another day. Credit should go to <a href="http://blogs.igalia.com/vjaquez/" target="_blank">Víctor Jáquez</a>, from <a href="http://www.igalia.com/" target="_blank">Igalia</a>, who explained me those things needed to start off. Don&#8217;t blame him, however, for the mistakes or misconceptions I may have <img src='http://simonpena.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>There&#8217;s a design pattern, the <a href="http://en.wikipedia.org/wiki/Observer_pattern" target="_blank">Observer pattern</a>, used to allow &#8220;subscribers&#8221; to track or follow state changes happening on an object, the &#8220;subject&#8221;. In C#, this is implemented via Events, in Java you have the Listeners, and in C, with GObject, you have signals. Going to the GObject implementation details:</p>
<pre>enum {
        END_OF_STREAM,
        LAST_SIGNAL
};

static guint
jmp_mplayer_signals[LAST_SIGNAL] = { 0 };
</pre>
<p>The enum &#8220;tags&#8221; our signals. In this case, we just have one: END_OF_STREAM. LAST_SIGNAL is a convention: as it is in the last place, it will be always &#8220;our last real signal&#8221; + 1. And that&#8217;s used in the next line, when we declare an array storing those signals: it will have &#8220;LAST_SIGNAL&#8221; size. It doesn&#8217;t store the signal itself, but its identifier, but we&#8217;ll see that later.</p>
<pre>jmp_mplayer_signals[END_OF_STREAM] =
                g_signal_newv ("end-of-stream",
                                G_TYPE_FROM_CLASS (klass),
                                G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS,
                                NULL,
                                NULL,
                                NULL,
                                g_cclosure_marshal_VOID__VOID,
                                G_TYPE_NONE,
                                0,
                                NULL);
</pre>
<p>That is how the signal is created. It calls the gobject function <a href="http://library.gnome.org/devel/gobject/stable/gobject-Signals.html#g-signal-newv" target="_blank">g_signal_newv</a> which creates the signal, and stores its identifier in the array position given. But, what means each of the params? Well, to be honest, I don&#8217;t know too much:</p>
<p>The first one is easy: &#8220;end-of-stream&#8221; is the signal name. The documentation sets some limitations to the characters it can contain, but that&#8217;s all.<br />
The second one is &#8220;the type this signal pertains to&#8221;. The macro <a href="http://library.gnome.org/devel/gobject/stable/gobject-Type-Information.html#G-TYPE-FROM-CLASS:CAPS" target="_blank">G_TYPE_FROM_CLASS</a> gets the type from the class structure (klass).<br />
The third one is composed by signal flags. They &#8220;specify detail of when the default handler is to be invoked&#8221;.<br />
I don&#8217;t know about the next three params: documentation says <em>class_closure</em>, <em>accumulator</em>, and <em>accu_data</em>. As soon as I learn what they do, I&#8217;ll update this. Setting them to NULL worked fine for my needs.<br />
The fourth one, called <em>c_marshaller</em>, sets the interface for the callbacks listening for our signals. So, in our example, g_cclosure_marshal_VOID__VOID means that we won&#8217;t require our callback functions to receive arguments. You can find more closures <a href="http://library.gnome.org/devel/gobject/stable/gobject-Closures.html#g-cclosure-marshal-VOID--VOID" target="_blank">here</a>.<br />
G_TYPE_NONE defines the return type for our callback, so our callback (closure) signature would have this form:</p>
<pre>void end_of_stream_callback (JmpMPlayer *self, gpointer user_data);
</pre>
<p>Our last two params are the length of param types, and an array of param types.</p>
<p>So, what is left? Well, our &#8220;subject&#8221; still has to notify (&#8220;emit&#8221;, in GObject) his subscribers. And those subscribers need to actually &#8220;subscribe&#8221; to the signal. Here we go:</p>
<pre>switch (GST_MESSAGE_TYPE (message)) {
        case GST_MESSAGE_EOS:
                g_signal_emit (self, jmp_mplayer_signals[END_OF_STREAM], 0);
                break;
</pre>
<p><a href="http://library.gnome.org/devel/gobject/stable/gobject-Signals.html#g-signal-emit" target="_blank">g_signal_emit</a> receives an instance the signal is being emitted on, the signal id (which we had previously stored in that array), and a <em>detail</em>. Quoting the <a href="http://library.gnome.org/devel/gobject/stable/signal.html" target="_blank">documentation</a>,</p>
<blockquote><p>detail identifies the specific detail of the signal to invoke. A detail is a kind of magic token/argument which is passed around during signal emission and which is used by closures connected to the signal to filter out unwanted signal emissions. In most cases, you can safely set this value to zero. See <a href="http://library.gnome.org/devel/gobject/stable/signal.html#signal-detail" target="_blank">the section called &#8220;The detail argument&#8221;</a> for more details about this parameter.</p></blockquote>
<p>And this closes the circle: subscribing to the signal.</p>
<pre>g_signal_connect (jmplayer, "end-of-stream",
                          G_CALLBACK (end_of_stream_callback), loop);
</pre>
<p><a href="http://library.gnome.org/devel/gobject/stable/gobject-Signals.html#g-signal-connect" target="_blank">g_signal_connect</a> connects a given callback (G_CALLBACK (end_of_stream_callback), whose signature we saw before), with a signal in an instance (jmplayer), passing arguments (loop)</p>
<p>To write this entry, I&#8217;ve relied on two documents: <a href="http://library.gnome.org/devel/gobject/stable/gobject-Signals.html" target="_blank">API Reference&#8217;s Signals</a> and <a href="http://library.gnome.org/devel/gobject/stable/signal.html" target="_blank">The GObject messaging system&#8217;s Signals</a>, and the (yet little) knowledge I acquired during this stage of <a href="http://gitorious.org/mswl2010/jamp" target="_blank">Jamp</a> implementation (which, itself, required <a href="http://blogs.igalia.com/vjaquez/" target="_blank">Víctor</a>&#8216;s help and said documentation). Full code for this example is available at Gitorius, for both the <a href="http://gitorious.org/mswl2010/jamp/blobs/master/src/jmp-mplayer.c" target="_blank">&#8220;subject&#8221;</a> and the <a href="http://gitorious.org/mswl2010/jamp/blobs/master/test/jmplayer-test.c" target="_blank">&#8220;subscriber&#8221;</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/discovering-gobject-signals/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing Jamp: a Jamendo client.</title>
		<link>http://simonpena.com/blog/mswl/introducing-jamp-a-jamendo-client/</link>
		<comments>http://simonpena.com/blog/mswl/introducing-jamp-a-jamendo-client/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 08:28:08 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[Jamp]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=751</guid>
		<description><![CDATA[This last weekend we had two very interesting sessions in the Destkop and Mobile development module. On Friday,  it was an introduction to Python, followed by a PyGTK app. While the app was very simple, it covered the basics: using containers to add widgets, handling signals, setting callback functions. I liked it so much that [...]]]></description>
			<content:encoded><![CDATA[<p>This last weekend we had two very interesting sessions in the<a href="http://www.mastersoftwarelibre.com/?page_id=273" target="_blank"> Destkop and Mobile development</a> module. On Friday,  it was an <a href="http://www.joaquimrocha.com/2010/04/25/python-class-at-master-in-free-software-0910/" target="_blank">introduction to Python</a>, followed by a <a href="http://www.pygtk.org/" target="_blank">PyGTK</a> app. While the app was very simple, it covered the basics: using containers to add widgets, handling signals, setting callback functions. I liked it so much that I&#8217;m seriously considering porting <a href="https://garage.maemo.org/projects/maevies/" target="_blank">maevies</a> (the maemo app a friend and I are developing, stalled for some months) to PyGTK. After all, all we needed was <a href="http://moblin.org/projects/librest" target="_blank">libRest</a>, and I&#8217;m confident that Python has something similar.</p>
<p>But that was on Friday. On Saturday, we started with the first workshop. During the module, we are going to develop a Gnome desktop application, which will be later ported / adapted to Maemo: a <a href="http://www.jamendo.com/en/" target="_blank">Jamendo</a> client called <a href="http://gitorious.org/mswl2010/jamp" target="_blank">Jamp</a>. The application has ben designed / is being designed with that port in mind, so hopefully we won&#8217;t need too many changes to achieve it. We&#8217;ve been distributed between three teams: UI with PyGTK, web API connection with <a href="http://live.gnome.org/LibSoup" target="_blank">libsoup</a>, and multimedia playback, with <a href="http://gstreamer.freedesktop.org/" target="_blank">gstreamer</a>. Wikipedia <a href="http://en.wikipedia.org/wiki/Jamendo" target="_blank">says</a></p>
<blockquote><p><strong>Jamendo</strong> is a music platform and community.</p>
<p>All music on Jamendo is free to download and licensed through one of  several Creative Commons licenses or the Free Art License, making it legal to  copy and share, as well as to modify and make commercial use of for  some, depending on the license. Jamendo allows streaming of all of its  thousands of albums in either Ogg Vorbis or MP3 format, and  downloads through the BitTorrent and eDonkey networks.</p></blockquote>
<p>So, while we learn, we&#8217;ll be contributing to a Good Thing™ <img src='http://simonpena.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . I&#8217;m very motivated about using git, doing a team development, submitting patches, and enjoying such a collaborative environment.</p>
<p>I&#8217;ll try to keep you updated <img src='http://simonpena.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/introducing-jamp-a-jamendo-client/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The importance of a good IDE: which one to choose (and why)?</title>
		<link>http://simonpena.com/blog/mswl/the-importance-of-a-good-ide-which-one-to-choose-and-why/</link>
		<comments>http://simonpena.com/blog/mswl/the-importance-of-a-good-ide-which-one-to-choose-and-why/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 19:13:16 +0000</pubDate>
		<dc:creator>Simón</dc:creator>
				<category><![CDATA[Máster SW Libre]]></category>
		<category><![CDATA[ESbox]]></category>
		<category><![CDATA[IDE War]]></category>
		<category><![CDATA[maemo]]></category>

		<guid isPermaLink="false">http://simonpena.com/?p=734</guid>
		<description><![CDATA[A few months ago, when I was trying to start developing for maemo, I discovered a project called ESbox. ESbox is &#8220;an Eclipse Ganymede-based product that helps programmers to develop applications for Maemo platform using Scratchbox Apophis&#8221;. It launches scratchbox transparently, includes wizards for different types of apps, lets you debug step by step and [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago, when I was trying to start developing for <a href="http://maemo.org/" target="_blank">maemo</a>, I discovered a project called <a href="http://esbox.garage.maemo.org/2nd_edition/" target="_blank">ESbox</a>. ESbox is <em>&#8220;an Eclipse Ganymede-based product that helps programmers to develop applications for Maemo platform using Scratchbox Apophis&#8221;</em>. It launches scratchbox transparently, includes wizards for different types of apps, lets you debug step by step and on device, and also uses C/C++ or Python plugins, so you can refactor code, jump to variable declarations, explore types, autocomplete&#8230;</p>
<p>I don&#8217;t know exactly when it was, but I once came to maemo IRC channel to ask a specific (maybe too specific) question about ESbox. I was surprised that nobody was using it: people there were using <a href="http://www.nano-editor.org/" target="_blank">nano</a>, <a href="http://en.wikipedia.org/wiki/Vi" target="_blank">vi</a>, <a href="http://www.gnu.org/software/emacs/" target="_blank">Emacs</a>&#8230; I asked them about all the features a &#8220;full IDE&#8221; offers: what about code refactoring? what about autocompletion? debugging? While some said that you can get emacs to auto-complete from a given dictionary, the other questions remained unanswered. In fact, I almost felt like we weren&#8217;t talking the same language.</p>
<p>Our discussion wasn&#8217;t constructive at all: I don&#8217;t know if it was the language barrier, if it was me who said something inappropriate in the beginning, or if I met people too &#8220;Taliban&#8221;. The thing is that I had to listen things like &#8220;real programmers know the name of the functions / methods they need: autocompletion is for dumbs&#8221;. And no, it wasn&#8217;t a joke like &#8220;real programmers develop their own device drivers&#8221;. So I gave up and left the channel: I assumed that programmers would choose their IDEs according to the kind of development they were doing, so &#8220;hobbyists&#8221; would use nano, would copy &#038; paste and wouldn&#8217;t care too much about extras, and &#8220;professionals&#8221; &#160;would use others, or at least would know and use the extras I wanted. And time went by.</p>
<p>As I was telling you in the last post, this Friday we&#8217;ve got our first session in the Desktop &#038; Mobile development module of the master. After its presentation, we had a brainstorming to choose which app we will be developing during the workshops, and then&#8230; we started talking about IDEs. More specifically, Emacs.</p>
<p>That gave me the opportunity to confirm that there really was a difference between professional developers and non-professional, and that my worries were really shared by others. It was a really interesting chat, where we were explained the environment, from the basics (navigation a buffer, open, close, <em>kill and yank</em>&#8230;) to more complex things: debugger integration, syntax highlighting modules, autocompletion, macros&#8230;</p>
<p>After the session, I now can understand other people not using Eclipse or Netbeans, while still being productive. I&#8217;m not going to use Emacs, not yet, as it looked like some of the features that &#8220;just work&#8221; in Eclipse require some fiddling in Emacs; but at least I know that someone using Emacs and mastering it will be as efficient as an Eclipse user -or even more.</p>
<p>Still, when I think about the things I like to have working in Eclipse, the following comes:</p>
<ul>
<li>Version control: I&#8217;d like to be able to check history, undo changes across revisions, commit changes, check &#8220;who did what&#8221; (<em>blame</em>)</li>
<li>Debugging: Set breakpoints, set conditional breakpoints, step by step debugging, variable inspection</li>
<li>Syntax highlighting, code folding, autocompletion (preferable if it can include code I&#8217;ve done, not only know APIs), code refactoring (variable names, methods, etc), comment &#038; uncomment.</li>
<li>Compilation management: Make integration (or other options like ant or maven for Java). Build automatically, &#8220;live&#8221; syntax error detection.</li>
<li>Bug tracking system integration</li>
<li>GUI editor</li>
</ul>
<p>I know that I can do all of the above using Eclipse, and since this Friday I know that some of them are also possible with Emacs, so now I&#8217;d like to have some feedback:</p>
<p>What do you expect in an IDE? Is your list similar to mine? What is your IDE of choice? Which special options of your IDE you use the most? Which options are you most proud of?</p>
]]></content:encoded>
			<wfw:commentRss>http://simonpena.com/blog/mswl/the-importance-of-a-good-ide-which-one-to-choose-and-why/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
