<?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/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>Johan Dahlin &#187; General</title>
	<atom:link href="http://blogs.gnome.org/johan/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.gnome.org/johan</link>
	<description>Just another GNOME Blogs weblog</description>
	<lastBuildDate>Thu, 09 Feb 2012 18:10:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Writing a mixed Gtk / Javascript application</title>
		<link>http://blogs.gnome.org/johan/2012/02/09/writing-a-mixed-gtk-javascript-application/</link>
		<comments>http://blogs.gnome.org/johan/2012/02/09/writing-a-mixed-gtk-javascript-application/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 18:10:43 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[olpc]]></category>
		<category><![CDATA[PyGTK]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/?p=97</guid>
		<description><![CDATA[In my last blog post I mentioned the embedding of a javascript library inside Stoq. I got a couple of requests which asked me how this was accomplished, this blog post attempts to explain some of it. Of course we &#8230; <a href="http://blogs.gnome.org/johan/2012/02/09/writing-a-mixed-gtk-javascript-application/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In my last <a title="Stoq 1.2" href="http://blogs.gnome.org/johan/2012/02/08/stoq-1-2-1/">blog post</a> I mentioned the embedding of a <a href="http://www.arshaw.com/fullcalendar/">javascript library</a> inside Stoq. I got a couple of requests which asked me how this was accomplished, this blog post attempts to explain some of it.</p>
<p>Of course we need to use the great <a href="http://www.webkitgtk.org/">WebKitGtk</a> library. Unfortunately we cannot use the introspection based bindings as this needs to work on Gtk+ 2.18 and PyGTK 2.17 which were shipped in the last Ubuntu LTS release.</p>
<p>WebView will do all the html/css/js parts. It&#8217;s almost as simple as a normal GtkTextView, add it to a scrolled window, load the content and off you go.</p>
<p>The first challange comes when you want to open http:// links in your normal browser, instead of handling them in your webkit. To do that you need to listen the navigation-policy-decision-requested signal ignore certain requests. You don&#8217;t actually need to use http protocols, you can invent any url which is parsable.</p>
<p>Next problem is AJAX, to write a proper asynchronous widget you don&#8217;t want to reload the whole page when something changes. Since we cannot implement our own protocols in the old libsoup bindings shipped for <a href="http://www.pygtk.org/">PyGTK</a> we need to run our own http server. That is good for other reasons as well, we can do heavy IO such as database queries in there without actually blocking the user interaction.</p>
<p>When we need to execute scripting in gtk we just call web_view_execute_script() which will just execute a piece of javascript. For instance,</p>
<p>view.execute_script(&#8220;document.title = $(&#8216;fc-header-title&#8217;).text()&#8221; is a actual <a title="file calendar.py line 187" href="http://bazaar.launchpad.net/~stoq-dev/stoq/master/view/head:/stoq/gui/calendar.py#L178">line</a> in <a href="http://www.stoq.com.br/">Stoq</a>, it sets the window title based on calendar header title from the dom.</p>
<p>Going the other direction is a bit uglier, the only way of communcation I found out was opening new urls, so I implemented an application specific domain which opens a dialog or some other action within the gtk application.</p>
<p>I know that some of these tricks are already outdated, in newer webkitgtk versions you should write your own libsoup handlers, use the gobject dom bindings for communication, but I didn&#8217;t have these options when writing this post</p>
<p>TL;DR</p>
<ul>
<li>Listen to the <strong>::navigation-policy-decision-requested</strong> to implement your own uri handling if you can&#8217;t do it via libsoup.</li>
<li>Run a separate daemon process which will serve as an internal webserver, so AJAX calls work and won&#8217;t block on IO.</li>
<li>Use web_view_execute_script() for Gtk-&gt;Javascript communication</li>
<li>Use window.location = &#8220;customprotocol://&#8221;  for Javascript -&gt;Gtk communication</li>
<li>Make the javascript parts work in a normal browser so the normal developer tools can be used</li>
<li>If possible, use a newer version of WebKitGtk and avoid all of this.</li>
</ul>
<p>Xan and the other webkit hackers will probably look at me in disgust for telling you how to do all of these dirty hacks <img src='http://blogs.gnome.org/johan/wp-content/mu-plugins/tango-smilies/tango/face-wink.png' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2012/02/09/writing-a-mixed-gtk-javascript-application/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Stoq 1.2</title>
		<link>http://blogs.gnome.org/johan/2012/02/08/stoq-1-2-1/</link>
		<comments>http://blogs.gnome.org/johan/2012/02/08/stoq-1-2-1/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 18:52:00 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[olpc]]></category>
		<category><![CDATA[PyGTK]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/?p=88</guid>
		<description><![CDATA[We released Stoq 1.2 last week, this release features quite a bit of features: Calendar application It&#8217;s now possible to list payments, purchase orders and client calls in a graphical view: &#160; It might look familiar, it uses the fantastic javascript &#8230; <a href="http://blogs.gnome.org/johan/2012/02/08/stoq-1-2-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Async" href="http://www.async.com.br" target="_blank">We</a> released <a href="http://www.stoq.com.br/">Stoq 1.2 </a>last week, this release features quite a bit of features:</p>
<h3>Calendar application</h3>
<p>It&#8217;s now possible to list payments, purchase orders and client calls in a graphical view:</p>
<p>&nbsp;</p>
<p><a href="http://blogs.gnome.org/johan/files/2012/02/Captura-de-tela-em-2012-02-08-163703.png"><img class="aligncenter size-full wp-image-90" src="http://blogs.gnome.org/johan/files/2012/02/thumbnail.png" alt="" width="599" height="394" /></a></p>
<p>It might look familiar, it uses the fantastic javascript library <a href="http://www.arshaw.com/fullcalendar/" target="_blank">fullcalendar</a>. We really wanted to use a normal GtkWidget for the calendar but it would have been a lot more work to rip out half of evolution. If there are any other options that can match fullcalendars functionallity there we&#8217;d be open to switching as embedding <a href="http://www.webkitgtk.org/" target="_blank">WebKit</a>, <a href="http://www.jquery.com/" target="_blank">jQuery</a> and fullcalendar in a Gtk+ application is not ideal.</p>
<h3>Configurable keyboard shortcuts</h3>
<p>This is something that has been requested many times over the years. It makes it easier to remap the keyboard bindings use often to other keys, such as the function keys. There&#8217;s still an open task to redo all the existing keybindings that aren&#8217;t uniform enough.</p>
<h3>Configurable form fields</h3>
<p>Some companies does not use all the form fields (fax anyone?) that we show per default and Stoq know has a configuration interface where you can make fields non-mandatory and even hide them if you don&#8217;t wish to see them. Perfect for the first steps of localization.</p>
<h3>New manual</h3>
<p>One of our interns rewrote old docbook manual to mallard, and it looks beatiful and is now well integrated in the application. You can find the online version <a title="Stoq Manual" href="http://doc.stoq.com.br/manual/" target="_blank">here</a>. It involved removing a lot of screenshots and text. It&#8217;ll be easier to update the manual in the future if there aren&#8217;t any screenshots. He also fixed the interface, there are now various help buttons in the application that goes to a help section describing that part.</p>
<h3>Localization support</h3>
<p>It&#8217;s now possible to configure some of the fields that are specific to each region/country. The only thing that made it into this release was company identification number (Brazil: CNPJ, Sweden: Organisationnr, US: Employer Identification Number). But person identification number and list of states has landed in the code repository since the release. We still need someone to step up and start doing the actual localization for this, be the hero of the day and download Stoq and start localizing it!</p>
<h3>Boleto Bancário (Bank invoice)</h3>
<p>Brazilian banks supports a kind of invoice with a barcodes/numbers, called <em>boleto bancário.</em> It&#8217;s semi-standardadized, most of the data is similar, but you need to special case each bank that should be supported. There are two kinds, with and without <em>cobrança</em> (for eventually sending to a collection agency). There are a couple of 100 active banks and about 15 major ones. Stoq currently supports 7: Banco do Brasil, Banco Real, Banco Santander, Banco Bradesco, Caixa Econômica, Banrisul, Banco Itaú. All without cobrança though, support for that will come in a future release.</p>
<h3>Call for volunteers</h3>
<p>Stoq has initially been targeting the Brazilian market, since that what&#8217;s close to the current development team. But there is now longer an excuse for not trying to use it. We can barely handle the legal part of Brazil and we&#8217;d need volunteer help to make it possible to use in other countries. We&#8217;re very proud of the application so we wouldn&#8217;t want to stop you just because you live outside of Brazil!</p>
<p>So, why don&#8217;t you <a href="http://wiki.stoq.com.br/index.php/Stoq_plugin_for_bzr" target="_blank">grab the code</a> and get started, it&#8217;s all python (and a tiny bit of javascript) and shouldn&#8217;t be hard to get started.</p>
<p>Don&#8217;t be discouraged by the web site and manual is only in Portuguese, we use gettext and <a title="Rosetta" href="https://translations.launchpad.net/stoq" target="_blank">rosetta</a> and the code is modular and easy to understand.</p>
<p>We&#8217;ll need a lot of work to support localization in different countries such as: company/person formats, states, taxes and other things we don&#8217;t know about yet, let us know and we&#8217;ll try to find a solution.</p>
<p>Just send <a href="mailto:johan_NOSPAM_@_NOSPAM_gnome.org" target="_blank">me</a> a mail or come in on our new shiny web chat: <a title="Web Chat" href="http://chat.stoq.com.br/" target="_blank">http://chat.stoq.com.br/</a> (aka #stoq on freenode)</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2012/02/08/stoq-1-2-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Launching Stoq 1.1</title>
		<link>http://blogs.gnome.org/johan/2011/12/07/releasing-stoq-1-1/</link>
		<comments>http://blogs.gnome.org/johan/2011/12/07/releasing-stoq-1-1/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 16:59:05 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[olpc]]></category>
		<category><![CDATA[PyGTK]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/?p=75</guid>
		<description><![CDATA[We&#8217;re launching Stoq 1.1 today, which is a POS/CRM/accounting/industrial application mainly for the Brazilian market. In short the kind of software you&#8217;d use in a supermarket, bakery, cloth shop, manufacturing company etc. It&#8217;s written in Gtk/Python/PostgreSQL and is available for &#8230; <a href="http://blogs.gnome.org/johan/2011/12/07/releasing-stoq-1-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re launching Stoq 1.1 today, which is a POS/CRM/accounting/industrial application mainly for the Brazilian market. In short the kind of software you&#8217;d use in a supermarket, bakery, cloth shop, manufacturing company etc.</p>

<a href='http://blogs.gnome.org/johan/2011/12/07/releasing-stoq-1-1/stoq-1-1-screenshot/' title='Stoq 1.1'><img width="150" height="137" src="http://blogs.gnome.org/johan/files/2011/12/Stoq-1.1-screenshot.png" class="attachment-thumbnail" alt="Application selector" title="Stoq 1.1" /></a>
<a href='http://blogs.gnome.org/johan/2011/12/07/releasing-stoq-1-1/stoq-1-1-compras/' title='Stoq-1.1-compras'><img width="150" height="137" src="http://blogs.gnome.org/johan/files/2011/12/Stoq-1.1-compras.png" class="attachment-thumbnail" alt="Purchase application" title="Stoq-1.1-compras" /></a>

<p>It&#8217;s written in Gtk/Python/PostgreSQL and is available for Linux/Windows. Free software (GPL), stable, fast and beautiful!</p>
<p>New for this release is the reorganization of the applications to always fit into one window (conceptually similar to evolution/outlook) and a new application selector which should make it easier to switch between different parts of the app.</p>
<p>It&#8217;s fully translated and can be used outside of Brazil, even though a few small details are oriented around the fiscal requirements set by the brazilian government.</p>
<p>There&#8217;s a livecd available on Ubuntu, so you can just download it and try it out.</p>
<p>For more information see <a href="http://www.stoq.com.br/" title="Stoq website" target="_blank">http://www.stoq.com.br/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2011/12/07/releasing-stoq-1-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Interview in Portuguese</title>
		<link>http://blogs.gnome.org/johan/2011/06/22/interview-in-portuguese/</link>
		<comments>http://blogs.gnome.org/johan/2011/06/22/interview-in-portuguese/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 16:27:40 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[olpc]]></category>
		<category><![CDATA[PyGTK]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/?p=67</guid>
		<description><![CDATA[A couple of weeks ago I did another first &#8211; a recorded interview in Portuguese, thanks to the great host Og Maciel. I had a great time and we talked about my involvement in GNOME, Stoq together with a bunch of &#8230; <a href="http://blogs.gnome.org/johan/2011/06/22/interview-in-portuguese/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I did another first &#8211; a recorded interview in Portuguese, thanks to the great host <a title="Open Source Guy" href="http://blog.ogmaciel.com/">Og Maciel</a>.</p>
<p>I had a great time and we talked about my involvement in <a title="GNOME" href="http://www.gnome.org">GNOME</a>, <a title="Stoq" href="http://www.stoq.com.br/">Stoq</a> together with a bunch of other random topics, check it out at:</p>
<p><a href="http://www.castalio.info/johan-dahlin-stoq-gestor-comercial-livre/">http://www.castalio.info/johan-dahlin-stoq-gestor-comercial-livre/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2011/06/22/interview-in-portuguese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using LLVM to speed up function invocation in a dynamic language binding</title>
		<link>http://blogs.gnome.org/johan/2010/07/08/using-llvm-to-speed-up-function-invocation-in-a-dynamic-language-binding/</link>
		<comments>http://blogs.gnome.org/johan/2010/07/08/using-llvm-to-speed-up-function-invocation-in-a-dynamic-language-binding/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 18:04:45 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[olpc]]></category>
		<category><![CDATA[PyGTK]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/?p=54</guid>
		<description><![CDATA[With the recent release of PyGObject I decided to take a look into something I&#8217;ve been meaning to do for some time, using the excellent LLVM library to make things go faster. But first some brief history. Back in the old PyGTK &#8230; <a href="http://blogs.gnome.org/johan/2010/07/08/using-llvm-to-speed-up-function-invocation-in-a-dynamic-language-binding/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>With the recent release of PyGObject I decided to take a look into something I&#8217;ve been meaning to do for some time, using the excellent <a title="LLVM" href="http://www.llvm.org">LLVM</a> library to make things go faster.</p>
<p>But first some brief history. Back in the old PyGTK and pygtk-codegen days all functions were created at compile time generating all the Python&lt;-&gt;C wrappers that you would ever need. This is problematic for various reasons:</p>
<div id="_mcePaste">
<ul>
<li>each binding needs to be generated before using it and thus you need a Python extension module for each library you use.</li>
<li>the code generator generated straight-forward wrappers. Not a problem for a small library, but Gtk has almost 200 classes and more than 3000 functions/methods which all need to be registered when you import gtk, which takes time and memory.</li>
</ul>
</div>
<div><a href="http://live.gnome.org/GObjectIntrospection">GObject-introspection</a> and PyGI solves both of these problems. Typelibs are created in the upstream library and the classes and functions wrappers are created in runtime when you use them. One important thing changed though. Invokation of the native functions are no longer done through generated code, we&#8217;re using <a title="libffi" href="http://sourceware.org/libffi/">libffi</a> to do function invokation completely in runtime. This works pretty well but it&#8217;s much slower than the old generated functions.</div>
<div>This is where LLVM enters the picture. LLVM is a compiler infrastructure framework. It&#8217;s basically a full C/C++ compiler/assembler/linker split into reusable libraries. I decided to take a look into using LLVM to optimize the function invokation by generate native code for the functions lazily using the the LLVM JIT.</div>
<div id="_mcePaste">I can now announce that after experimenting with it I&#8217;ve been able to get it to a point where it&#8217;s usable enough to run benchmarks on. That doesn&#8217;t mean it&#8217;s feature complete, as only a few types such as double,int32,int64,object, so it&#8217;s far from supporting a complete application. Anyway, let me present some numbers. First function,</div>
<div id="_mcePaste">
<ul>
<li><a href="http://git.gnome.org/browse/gobject-introspection/tree/gir/everything.c#n71">test_uint64</a>: <strong>19.9x</strong> faster</li>
<li><a href="http://library.gnome.org/devel/glib/stable/glib-Random-Numbers.html#g-random-double-range">g_random_double_range</a>(): <strong>20.5x</strong> faster</li>
<li><a href="http://git.gnome.org/browse/gobject-introspection/tree/gir/gimarshallingtests.c#n3113">gi_marshalling_tests_object_new</a>(): <strong>1.01x</strong> faster (1.5%)</li>
</ul>
</div>
<div id="_mcePaste">
<div id="_mcePaste">The first two ares an extreme examples as the functions does very little. But it&#8217;s great as it will *only* exercise the time it takes to convert an argument to/from native types.</div>
</div>
<div>The last function is not speed up considerably because the time spend most of its time inside the function itself, instantiating GObjects is far more computational expensive than converting Python wrappers back and forth.</div>
<div id="_mcePaste">This work in progress can be found in the <a title="llvm" href="http://git.gnome.org/browse/pygobject/log/?h=llvm">llvm</a> branch of <a href="http://git.gnome.org/browse/pygobject/">pygobject</a></div>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2010/07/08/using-llvm-to-speed-up-function-invocation-in-a-dynamic-language-binding/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Bridging the development gap between desktop and web</title>
		<link>http://blogs.gnome.org/johan/2010/03/30/bridging-the-development-gap-between-desktop-and-web/</link>
		<comments>http://blogs.gnome.org/johan/2010/03/30/bridging-the-development-gap-between-desktop-and-web/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 23:25:34 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/?p=44</guid>
		<description><![CDATA[One of the reasons JavaScript was chosen as the language for GNOME Shell is as Owen mentions: &#8220;&#8230; a lot of people are familiar with it from the web.&#8221;. It&#8217;s not a new idea but certainly an exciting one. Who &#8230; <a href="http://blogs.gnome.org/johan/2010/03/30/bridging-the-development-gap-between-desktop-and-web/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One of the reasons JavaScript was chosen as the language for GNOME Shell is as <a title="Behind the Scenes with Owen Taylor" href="http://gnomejournal.org/article/74/behind-the-scenes-with-owen-taylor">Owen mentions</a>: &#8220;&#8230; a lot of people are familiar with it from the web.&#8221;. It&#8217;s not a new idea but certainly an exciting one. Who wouldn&#8217;t want to be able to run their desktop application on the web or their web application in a desktop environment?</p>
<p>A fairly common complaint about <a href="http://live.gnome.org/Gjs">Gjs</a> is that it&#8217;s not possible to use cairo from it. Cairo bindings were recently committed to Gjs, but I didn&#8217;t quite find the time to write a couple of nice applications demonstrating how to use it. But instead of writing my own blingy cairo application I thought, wouldn&#8217;t it be nicer if I could just take a canvas demo from the web and with minimal modifications run it on top of gjs with cairo?</p>
<p>The missing piece to that goal is a <a href="http://dev.w3.org/html5/canvas-api/canvas-2d-api.html">HTML5 Canvas &amp; CanvasRenderingContext2D API</a> on top of the cairo binding. After a couple of bug fixes in gjs I got it to a point where I could run a slightly modified version of a simple clock example in gjs:</p>
<p><a href="http://blogs.gnome.org/johan/files/2010/03/clock-javascript.png"><img class="alignnone size-full wp-image-46" title="Left Clock in HTML, Right Clock in Gtk+ " src="http://blogs.gnome.org/johan/files/2010/03/clock-javascript.png" alt="" width="605" height="332" /></a></p>
<p>The screenshot aboves shows the same code running in the browser to the left, in HTML. To the right is the same code running on top of Gtk+, before you ask, the source code can be found <a href="http://github.com/jdahlin/javascript-clock">here on my github page</a>. If you want to run this you&#8217;ll need patches from <a href="https://bugzilla.gnome.org/show_bug.cgi?id=614413">these two</a> <a href="https://bugzilla.gnome.org/show_bug.cgi?id=612228">bugs applied</a> first.</p>
<p>There are a couple of other APIs that would be nice to have in Gjs such as DOM, Storage, WebGL. I didn&#8217;t try to implement these, but let&#8217;s hope someone does so the GNOME developer environment can provide familiar apis for the huge pool of web developers out there.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2010/03/30/bridging-the-development-gap-between-desktop-and-web/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>News from the introspection world</title>
		<link>http://blogs.gnome.org/johan/2009/12/04/news-from-the-introspection-world/</link>
		<comments>http://blogs.gnome.org/johan/2009/12/04/news-from-the-introspection-world/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 00:18:58 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[olpc]]></category>
		<category><![CDATA[PyGTK]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/?p=40</guid>
		<description><![CDATA[There has been a number of recent developments in the world of introspection, let me summarize some of them: First of all, the litl got uncovered and released a couple of weeks ago. The whole litl software platform is heavily &#8230; <a href="http://blogs.gnome.org/johan/2009/12/04/news-from-the-introspection-world/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>There has been a number of recent developments in the world of introspection, let me summarize some of them:</p>
<p>First of all, the litl got uncovered and released a couple of weeks ago. The whole litl software platform is heavily dependent on the introspection parts and on the gjs, the spidermonkey javascript bindings. It&#8217;s been a great experience of easily being able to move code between javascript and C as we see fit. Adding a new method to a GObject class in C is just a make a away from making it available to the javascript bindings. <a href="http://blogs.gnome.org/lucasr/2009/11/04/litl-webbook-some-technical-comments/">Lucas</a> and <a href="http://cananian.livejournal.com/58744.html">Scott</a> have written more about the technical parts of the litl.</p>
<p>Gjs has recently gained callback support, which has been kind of a personal pet peeve for me. Making sure that functions and methods with callbacks are possible to call from a language binding has always been difficult. GClosure sort of solves that problem, unfortunately very few libraries actually use them. Most of the tricky work of landing callback support in Gjs was done by Maxim Ermilov, rock on!</p>
<p>The Python bindings are also moving along pretty quickly. <a title="Tomeu Vizoso" href="http://blog.tomeuvizoso.net/">Tomeu Vizoso</a> and <a title="Simon Van Der Linden" href="http://simon.vanderlinden.eu.org/">Simon Van Der Linden</a> has been working aggressively on making them solid. The rumor tells me that Tomeu has the whole OLPC Sugar interface running on top the new bindings, with significant speed and memory improvments!</p>
<p>Elliot Smith at Intel <a href="http://townx.org/blog/elliot/introduction-sorts-javascript-desktop-application-development-gjs-and-clutter">blogged </a>about his experiences on using Gjs on Moblin developing a clutter application. Zach Goldberg <a href="http://zachgoldberg.com/index.pl?Blog&amp;target=Python%20GUPnP%20as%20a%20Working%20control%20point">writes</a> about his experiences on adding callback support to the python bindings.</p>
<p>More and more libraries are adding introspection support, the latest ones are libgda and moblin toolkit.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2009/12/04/news-from-the-introspection-world/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>litled</title>
		<link>http://blogs.gnome.org/johan/2008/11/17/litled/</link>
		<comments>http://blogs.gnome.org/johan/2008/11/17/litled/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 21:40:11 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[GNOME]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/?p=38</guid>
		<description><![CDATA[Today is my first day at litl. I&#8217;m joining a team which should be familiar to GNOME:rs in general: Johan Bilien, Lucas Rocha, Havoc Pennington and Tommi Komulainen. Exciting times!]]></description>
			<content:encoded><![CDATA[<p>Today is my first day at <a href="http://litl.com/jobs.htm">litl</a>. I&#8217;m joining a team which should be familiar to GNOME:rs in general: Johan Bilien, Lucas Rocha, Havoc Pennington and Tommi Komulainen. Exciting times!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2008/11/17/litled/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Introspection hackfest at the Boston Summit</title>
		<link>http://blogs.gnome.org/johan/2008/08/21/introspection-hackfest-at-the-boston-summit/</link>
		<comments>http://blogs.gnome.org/johan/2008/08/21/introspection-hackfest-at-the-boston-summit/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 14:10:14 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[olpc]]></category>
		<category><![CDATA[PyGTK]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/2008/08/21/introspection-hackfest-at-the-boston-summit/</guid>
		<description><![CDATA[We&#8217;re arranging an introspection hackfest at the Boston Summit! Thanks to the nice lads at the foundation we can have most of the participants flown over. Colin Walters, Jürg Billeter, Philip Van Hoof, I and hopefully Havoc Pennington is going &#8230; <a href="http://blogs.gnome.org/johan/2008/08/21/introspection-hackfest-at-the-boston-summit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re arranging an introspection hackfest at the <a href="http://live.gnome.org/Boston2008">Boston Summit</a>! Thanks to the nice lads at the foundation we can have most of the participants flown over. <a href="http://cgwalters.livejournal.com/">Colin Walters</a>, <a href="http://blogs.gnome.org/juergbi/">Jürg Billeter</a>, <a href="http://pvanhoof.be/blog/">Philip Van Hoof</a>, I and hopefully <a href="http://log.ometer.com">Havoc Pennington</a> is going to be there.</p>
<p>If you&#8217;re interested in language bindings or other <a href="http://live.gnome.org/GObjectIntrospection">uses</a> of the introspection data, come by and help us out.</p>
<p>Oh, I almost forgot to say hi to <a href="http://planet.python.org">Planet Python.</a> Andrew was kind enough to add me there. My name is Johan Dahlin and I&#8217;m mostly working on Python related to GNOME, especially, Python bindings for <a href="http://www.pygtk.org">GObject and Gtk.</a>, and <a href="http://kiwi.async.com.br">Kiwi</a> + <a href="http://www.stoq.com.br">Stoq</a> of course. The <a href="http://live.gnome.org/GObjectIntrospection">introspection project</a> is intended to make it easier to write language bindings for the Gnome stack, not only Python ones.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2008/08/21/introspection-hackfest-at-the-boston-summit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generic CClosure marshaller using libffi</title>
		<link>http://blogs.gnome.org/johan/2008/07/31/36/</link>
		<comments>http://blogs.gnome.org/johan/2008/07/31/36/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 09:31:35 +0000</pubDate>
		<dc:creator>johan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[olpc]]></category>
		<category><![CDATA[PyGTK]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blogs.gnome.org/johan/2008/07/31/36/</guid>
		<description><![CDATA[Marco: You can also use the libffi CClosure marshaller I wrote for PyGObject. If you use you don&#8217;t need to generate the marshal.list at all, it&#8217;ll figure out the signature and call the callback just by looking at the signals &#8230; <a href="http://blogs.gnome.org/johan/2008/07/31/36/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.barisione.org/blog.html/p=136" title="Automatic generation of .list files">Marco</a>: You can also use the <a href="http://sourceware.org/libffi/" title="libffis homepage">libffi</a> CClosure <a href="http://svn.gnome.org/viewvc/pygobject/trunk/gobject/ffi-marshaller.c?view=markup" title="Link to ffi-marshaller.c in PyGObject">marshaller</a> I wrote for PyGObject. If you use you don&#8217;t need to generate the marshal.list at all, it&#8217;ll figure out the signature and call the callback just by looking at the signals GValues.</p>
<p>I originally wrote it so that <a href="http://blogs.gnome.org/edwardrv">Edward</a> could prototype playbin2 in <a href="http://gstreamer.freedesktop.org/modules/gst-python.html" title="Link to gst-pythons homepage">gst-python</a> and still being able to connect to signals created in python from GstElements written in C. I know that a couple of other projects are using that file by copying and pasting it while waiting for <a href="http://bugzilla.gnome.org/show_bug.cgi?id=401080" title="Link to bug 401080">bug 401080</a> to be solved.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.gnome.org/johan/2008/07/31/36/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  blogs.gnome.org/johan/category/general/feed/ ) in 1.37700 seconds, on Feb 10th, 2012 at 9:56 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 10th, 2012 at 10:56 am UTC -->
