<?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:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"
>

<channel>
	<title>Murray's Blog</title>
	<atom:link href="http://www.murrayc.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.murrayc.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 09 Mar 2010 15:39:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>What our Trainees Learn</title>
		<link>http://www.murrayc.com/blog/permalink/2010/03/09/what-our-trainees-learn/</link>
		<comments>http://www.murrayc.com/blog/permalink/2010/03/09/what-our-trainees-learn/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 14:46:44 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Maemo]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1144</guid>
		<description><![CDATA[After our successful year of training at Openismus, I thought I&#8217;d publish the rough bullet-point list that we used. Whoever we choose for the following year will repeat much the same process, with in-depth critique and a dose of reality.
These were our overall aims:

Familiarity with the programming languages, toolkits, and tools, beyond the average.
Good quality [...]]]></description>
			<content:encoded><![CDATA[<p>After our successful year of training at Openismus, I thought I&#8217;d publish the rough bullet-point list that we used. Whoever we <a href="http://www.murrayc.com/blog/permalink/2010/03/05/openismus-wants-more-trainees/">choose</a> for the following year will repeat much the same process, with in-depth critique and a dose of reality.</p>
<p>These were our overall aims:</p>
<ul>
<li>Familiarity with the programming languages, toolkits, and tools, beyond the average.</li>
<li>Good quality habits &#8211; documentation, ChangeLogs/commit-messages, bug filing, simple code.</li>
<li>Good communication &#8211; politeness, precision, knowing who/where to contact, tracking progress and following up.</li>
</ul>
<p>And this is the stuff that we checked off along the way:</p>
<h3>Knowledge of C</h3>
<ul>
<li>Respect for memory. True understanding of pointers.
<ul>
<li>Understanding of the many ways to use * and &amp; and [], declaring and dereferencing.</li>
<li>Understanding of state (Such as a widget&#8217;s data, or a user_data struct, or a C++ class&#8217;s member variables.)</li>
<li>Understanding function pointers, including their weird syntax, made easier by use of typedefs.</li>
</ul>
</li>
<li>Basic understanding of object-orientation &#8211; Write functions that have a namespaced prefix and that take a first self/this parameter.
<ul>
<li>Write init and free functions where appropriate.</li>
<li>Don&#8217;t use a prefix that is used by an existing library.</li>
</ul>
</li>
<li>Use of enums (or defines if necessary, or static constants if appropriate) instead of magic numbers/strings.</li>
<li>Breaking code up into small blocks, separated by empty lines, with pseudo-code comments above each block. In small functions, of course.</li>
<li>Initializing local variables, even if you don&#8217;t think it&#8217;s necessary.</li>
<li>The GTK+ coding style, which is common for C.</li>
</ul>
<h3>Knowledge of GTK+</h3>
<p>Familiarity with GTK+, to the level of implementing new widgets.</p>
<ul>
<li>Reference-counting: Conventions and special cases (gstreamer and tinymail use a different convention, for instance).</li>
<li>Child widgets don&#8217;t really use reference-counting. They are destroyed by parents regardless.</li>
<li>Glade and GtkBuilder</li>
<li>Implement a new widget, doing some custom drawing and/or containing some child widgets. Make sure that you understand what the various construct/init/finalize/destroy/etc vfuncs do.</li>
</ul>
<h3>Other C stuff and basic tools</h3>
<ul>
<li>Tools: gdb, valgrind, svn, git, diff, patch.</li>
<li>Writing ChangeLog entries or commit messages (mentioning files and functions, and what changed in them and why).</li>
<li><a href="http://www.openismus.com/documents/">autotools</a></li>
<li>gtk-doc syntax, and knowing what developers need to see in the documentation. Mention the what, when, why, how, and &#8220;see also&#8221;.</li>
<li>Familiarity with Clutter, to the level of implementing new actors. See the Openismus <a href="http://openismus.com/documents/clutter_tutorial">Clutter tutorial</a>.</li>
<li>Fix some GNOME bugs, submitting patches. Maybe work with the <a href="http://live.gnome.org/GnomeLove ">gnome-love</a> group.</li>
</ul>
<h3>Communication</h3>
<ul>
<li>Join the relevant GTK+, GNOME, Maemo, and Qt mailing lists.</li>
<li>Add Openismus employees to your GNOME <a href="https://bugzilla.gnome.org/userprefs.cgi?tab=email">bugzilla Users To Watch list</a>. Someone will watch yours too.</li>
<li>Be repeatedly told to file bugs and patches, and to follow up on them. File bugs about documentation too.</li>
</ul>
<h3>Familiarity with C++ &#8211; at least the parts used by gtkmm and Qt</h3>
<p>This takes more time than anything else, but its doable with motivation and mentoring from our experts.</p>
<ul>
<li>Read a full book, such as <a href="http://www.amazon.com/exec/obidos/ISBN=020170353X/murrayswebpages/">Accelerated C++</a>, cover to cover.</li>
<li> Understanding of classes, constructors, inheritance, polymorphism.</li>
<li> Understanding of references.</li>
<li> Understanding of const and mutable.</li>
<li> Templates. And template specializations.</li>
<li> Use of <a href="http://www.openismus.com/documents/cplusplus/standard_containers.shtml">std containers</a>.</li>
<li> Familiarity with gtkmm (easy because they know GTK+ already.)</li>
<li>The gtkmm coding style, which is common for C++.</li>
<li> The doxygen/javadoc syntax.</li>
<li> Wrap some new GTK+ API for gtkmm.</li>
<li> Fix a Glom bug. For instance, there are some simple <a href="https://bugzilla.gnome.org/buglist.cgi?keywords=gnome-love;product=Glom;resolution=---">Glom gnome-love bugs</a>.</li>
<li>Familiarity with Qt. Understand what moc does. Do something real-world with it&#8217;s (quasi) model/view widgets. Understand QString historical oddities.</li>
<li>Maybe find a bug to fix in KDE.</li>
</ul>
<h3>Optimization work</h3>
<ul>
<li>Understanding processing, memory, and IO costs.</li>
<li>Avoiding premature optimization while avoiding obvious performance errors.</li>
<li>Using Oprofile, SysProf, system tap, etc.</li>
</ul>
<h3>Debian/Ubuntu packaging</h3>
<ul>
<li>Package a new version of an existing package, such as Glom, in the Openismus PPA.</li>
<li>Package something new for Ubuntu.</li>
</ul>
<h3>Embedded Linux</h3>
<ul>
<li>Use of Scratchbox with Maemo.
<ul>
<li>Port something to Maemo.</li>
<li>Package it for maemo-extras.</li>
</ul>
</li>
<li>Using a BeagleBoard:
<ul>
<li><a href="http://www.openismus.com/documents/linux/embedded/beagleboard_getting_started.shtml">Set up the BeagleBoard</a> and get something running.</li>
<li>Try to install <a href="http://wiki.maemo.org/Mer">Mer</a>.</li>
<li>Putting a self-built distro on generic hardware (BeagleBoard), using Poky or OpenEmbedded.</li>
</ul>
</li>
<li>Be aware of differences/pros/cons between Poky and OpenEmbedded.</li>
<li>Document how a customer might prepare and maintain a custom debian (or Ubuntu) distro for their embedded hardware project. For instance, how to install and use an autobuilder for packages.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2010/03/09/what-our-trainees-learn/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Openismus Wants More Trainees</title>
		<link>http://www.murrayc.com/blog/permalink/2010/03/05/openismus-wants-more-trainees/</link>
		<comments>http://www.murrayc.com/blog/permalink/2010/03/05/openismus-wants-more-trainees/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 17:26:22 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Berlin]]></category>
		<category><![CDATA[Germany]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Maemo]]></category>
		<category><![CDATA[Munich]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1139</guid>
		<description><![CDATA[A little over a year ago, we hired our first batch of Openismus trainees. After an intensive year gaining knowledge and experience, I&#8217;m proud to say that David King and Michael Hasselmann have now graduated to regular work on customer projects. They&#8217;ve become solid developers in whom we have confidence, thanks to mentoring from all [...]]]></description>
			<content:encoded><![CDATA[<p>A little over a year ago, we hired our first batch of <a href="http://www.openismus.com/">Openismus</a> trainees. After an intensive year gaining knowledge and experience, I&#8217;m proud to say that David King and Michael Hasselmann have now graduated to regular work on customer projects. They&#8217;ve become solid developers in whom we have confidence, thanks to mentoring from all our other employees. Personally, creating these new development careers is one of the most worthwhile things I&#8217;ve done in my career.</p>
<p><strong>So we need some more people</strong> to repeat our success. Here&#8217;s the text from the <a href="http://www.murrayc.com/blog/permalink/2008/11/10/openismus-wants-trainees/">first time</a>:</p>
<blockquote><p>If you are smart and enthusiastic but you lack experience then we can provide the opportunity. You would work mostly on existing open source projects instead of customer projects, just to get experience with C, C++, GTK+ and Qt. Our developers would provide technical guidance and encourage you to work and communicate in a structured way, creating software that’s actually usable and useful.</p>
<p>This is also a great opportunity to move to Berlin – a wonderful city for young people. Munich may also be a possibility if necessary.</p></blockquote>
<p>I&#8217;d also like to point out that we are very much an <strong>equal-opportunities employer</strong>. We get almost no applications from women or minority groups and that&#8217;s not good enough. We are a small company so every new person can make the place more like themselves.</p>
<p><strong>Please send us an email</strong> telling us about yourself. Show enthusiasm and show us anything you&#8217;ve done in the open source world already. As before, I will filter out the least suitable candidates by expecting you to find the appropriate email address yourself. Unfortunately, as before, it&#8217;s unlikely that we&#8217;ll want to deal with visa paperwork if you are not already working in the EU.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2010/03/05/openismus-wants-more-trainees/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Glom 1.13/14 using boost::python</title>
		<link>http://www.murrayc.com/blog/permalink/2010/02/22/glom-1-1314-using-boostpython/</link>
		<comments>http://www.murrayc.com/blog/permalink/2010/02/22/glom-1-1314-using-boostpython/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 13:20:25 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Glom]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1101</guid>
		<description><![CDATA[Finally Figured Out boost::python
After lots of experimentation and two previous failed attempts, Glom now uses boost::python, with very little use of the nasty Python C API remaining. This should make it easier to add Python API to easily access and set field/record/table/database details from the Python that&#8217;s used in calculated fields or button scripts.
Useful Things [...]]]></description>
			<content:encoded><![CDATA[<h3>Finally Figured Out boost::python</h3>
<p>After lots of experimentation and two previous failed attempts, Glom now uses boost::python, with very little use of the nasty Python C API remaining. This should make it easier to add Python API to easily access and set field/record/table/database details from the Python that&#8217;s used in calculated fields or button scripts.</p>
<h3>Useful Things I Now Know about boost::python</h3>
<p>boost::python is no fun to get started with, but it&#8217;s now far easier for me to use than the Python C API.</p>
<p>I&#8217;ve <a href="http://www.murrayc.com/blog/permalink/2009/03/10/boostpython-in-glom/">mentioned the awful boost::python documentation</a> before. Here are some essential things that I figured out, which are not really documented. This is thanks to helpful people on the <a href="http://mail.python.org/mailman/listinfo/cplusplus-sig">boost::python mailing list</a>. <strong>Corrections welcome</strong> &#8211; there&#8217;s so much here that some of it must be wrong.</p>
<p>None of this is very obvious or pleasant. If anyone had their first real C++ experience with boost::python then I&#8217;d forgive them for being put off C++ for good. I love C++ so that would be unfortunate.</p>
<h4>&#8220;Converting&#8221; between C and C++ object types</h4>
<p><strong>C++ to C: </strong>To get the underlying <a href="http://docs.python.org/c-api/object.html">PyObjec</a>t* from a <a title="I'd much rather use a URL without a specific version number." href="http://www.boost.org/doc/libs/1_41_0/libs/python/doc/v2/object.html">boost::python::object</a> (awful docs), when you need to use a C function:</p>
<pre>PyObject* cobject = theobject.ptr();</pre>
<p>To test for a boost::python::object with a null underlying PyObject*, do:</p>
<pre>if(cppobject.ptr())</pre>
<p>Do not do if(cppobject). That tests if the python object is actually a boolean that is PyTrue.</p>
<p><strong>C to C++:</strong> To get a boost::python::object for a PyObject*, when you received one from a C function, but you then need to use the result in a C++ function, or just want the improved memory management:</p>
<ul>
<li> If the C function gave you a reference that you should later unreference:
<pre>boost::python::object cppobject( (boost::python::handle&lt;&gt;(cobject)) );</pre>
<p>(You need those extra brackets, for &#8220;interesting&#8221; compiler reasons.)</li>
<li>Or, if you need to take a reference.
<pre>boost::python::object cppobject(boost::python::borrowed(cobject));</pre>
<p>(Yes. that&#8217;s horrible too. I see no reason to expose <a title="The documentation for this is awful too." href="http://www.boost.org/doc/libs/1_41_0/libs/python/doc/v2/handle.html">boost::python::handle</a> in the API.)</li>
<li>However, you&#8217;ll need to use allow_null too to avoid exceptions if the PyObject* might be null. Well, any pointer could be null, so say hello to:
<pre>boost::python::object cppobject(  (boost::python::handle&lt;&gt;(boost::python::allow_null(cobject))) );</pre>
<p>or</p>
<pre>boost::python::object(boost::python::borrowed(boost::python::allow_null(cobject)));</pre>
<p>(Shoot me now. No, reducing it to b::p::whatever is not a significant improvement.)<br />
I understand that a null PyObject* may sometimes be an exceptional unexpected event, but forcing the use of a try/catch by default just for a null pointer check is annoying. Explicit functions such as wrap() and wrap_not_null() would be so much easier.<br />
See the <a href="http://library.gnome.org/devel/gtkmm-tutorial/unstable/sec-basics-gobj-and-wrap.html.en">equivalent for gtkmm</a> (plus calling reference() when necessary with non-widgets).</li>
</ul>
<h4>Using boost::python with your own wrapped C++ classes.</h4>
<ul>
<li>To get a boost::python::object for an instance of your C++ class that you&#8217;ve wrapped for Python with boost::python::class, just do:
<pre>boost::python::object obj(new YourWrappedClass);</pre>
</li>
<li>To get a C++ instance of your wrapped class from a boost::python::object, use boost::python::extract (as also mentioned generically below):
<pre>boost::python::extract&lt;MyClass*&gt; extractor(cppobject);
if(extractor.check()) myobject = extractor;</pre>
</li>
</ul>
<h4>Others</h4>
<ul>
<li>To get a C++ value out of a boost::python::object do, for instance:
<pre>boost::python::extract&lt;std::string&gt; extractor(cppobject);
if(extractor.check()) mystring = extractor;</pre>
<p>You can do</p>
<pre>mystring = boost::python::extract&lt;std::string&gt;(cppobject)</pre>
<p>without the check() but that will throw an exception if the underlying type is not really what you expect.</li>
<li>boost::python likes to throw exceptions. I think it only ever throws boost::python::error_already_set, though the (Python) error is often not already set when it&#8217;s thrown. When the error is set, you&#8217;ll need to use Python C API to discover what it is.</li>
<li>To provide [] syntax in python for your wrapped class, you&#8217;ll need to know how the C API works. Add this voodoo to your boot::python::class declaration:
<pre>.def("__getitem__", &amp;MyClass::getitem)
.def("__len__", &amp;MyClass::len)</pre>
<p>Those methods can then have signatures like this:</p>
<pre>boost::python::object getitem(const boost::python::object&amp; cppitem);
long len() const;</pre>
</li>
<li>To use Python date or time values, you will need to use C Python functions. For instance:
<pre>PyObject* cobject = cppobject.ptr();
int day = PyDateTime_GET_DAY(cobject);
int month = PyDateTime_GET_MONTH(cobject);
int year = PyDateTime_GET_YEAR(cobject) );</pre>
</li>
</ul>
<h3>Boost has no .pc files</h3>
<p>boost is a complete pain as a dependency. I understand that they don&#8217;t want to freeze API or ABI, because it&#8217;s a place for gradually improving API, though I think they should just have regular stable/devel phases with parallel installs. But I can&#8217;t forgive how difficult it is to get the header and linker options to use boost libraries. There are some m4 macros out there but they are hacky and fragile, and don&#8217;t actually work for boost::python. It shouldn&#8217;t be hard to provide pkg-config .pc files, so you wouldn&#8217;t need to do any compilation or linker checks in configure at all. I hacked some m4 code together based on some existing stuff, but I couldn&#8217;t recommend it.</p>
<p>So distro packagers won&#8217;t enjoy this new dependency. Sorry.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2010/02/22/glom-1-1314-using-boostpython/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Openismus Website Now More Shiny</title>
		<link>http://www.murrayc.com/blog/permalink/2010/02/17/openismus-website-now-more-shiny/</link>
		<comments>http://www.murrayc.com/blog/permalink/2010/02/17/openismus-website-now-more-shiny/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 17:49:47 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1108</guid>
		<description><![CDATA[Daniel Borgmann has prettied up our Openismus website a little. The small touches make it easier on the eye. It&#8217;s no longer so adaptable to every screen size or font size, but it&#8217;s still relatively simple. It wasn&#8217;t us who broke the web, though we tried not to break it more.
Daniel would have liked to [...]]]></description>
			<content:encoded><![CDATA[<p>Daniel Borgmann has prettied up our <a href="http://www.openismus.com">Openismus</a> website a little. The small touches make it easier on the eye. It&#8217;s no longer so adaptable to every screen size or font size, but it&#8217;s still relatively simple. It wasn&#8217;t us who broke the web, though we tried not to break it more.</p>
<p>Daniel would have liked to do much more impressive things, but I held him back because I like gradual iterative changes and very maintainable files. He did this without changing the content at all. We&#8217;ll see what happens next.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2010/02/17/openismus-website-now-more-shiny/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>In Helsinki at the weekend, Monday and Tuesday</title>
		<link>http://www.murrayc.com/blog/permalink/2010/02/10/in-helsinki-at-the-weekend-monday-and-tuesday/</link>
		<comments>http://www.murrayc.com/blog/permalink/2010/02/10/in-helsinki-at-the-weekend-monday-and-tuesday/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 12:03:47 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Maemo]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1095</guid>
		<description><![CDATA[Liam says &#8220;broombroom soon Stinky Mama Papa mit&#8221;.
That means that we will be flying in an airplane on Friday to Helsinki. I&#8217;ll be around for work stuff on Monday and Tuesday too. Most afternoons are planned out already, and evenings are generally difficult with a child, but I hope to see random Nokia/Maemo people, maybe [...]]]></description>
			<content:encoded><![CDATA[<p>Liam says &#8220;broombroom soon Stinky Mama Papa mit&#8221;.</p>
<p>That means that we will be flying in an airplane on Friday to Helsinki. I&#8217;ll be around for work stuff on Monday and Tuesday too. Most afternoons are planned out already, and evenings are generally difficult with a child, but I hope to see random Nokia/Maemo people, maybe at lunch. I shall be pinging you.</p>
<p>We are looking forward to seeing old friends who we don&#8217;t get a chance to see often enough.</p>
<p><a href="http://www.flickr.com/photos/kitty-kat/">Kat</a>, <a href="http://amigadave.blogspot.com/">David</a>, <a href="http://taschenorakel.de/mathias/">Mathias</a>, and <a href="http://danielkitta.org/blog/">Daniel</a> will be around too.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2010/02/10/in-helsinki-at-the-weekend-monday-and-tuesday/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GtkToolPalette in GTK+ 2.20</title>
		<link>http://www.murrayc.com/blog/permalink/2010/01/20/gtktoolpalette-in-gtk-2-20/</link>
		<comments>http://www.murrayc.com/blog/permalink/2010/01/20/gtktoolpalette-in-gtk-2-20/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 07:46:32 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Glom]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1084</guid>
		<description><![CDATA[We (Openismus) recently got our GtkToolPalette widget into GTK+&#8217;s git master, to be seen in recent GTK+ 2.19 (unstable) tarballs. We haven&#8217;t had much extra time for this kind of thing, so I&#8217;m glad it&#8217;s finally done after being worked on now and then by Mathias Hasselmann, Jan Arne Petersen and Johannes Schmid. Thanks to [...]]]></description>
			<content:encoded><![CDATA[<p>We (Openismus) <a href="https://bugzilla.gnome.org/show_bug.cgi?id=567729">recently</a> got our GtkToolPalette widget into GTK+&#8217;s git master, to be seen in recent GTK+ 2.19 (unstable) tarballs. We haven&#8217;t had much extra time for this kind of thing, so I&#8217;m glad it&#8217;s finally done after being worked on now and then by Mathias Hasselmann, Jan Arne Petersen and Johannes Schmid. Thanks to Matthias Clasen for valuable reviewing and cleanup.</p>
<p>We hope that this can replace the hand-coded tool palette widgets in Glade and Gimp, as well as making this easier for new applications. It replaces EggToolPalette in libegg, where we started the work. Please take a look and report any problems. I&#8217;m already using it in a Glom branch.</p>
<p>Here&#8217;s the GTK+ <a href="http://library.gnome.org/devel/gtk/unstable/GtkToolPalette.html">API reference for GtkToolPalette</a>. There&#8217;s a <a href="http://git.gnome.org/browse/gtk+/tree/demos/gtk-demo/toolpalette.c">GtkToolPalette example</a> in gtk-demo.</p>
<p>And here&#8217;s a little introductory <a href="http://library.gnome.org/devel/gtkmm-tutorial/unstable/chapter-toolpalette.html.en">Gtk::ToolPalette chapter</a> I wrote for the gtkmm (C++) book. Note that gtkmm&#8217;s API reference for this is mostly empty, but fixed already in git.</p>
<p><a href="http://www.murrayc.com/blog/wp-content/uploads/2010/01/toolpalette.png"><img class="alignnone size-medium wp-image-1087" title="GtkToolPalette demo" src="http://www.murrayc.com/blog/wp-content/uploads/2010/01/toolpalette-269x300.png" alt="" width="269" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2010/01/20/gtktoolpalette-in-gtk-2-20/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Peter Penz Joining Openismus</title>
		<link>http://www.murrayc.com/blog/permalink/2010/01/12/peter-penz-joining-openismus/</link>
		<comments>http://www.murrayc.com/blog/permalink/2010/01/12/peter-penz-joining-openismus/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 11:43:20 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Germany]]></category>
		<category><![CDATA[Maemo]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1078</guid>
		<description><![CDATA[I&#8217;m pleased to say that Peter Penz will become an Openismus employee at the start of February. I&#8217;ve known and liked Peter since I worked with him six years ago in Linz, Austria on a proprietary C++ mobile phone platform. Back then I was impressed with his skill and temperament so I&#8217;ve watched with interest [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m pleased to say that <a href="http://ppenz.blogspot.com/">Peter Penz</a> will become an <a href="http://www.openismus.com/">Openismus</a> employee at the start of February. I&#8217;ve known and liked Peter since I worked with him six years ago in Linz, Austria on a proprietary C++ mobile phone platform. Back then I was impressed with his skill and temperament so I&#8217;ve watched with interest as he has become a core KDE maintainer via the <a href="http://dolphin.kde.org/">Dolphin</a> file manager.</p>
<p>Obviously Peter will help Openismus as we gain experience with Qt for <a href="http://wiki.maemo.org/Open_development/Maemo_roadmap/Harmattan">Maemo 6 (Harmattan)</a> in addition to our continued use of GTK+ and gtkmm.</p>
<p>Peter will work from home in Linz, occasionally visiting the office in Berlin. I like the idea of another office in Linz though.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2010/01/12/peter-penz-joining-openismus/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Liam at Two</title>
		<link>http://www.murrayc.com/blog/permalink/2010/01/07/liam-at-two/</link>
		<comments>http://www.murrayc.com/blog/permalink/2010/01/07/liam-at-two/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 10:16:14 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Munich]]></category>
		<category><![CDATA[liam]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1068</guid>
		<description><![CDATA[December&#8217;s long season of presents is over and Liam is now two years old.

He&#8217;s recently started the famous language explosion, learning several new words each day. He&#8217;s obviously aware that he speaks two languages, now learning to say both words instead of preferring the first one he&#8217;d learned. He still prefers hand gestures where he [...]]]></description>
			<content:encoded><![CDATA[<p>December&#8217;s long season of presents is over and Liam is now two years old.</p>
<p><a href="http://www.flickr.com/photos/sigimueller/4225937377/"><img class="alignnone size-medium wp-image-1073" title="Liam and birthday candles" src="http://www.murrayc.com/blog/wp-content/uploads/2010/01/4225937377_a8d2f7d43a_o-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p>He&#8217;s recently started the famous language explosion, learning several new words each day. He&#8217;s obviously aware that he speaks two languages, now learning to say both words instead of preferring the first one he&#8217;d learned. He still prefers hand gestures where he has learned them first, seeing no need to learn words for them too.</p>
<p>For the past couple of months Liam has spent the mornings in the crèche over the road. That&#8217;s why I&#8217;m online again every morning. It&#8217;s great for him to learn some independence and spend time with the same kids every day. Leaving him there in tears has been heart-breaking every morning for weeks, but now he&#8217;s happy to go there and is nonchalant about us leaving.</p>
<p>I was worried when he suddenly learned more German at the crèche, but that has settled down now. Still, I make an extra effort with plenty of English books and music and some DVDs of gentle British children&#8217;s TV from the 70s, such as <a href="http://en.wikipedia.org/wiki/The_Wombles">The Wombles</a> and <a href="http://en.wikipedia.org/wiki/The_Wombles">Ivor the Engine</a>.</p>
<p>The language explosion was accompanied by a sudden increase in general understanding and concentration. Now he happily listens as I read all of a Dr Seuss book to him and seems to understand narrative instead of just wanting to identify objects. His imaginative play is more complicated, with detailed routines.</p>
<p>We&#8217;ve had a little snow in Munich this week. Liam learned to walk in last year&#8217;s snow. I hope he remembers enjoying this year&#8217;s.</p>
<p><a href="http://www.murrayc.com/gallery/v/murrayc_0/2010/liam_sledge/IMG_0779.JPG.html"><img class="alignnone size-medium wp-image-1070" title="Liam and Sledge" src="http://www.murrayc.com/blog/wp-content/uploads/2010/01/IMG_0779-200x300.jpg" alt="" width="200" height="300" /></a> <a href="http://www.murrayc.com/gallery/v/murrayc_0/2010/liam_sledge/IMG_0679.JPG.html"><img class="alignnone size-medium wp-image-1075" title="Liam on Sledge" src="http://www.murrayc.com/blog/wp-content/uploads/2010/01/IMG_0679-200x300.jpg" alt="" width="200" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2010/01/07/liam-at-two/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Trying to use gnuplot in massif_grapher</title>
		<link>http://www.murrayc.com/blog/permalink/2009/11/20/trying-to-use-gnuplot-in-massif_grapher/</link>
		<comments>http://www.murrayc.com/blog/permalink/2009/11/20/trying-to-use-gnuplot-in-massif_grapher/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 13:21:42 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1060</guid>
		<description><![CDATA[I&#8217;ve been trying to use gnuplot instead of Gd::Chart in my massif_grapher script, mostly just so it can generate zoomable postscript or SVG output.
I first tried using the Chart::Gnuplot perl API, but after a very helpful email conversation with its maintainer Ka-Wai Mak, we found that it cannot yet be used to create gnuplot&#8217;s &#8220;rowstacked&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to use <a href="http://www.gnuplot.info/">gnuplot</a> instead of Gd::Chart in my <a href="http://www.murrayc.com/blog/permalink/2009/11/10/graphs-from-valgrinds-massif/">massif_grapher</a> script, mostly just so it can generate zoomable postscript or SVG output.</p>
<p>I first tried using the <a href="http://search.cpan.org/~kwmak/Chart-Gnuplot/lib/Chart/Gnuplot.pm">Chart::Gnuplot</a> perl API, but after a very helpful email conversation with its maintainer Ka-Wai Mak, we found that it cannot yet be used to create gnuplot&#8217;s &#8220;rowstacked&#8221; histograms. So now my <a href="http://github.com/murraycu/massif_grapher/tree/gnuplot">gnuplot branch of massif_brancher </a>uses gnuplot directly. However, there are still some problems that I can&#8217;t solve easily:</p>
<ul>
<li>The x axis has a label for each item, which makes it cluttered, with overlapping text. I think this cannot be changed while using xtics(1) in the &#8220;using&#8221; statement, but that&#8217;s voodoo to me and I can&#8217;t find some version of the using statement that doesn&#8217;t use xtics.</li>
<li>When using massif_grapher&#8217;s &#8211;detailed option, for instance with the example .out file, there are 60 stacked columns of data. The legend (key) is then so big that it pushes the graph off the page. I&#8217;ve asked about this on the gnuplot mailing list, but I am inpatient.</li>
</ul>
<p>Actually, I wish I could do these stacked (or &#8220;cumulative&#8221; in Gd::Chart terms) graphs for regular line graphs, instead of just as items on a histogram, in case the snapshot times are not at regular intervals.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2009/11/20/trying-to-use-gnuplot-in-massif_grapher/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>LDTP in jhbuild: A Cry For Help</title>
		<link>http://www.murrayc.com/blog/permalink/2009/11/19/ldtp-in-jhbuild-a-cry-for-help/</link>
		<comments>http://www.murrayc.com/blog/permalink/2009/11/19/ldtp-in-jhbuild-a-cry-for-help/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 16:45:53 +0000</pubDate>
		<dc:creator>murrayc</dc:creator>
				<category><![CDATA[Glom]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Openismus]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.murrayc.com/blog/?p=1062</guid>
		<description><![CDATA[Glom has lots of code, lots of functionality and lots of UI. It&#8217;s easy to break things when making changes to the code. So Armin set up some initial Glom LDTP python scripts to check for regressions. These scripts try to actually use the UI and then check that the application worked as expected.
I&#8217;m sure [...]]]></description>
			<content:encoded><![CDATA[<p>Glom has lots of code, lots of functionality and lots of UI. It&#8217;s easy to break things when making changes to the code. So Armin set up some initial <a href="http://git.gnome.org/cgit/glom/tree/ldtp">Glom LDTP python scripts</a> to check for regressions. These scripts try to actually use the UI and then check that the application worked as expected.</p>
<p>I&#8217;m sure I had that working once, but it doesn&#8217;t work for me now. I wish it did because it would be incredibly useful to me. Note that I build Glom in jhbuild, so I need LDTP to work there. To simplify things, I build LDTP in jhbuild too. I&#8217;m trying this on Ubuntu Jaunty and Ubuntu Karmic. Armin has a similar environment and it does work for him.</p>
<p>The problem is that the <a href="http://ldtp.freedesktop.org/user-doc/waittillguiexist.html">waittillguiexist()</a> [1] function calls just timeout instead of recognizing that the first window has appeared. I definitely have accessibility support enabled, and <a href="http://live.gnome.org/Accerciser">Accerciser</a> does show the window properly. I&#8217;ve asked the LDTP developers but they haven&#8217;t been able to help me.</p>
<p>[1] Yes, I hate that function name. I wish that the API and documentation had received proper feedback from native English speakers. It&#8217;s rather embarrassing to look at so far.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.murrayc.com/blog/permalink/2009/11/19/ldtp-in-jhbuild-a-cry-for-help/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
