<?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>Martin Pitt &#187; ubuntu</title>
	<atom:link href="http://www.piware.de/category/ubuntu/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.piware.de</link>
	<description>addicted to Ubuntu development</description>
	<lastBuildDate>Tue, 07 Feb 2012 19:53:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>fatrace: report system wide file access events</title>
		<link>http://www.piware.de/2012/02/fatrace-report-system-wide-file-access-events/</link>
		<comments>http://www.piware.de/2012/02/fatrace-report-system-wide-file-access-events/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 17:35:49 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[debian]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[fanotify]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[power management]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[tracing]]></category>
		<category><![CDATA[wakeups]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=594</guid>
		<description><![CDATA[Part of our efforts to reduce power consumption is to identify processes which keep waking up the disk even when the computer is idle. This already resulted in a few bug reports (and some fixes, too), but we only really just began with this. Unfortunately there is no really good tool to trace file access [...]]]></description>
			<content:encoded><![CDATA[<p>Part of our <a href="https://blueprints.launchpad.net/ubuntu/+spec/desktop-p-power-consumption">efforts to reduce power consumption</a> is to identify processes which keep waking up the disk even when the computer is idle. This already resulted in a few <a href="https://bugs.launchpad.net/ubuntu-power-consumption">bug reports</a> (and some fixes, too), but we only really just began with this.</p>
<p>Unfortunately there is no really good tool to trace file access events system-wide. <a href="http://www.lesswatts.org/projects/powertop/">powertop</a> claims to, but its output is both very incomplete, and also wrong (e. g. it claims that read accesses are writes). <a href="http://manpages.ubuntu.com/strace">strace</a> gives you everything you do and don&#8217;t want to know about what&#8217;s going on, but is per-process, and attaching strace to all running and new processes is cumbersome. <a href="http://www.cse.unsw.edu.au/~aaronc/iosched/doc/blktrace.html">blktrace</a> is system-wide, but operates at a way too low level for this task: its output has nothing to do any more with files or even inodes, just raw block numbers which are impossible to convert back to an inode and file path.</p>
<p>So I created a little tool called <a href="https://launchpad.net/fatrace">fatrace</a> (&#8220;file access trace&#8221;, not &#8220;fat race&#8221; <img src='http://www.piware.de/wp/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) which uses <a href="http://lwn.net/Articles/360955/">fanotify</a>, a couple of <code>/proc</code> lookups and some glue to provide this. By default it monitors the whole system, i. e. all mounts (except the virtual ones like /proc, tmpfs, etc.), but you can also tell it to just consider the mount of the current directory. You can write the log into a file (stdout by default), and run it for a specified number of seconds. Optional time stamps and PID filters are also provided.</p>
<pre>
$ sudo fatrace
rsyslogd(967): W /var/log/auth.log
notify-osd(2264): O /usr/share/pixmaps/weechat.xpm
compiz(2001): R device 8:2 inode 658203
[...]
</pre>
<p>It shows the process name and pid, the event type (<strong>R</strong>read, <strong>W</strong>rite, <strong>O</strong>pen, or <strong>C</strong>lose), and the path. Sometimes its&#8217; not possible to determine a path (usually because it&#8217;s a temporary file which already got deleted, and I suspect mmaps as well), in that case it shows the device and inode number; such programs then need closer inspection with strace.</p>
<p>If you run this in gnome-terminal, there is an annoying feedback loop, as gnome-terminal causes a disk access with each output line, which then causes another output line, ad infinitum. To fix this, you can either redirect output to a file (<code>-o /tmp/trace</code>) or ignore the PID of gnome-terminal (<code>-p `pidof gnome-terminal`</code>).</p>
<p>So to investigate which programs are keeping your disk spinning, run something like</p>
<pre>
  $ sudo fatrace -o /tmp/trace -s 60
</pre>
<p>and then do nothing until it finishes.</p>
<p>My next task will be to write an integration program which calls fatrace and powertop, and creates a nice little report out of that raw data, sorted by number of accesses and process name, and all that. But it might already help some folks as it is right now.</p>
<p>The code lives in <code>bzr branch lp:fatrace</code> (<a href="http://bazaar.launchpad.net/~pitti/fatrace/trunk">web view</a>), you can just run <code>make</code> and <code>sudo ./fatrace</code>. I also uploaded a package to Ubuntu Precise, but it still needs to go through the NEW queue. I also made a 0.1 release, so you can just grab the <a href="https://launchpad.net/fatrace/+download">release tarball</a> if you prefer. Have a look at the manpage and <code>--help</code>, it should be pretty self-explanatory.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2012/02/fatrace-report-system-wide-file-access-events/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>PackageKit/aptdaemon &#8220;what-provides&#8221; plugin support</title>
		<link>http://www.piware.de/2012/02/packagekitaptdaemon-what-provides-plugin-support/</link>
		<comments>http://www.piware.de/2012/02/packagekitaptdaemon-what-provides-plugin-support/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 07:03:48 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[apt]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[packagekit]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=586</guid>
		<description><![CDATA[PackageKit has a &#8220;WhatProvides&#8221; API for mapping distribution independent concepts to particular package names. For example, you could ask &#8220;which packages provide a decoder for AC3 audio files? $ pkcon what-provides "gstreamer0.10(decoder-audio/ac3)" [...] Installed gstreamer0.10-plugins-good-0.10.30.2-2ubuntu2.amd64 GStreamer plugins from the "good" set Available gstreamer0.10-plugins-ugly-0.10.18-3ubuntu4.amd64 GStreamer plugins from the "ugly" set This is the kind of question [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.packagekit.org/">PackageKit</a> has a &#8220;WhatProvides&#8221; API for mapping distribution independent concepts to particular package names. For example, you could ask &#8220;which packages provide a decoder for AC3 audio files?</p>
<pre>
$ pkcon what-provides  "gstreamer0.10(decoder-audio/ac3)"
[...]
Installed   	gstreamer0.10-plugins-good-0.10.30.2-2ubuntu2.amd64	GStreamer plugins from the "good" set
Available  	gstreamer0.10-plugins-ugly-0.10.18-3ubuntu4.amd64	GStreamer plugins from the "ugly" set
</pre>
<p>This is the kind of question your video player would ask the system if it encounters a video it cannot play. In reality they of course use the D-BUS or the library API, but it&#8217;s easier to demonstrate with the PackageKit command line client.</p>
<p>PackageKit <a href="https://gitorious.org/packagekit/packagekit/blobs/master/docs/provides-component-naming.txt">provides a fair number of those concepts</a>; I recently added <a href="https://gitorious.org/packagekit/packagekit/commit/0c6db3f2118dbb723529b24af11a136d19900244">LANGUAGE_SUPPORT</a> for packages which provide dictionaries, spell checkers, and other language support for a given language or locale code.</p>
<p>However, PackageKit&#8217;s apt backend does not actually implement a lot of these (only CODEC and MODALIAS), and aptdaemons&#8217;s PackageKit compatibility API does not implement any. That might be because their upstreams do not know enough how to do the mapping for a particular distro/backend, because doing so involves distro specific code which should not go into upstreams, or simply because of the usual chicken-egg problem of app developers rather doing their own thing instead of using generic APIs.</p>
<p>So this got discussed between Sebastian Heinlein and me, and voila, <a href="https://gitorious.org/packagekit/packagekit/commit/b516f18e28c708d31f0a85b35ca3ec47fb3bd16c">there it is</a>: it is now very easy to provide Python plugins for &#8220;what-provides&#8221; to implement any of the existing types. For example, <a href="https://launchpad.net/ubuntu/+source/language-selector/+changelog">language-selector</a> now ships a plugin which implements LANGUAGE_SUPPORT, so you can ask &#8220;which packages do I need for Chinese in China&#8221; (i. e. simplified Chinese)?</p>
<pre>
$ pkcon what-provides "locale(zh_CN)"
[...]
Available   	firefox-locale-zh-hans-10.0+build1-0ubuntu1.all	Simplified Chinese language pack for Firefox
Available   	ibus-sunpinyin-2.0.3-2.amd64            	sunpinyin engine for ibus
Available   	language-pack-gnome-zh-hans-1:12.04+20120130.all	GNOME translation updates for language Simplified Chinese
Available   	ttf-arphic-ukai-0.2.20080216.1-1.all    	"AR PL UKai" Chinese Unicode TrueType font collection Kaiti style
[...]
</pre>
<p><a href="http://blogs.gnome.org/rodrigo/">Rodrigo Moya</a> is currently working on implementing the <a href="https://live.gnome.org/Design/SystemSettings/RegionAndLanguage">control-center region panel redesign</a> in a <a href="http://git.gnome.org/browse/gnome-control-center/log/?h=wip/install-languages">branch</a>. This uses exactly this feature.</p>
<p>In Ubuntu we usually do not use PackageKit itself, but aptdaemon and its PackageKit API compatibility shim <code>python-aptdaemon.pkcompat</code>. So I <a href="http://bazaar.launchpad.net/~aptdaemon-developers/aptdaemon/main/revision/769">ported that plugin support</a> for aptdaemon-pkcompat as well, so plugins work with either now. Ubuntu Precise got the new aptdaemon (0.43+bzr769-0ubuntu1) and language-selector (0.63) versions today, so you can start playing around with this now.</p>
<p>So how can you write your own plugins? This is a trivial, although rather nonsense example:</p>
<pre>
from packagekit import enums

def my_what_provides(apt_cache, provides_type, search):
    if provides_type in (enums.PROVIDES_CODEC, enums.PROVIDES_ANY):
        return [apt_cache["gstreamer-moo"]]
    else:
        raise NotImplementedError('cannot handle type ' + str(provides_type))
</pre>
<p>The function gets an <code>apt.Cache</code> object, one of <code>enums.PROVIDES_*</code> and the actual search type as described <a href="https://gitorious.org/packagekit/packagekit/blobs/master/docs/provides-component-naming.txt">in the documentation</a> (above dummy example does not actually use it). It then decides whether it can handle the request and return a list of <code>apt.package.Package</code> objects (i. e. values in an <code>apt.Cache</code> map), or raise a <code>NotImplementedError</code> otherwise.</p>
<p>You register the plugin through Python pkg-resources in your setup.py (this needs setuptools):</p>
<pre>
   setup(
       [....]

       entry_points="""[packagekit.apt.plugins]
what_provides=my_plugin_module_name:my_what_provides
""",
       [...])
</pre>
<p>You can register arbitrarily many plugins, they will be all called and their resulting package lists joined.</p>
<p>All this will hopefully help a bit to push distro specifics to the lowest possible levels, and use upstream friendly and distribution agnostic APIs in your applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2012/02/packagekitaptdaemon-what-provides-plugin-support/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>software-center now installs language support automatically</title>
		<link>http://www.piware.de/2012/01/software-center-now-installs-language-support-automatically/</link>
		<comments>http://www.piware.de/2012/01/software-center-now-installs-language-support-automatically/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 15:52:34 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[aptdaemon]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[language support]]></category>
		<category><![CDATA[translations]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=581</guid>
		<description><![CDATA[Suppose you install Ubuntu and select a language other than English (it&#8217;s known to happen!). This will install the general and the GNOME language packs, translated LibreOffice help, and so on. Now, install a KDE package or GIMP. You&#8217;ll notice that the new application is not translated and has no help available for your language. [...]]]></description>
			<content:encoded><![CDATA[<p>Suppose you install Ubuntu and select a language other than English (it&#8217;s known to happen!). This will install the general and the GNOME language packs, translated LibreOffice help, and so on. Now, install a KDE package or GIMP. You&#8217;ll notice that the new application is not translated and has no help available for your language. The next time you open the language selector from control-center it would tell you that you miss some language support and offer to install it, but this has been pretty indiscoverable, and we really can do better.</p>
<p>Today&#8217;s <a href="https://launchpad.net/ubuntu/+source/language-selector/0.62">language-selector</a> upload provides an <a href="http://packages.python.org/aptdaemon/plugins.html">aptdaemon plugin</a> which automatically marks corresponding language support packages (translated help, dictionaries, spell checker modules, and translations themselves) for installation for any newly installed package, for all languages that are configured on your system.</p>
<p>For example, I have German and English locales on my system, and no KDE packages. Before, installing GIMP got me just that:</p>
<p><code>$ aptdcon -i gimp<br />
The following NEW package will be installed (1):<br />
  gimp<br />
</code></p>
<p>Now it automatically installs the corresponding localized help:</p>
<p><code><br />
$ aptdcon -i gimp<br />
The following NEW packages will be installed (4):<br />
  gimp gimp-help-common gimp-help-de gimp-help-en<br />
</code></p>
<p>I am using <code>aptdcon</code> here as it points out the effect better than software-center doing all this in the background, but both use aptdaemon, so the effect will be the same.</p>
<p>Likewise, installing the first KDE-ish package will automatically install the KDE language packs:</p>
<p><code><br />
$ aptdcon -i kate<br />
The following NEW packages will be installed (71):<br />
  kate kate-data [...] kdelibs5-data [...] language-pack-kde-de language-pack-kde-en [...]<br />
</code></p>
<p>This is now possible because I rewrote the <a href="http://manpages.ubuntu.com/check-language-support">check-language-support</a> logic from scratch; the old code was very slow, hard to read and a nightmare to maintain, and also depended on a lot of data files. The <a href="http://bazaar.launchpad.net/~ubuntu-core-dev/language-selector/ubuntu/view/head:/language_support_pkgs.py">new code</a> is very fast (figuring out all missing language support packages for all installed packages for all available locales takes 8 ms on my system), and has <a href="http://bazaar.launchpad.net/~ubuntu-core-dev/language-selector/ubuntu/view/head:/tests/test_language_support_pkgs.py">full test coverage</a>. </p>
<p>While the <code>check-language-support</code> program still works (I rewrote it using the new API), it is easier and probably a lot faster to just use the new API now, e. g. in our Ubiquity installer.</p>
<p>Say goodbye to this <a href="https://launchpad.net/bugs/396414">2.5 year old bug</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2012/01/software-center-now-installs-language-support-automatically/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>libxklavier is now introspectable</title>
		<link>http://www.piware.de/2012/01/libxklavier-is-now-introspectable/</link>
		<comments>http://www.piware.de/2012/01/libxklavier-is-now-introspectable/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 21:07:34 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gobject-introspection]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=577</guid>
		<description><![CDATA[On my 8 hour train ride to Budapest last Sunday I finally worked on making libxklavier introspectable. Thanks to Sergey&#8217;s fast review the code now landed in trunk. I sent a couple of refinements to the bug report still, but those are mostly just icing on the cake, the main functionality of getting and setting [...]]]></description>
			<content:encoded><![CDATA[<p>On my 8 hour train ride to Budapest last Sunday I finally worked on making <a href="http://freedesktop.org/wiki/Software/LibXklavier">libxklavier</a> <a href="https://live.gnome.org/GObjectIntrospection">introspectable</a>. Thanks to Sergey&#8217;s fast review the code now <a href="http://cgit.freedesktop.org/libxklavier/">landed in trunk</a>. I sent a couple of refinements to the <a href="https://bugs.freedesktop.org/show_bug.cgi?id=44581">bug report</a> still, but those are mostly just icing on the cake, the main functionality of getting and setting keyboard layouts is working nicely now (see the <a href="http://cgit.freedesktop.org/libxklavier/tree/tests/test_gi.py">example script</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2012/01/libxklavier-is-now-introspectable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Precise&#8217;s QA improvements for Alpha-1</title>
		<link>http://www.piware.de/2011/12/precises-qa-improvements-for-alpha-1/</link>
		<comments>http://www.piware.de/2011/12/precises-qa-improvements-for-alpha-1/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 07:56:37 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[release management]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=571</guid>
		<description><![CDATA[I&#8217;m the release engineer in charge for Precise Alpha 1 which is currently being prepared. I must say, this has been a real joy! The fruits of the new QA paradigm and strategy and the new Stable+1 maintenance team have already achieved remarkable results: The archive consistency reports like component-mismatches, uninstallability, etc. now appear about [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m the release engineer in charge for Precise Alpha 1 which is currently being prepared. I must say, this has been a real joy! The fruits of the new <a href="http://www.piware.de/2011/11/12-04-testing-ftw/">QA paradigm and strategy</a> and the new <a href="https://wiki.ubuntu.com/PlusOneMaintenanceTeam">Stable+1 maintenance team</a> have already achieved remarkable results:</p>
<ul>
<li>The archive consistency reports like <a href="http://people.canonical.com/~ubuntu-archive/component-mismatches.txt">component-mismatches</a>, <a href="http://people.canonical.com/~ubuntu-archive/testing/precise_probs.html">uninstallability</a>, etc. now appear about 20 minutes earlier than in oneiric.</li>
<li>CD image builds can now happen 30 minutes earlier after the publisher start, and are much quicker now due to moving to newer machines. We can now build an i386 or amd64 CD image in 8 minutes! Currently they still need to wait for the slow powerpc buildd, but moving to a faster machine there is in progress. These improvements lead to much faster image rebuild turnarounds.</li>
<li>Candidate CDs now get automatically posted to the <a href="http://91.189.93.73/">new ISO tracker</a> as soon as they appear.</li>
<li>Whenever a new Ubuntu image is built (daily or candidate), they <a href="https://jenkins.qa.ubuntu.com/view/Precise%20Daily%20ISOs/">automatically get smoke-tested</a>, so we know that the installer works under some standard scenarios and produces an install which actually boots.</li>
<li>Due to the new discipline and the stable+1 team, we had working daily ISOs pretty much every day. In previous Alphas, the release engineer(s) pretty much had to work fulltime for a day or two to fix the worst uninstallability etc., all of this now went away.</li>
</ul>
<p>All this meant that as a release engineer almost all of the hectic and rather dull work like watching for finished ISO builds and posting them or getting the archive into a releasable state completely went away. We only had to decide when it was a good time for building a set of candidate images, and trigger them, which is just copy&#038;pasting some standard commands. </p>
<p>So I could fully concentrate on the interesting bits like actually investigating and debugging bug reports and regressions. As the Law of Conservation of Breakage dictates, taking away work from the button pushing side just caused the actual bugs to be much harder and earned us e. g. <a href="https://launchpad.net/bugs/894768">this little gem</a> which took Jean-Baptiste, Andy, and me days to even reproduce properly, and will take much more to debug and fix.</p>
<p>In summary, I want to say a huge &#8220;Thank you!&#8221; to the Canonical QA team, in particular Jean-Baptiste Lallement for setting up the auto-testing and Jenkins integration, and the stable+1 team (Colin Watson, Mike Terry, and Mathieu Trudel-Lapierre in November) for keeping the archive in such excellent shape and improving our tools!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2011/12/precises-qa-improvements-for-alpha-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Apport 1.90: Client-side duplicate checking</title>
		<link>http://www.piware.de/2011/11/apport-1-90-client-side-duplicate-checking/</link>
		<comments>http://www.piware.de/2011/11/apport-1-90-client-side-duplicate-checking/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 15:55:33 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[Apport]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[QA]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=561</guid>
		<description><![CDATA[Apport and the retracer bot in the Canonical data center have provided server-side automatic closing of duplicate crash report bugs for quite a long time. As we have only kept Apport crash detection enabled in the development release, we got away with this as bugs usually did not get so many duplicates that they became [...]]]></description>
			<content:encoded><![CDATA[<p>Apport and the retracer bot in the Canonical data center have provided server-side automatic closing of duplicate crash report bugs for quite a long time. As we have only kept Apport crash detection enabled in the development release, we got away with this as bugs usually did not get so many duplicates that they became unmanageable. Also, the number of duplicates provided a nice hint to how urgent and widespread a crash actually was.</p>
<p>However, it&#8217;s time to end that era and provide something better now:</p>
<ul>
<li>This probably caused a lot of frustration when a reporter of the crash spent time, bandwidth, and creativity to upload the crash data and create a description for it, only to find that it got closed as a duplicate 20 minutes later.</li>
<li>Some highly visible crashes sometimes generated up to a hundred duplicates in Launchpad, which was prone to timeouts, and needless catch-up by the retracers.</li>
<li>We plan to have a <a href="https://blueprints.launchpad.net/ubuntu/+spec/foundations-p-crash-database">real crash database soon</a>, and eventually want to keep Apport enabled in stable releases. This will raise the number of duplicates that we get by several magnitudes.</li>
<li>For common crashes we had to write manual bug patterns to avoid getting even more duplicates.
</ul>
<p>So with the just released <a href="https://launchpad.net/apport/trunk/1.90">Apport 1.90</a> we introduce client-side duplicate checking. So from now, when you report a crash, you are likely to see &#8220;We already know about this&#8221; right away, without having to upload or type anything, and you will get directed to the bug page. You should mark yourself as affected and/or subscribe to the bug, both to get a notification when it gets fixed, and also to properly raise the &#8220;hotness&#8221; of the bug to bubble up to developer attention.</p>
<p>For the technically interested, this is how we detect duplicates for the &#8220;signal&#8221; crashes like SIGSEGV (as opposed to e. g. Python crashes, where we always have a fully symbolic stack trace):<br />
As we cannot rely on symbolic stack traces, and do not want to force every user to download tons of debug symbols, Apport now falls back to generating a &#8220;crash address signature&#8221; which combines the absolute addresses of the (non-symbolic) stack trace and the <code>/proc/</code><em>pid</em><code>/maps</code> mapping to a stack of libraries and the relative offsets within those, which is stable under <a href="http://en.wikipedia.org/wiki/Address_space_layout_randomization">ASLR</a> for a given set of dependency versions. As the offsets are specific to the architecture, we form the signature as combination of the executable name, the signal number, the architecture, and the offset list. For example, the i386 signature of bug <a href="https://launchpad.net/bugs/893386"></a> looks like this:</p>
<p><code>/usr/bin/rhythmbox:11:i686:/usr/lib/libgstpbutils-0.10.so.0.24.0+c284:/usr/lib/i386-linux-gnu/libgobject-2.0.so.0.3000.0+3337a:/usr/lib/i386-linux-gnu/libgobject-2.0.so.0.3000.0+8e0</code></p>
<p>As library dependencies can change, we have more than one architecture, and the faulty function can be called from different entry points, there can be many address signatures for a bug, so the database maintains an N:1 mapping. In its current form the signatures are taken as-is, which is much more strict than it needs to be. Once this works in principle, we can refine the matching to also detect duplicates from different entry points by reducing the part that needs to match to the common prefix of several signatures which were proven to be a duplicate by the retracer (which gets a fully symbolic stack trace).</p>
<p>The retracer bots now exports the current duplicate/address signature database to <a href="http://people.canonical.com/~ubuntu-archive/apport-duplicates">http://people.canonical.com/~ubuntu-archive/apport-duplicates</a> in an indexed text format from where Apport clients can quickly check whether a bug is known.</p>
<p>For the Launchpad crash database implementation we actually check if the bug is readable by the reporter, i. e. it is private and the reporter is in a subscribed team, or the bug is public; if not, we let him report the bug anyway and duplicate it later through the existing server-side retracer, so that the reporter has a chance of getting subscribed to the bug. We also let the bug be filed if the currently existing symbolic stack trace is bad (tagged as <a href="https://bugs.launchpad.net/ubuntu/+bugs?field.tag=apport-failed-retrace">apport-failed-retrace</a>) or if a developer wants a new symbolic stack trace with the current libraries (tagged as <a href="https://bugs.launchpad.net/ubuntu/+bugs?field.tag=apport-request-retrace">apport-request-retrace</a>).</p>
<p>As this is a major new feature, I decided that it&#8217;s time to call this Apport 2.0. This is the first public beta towards it, thus called 1.90. With Apport&#8217;s test driven and agile development the version numbers do not mean much anyway (the retracer bots in the data center always just run trunk, for example), so this is as good time as any to reset the rather large &#8220;.26&#8243; minor version that we are at right now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2011/11/apport-1-90-client-side-duplicate-checking/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>12.04: Testing FTW</title>
		<link>http://www.piware.de/2011/11/12-04-testing-ftw/</link>
		<comments>http://www.piware.de/2011/11/12-04-testing-ftw/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 08:24:59 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[uds]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=549</guid>
		<description><![CDATA[I arrived back home in Augsburg, from last week&#8217;s Ubuntu Developer Summit in Orlando, FL. As this is a quality/LTS cycle, we pretty much already knew in advance what to do (bug fixing, bug fixing, some boot speed, and did I mention bug fixing?), but still we had many highly interesting and exciting sessions this [...]]]></description>
			<content:encoded><![CDATA[<p>I arrived back home in Augsburg, from last week&#8217;s <a href="http://summit.ubuntu.com/uds-p/">Ubuntu Developer Summit</a> in Orlando, FL. As this is a quality/LTS cycle, we pretty much already knew in advance what to do (bug fixing, bug fixing, some boot speed, and did I mention bug fixing?), but still we had many highly interesting and exciting sessions this time, not so much about <em>what</em> we are going to do, but <em>how</em> we are going to build 12.04.</p>
<p>So far our common practice has been to toss everything new into the development release until Feature Freeze and then try and clean up most of the fallout. Me and many other developers have always cried for having more time for fixing long-standing bugs and not introducing breakage in the first place. It seems that now with 12.04, Ubuntu/Canonical are actually getting serious about it.</p>
<p><a href="http://piware.de/wp-uploads/2011/11/precise-failure-is-not-an-option.png"><img src="http://piware.de/wp-uploads/2011/11/precise-failure-is-not-an-option.png" alt="" title="Ubuntu 12.04 - Failure is not an Option" width="612" height="434" class="alignnone size-full wp-image-550" /></a></p>
<p>(Any resemblance to that <a href="http://piware.de/fotos/Apollo%2013%20-%20Failure%20is%20not%20an%20option.jpg">postcard</a> from the <a href="https://plus.google.com/107564545827215425270/posts/ScoyxHExYJd">Kennedy Space Center</a> which I went to last Sunday is of course absolutely unintended and purely coincidental <img src='http://www.piware.de/wp/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>The mission statement is now to have working ISOs, stable → development, and daily intra-development upgrades <em>every day</em>, quick and regular cleanup of <a href="http://people.canonical.com/~ubuntu-archive/testing/precise_probs.html">uninstallable packages</a>, <a href="http://people.canonical.com/~ubuntu-archive/component-mismatches.txt">component-mismatches</a>, <a href="http://people.canonical.com/~ubuntu-archive/nbs.html">NBS</a> etc., backed by a new &#8220;stable +1&#8243; team backed by three people on a rotational shift. </p>
<p>QA team is now setting up daily automatic smoketesting of the installer and other packages which have tests. For the latter we&#8217;ll convert some packages to the <a href="http://dep.debian.net/deps/dep8/">DEP-8</a>, the proposed format for running <a href="http://packages.debian.org/sid/autopkgtest">autopkgtest</a> on (I&#8217;ll do udisks, postgresql-common, pygobject, apport, and jockey soon).</p>
<p>We&#8217;ll try do put uploads which might break something (like new libraries) to a staging area first, against which we can run test suites of reverse dependencies before it lands in the new release. As doing this on a large scale still requires infrastructure to be created, we&#8217;ll only exercise it for a few packages by uploading to <code>precise-proposed</code> first, but this has a high potential for extension.</p>
<p>We want to commit to fixing major breakage within 3 hours of development time, or otherwise revert the faulty package to the previous version (unless that aggravates problems, such as file conflicts).</p>
<p>Finally, for Canonical upstreams we are introducing &#8220;acceptance criteria&#8221;, which will hopefully significantly raise the quality and lower the regressions of each Unity etc. release.</p>
<p>So, the mission is clear. In practice we&#8217;ll probably have to make some real-life concessions, and Murphy&#8217;s law dictates that there still will be some breakage, but we can learn from that as we go.</p>
<p>Let&#8217;s build 12.04 LTS!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2011/11/12-04-testing-ftw/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Riding the Pangolin</title>
		<link>http://www.piware.de/2011/11/riding-the-pangolin/</link>
		<comments>http://www.piware.de/2011/11/riding-the-pangolin/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 15:31:12 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[uds]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=545</guid>
		<description><![CDATA[Just took the plunge, using the excellent bandwidth and local mirror at UDS: $ lsb_release -irc Distributor ID: Ubuntu Release: 12.04 Codename: precise Nothing blew up in my face, so it seems today is a good day to die^Wupgrade.]]></description>
			<content:encoded><![CDATA[<p>Just took the plunge, using the excellent bandwidth and local mirror at UDS:<br />
<code><br />
$ lsb_release -irc<br />
Distributor ID:	Ubuntu<br />
Release:	12.04<br />
Codename:	precise<br />
</code></p>
<p>Nothing blew up in my face, so it seems today is a good day to die^Wupgrade.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2011/11/riding-the-pangolin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apport: debug symbol retrieval now in GUI</title>
		<link>http://www.piware.de/2011/10/apport-debug-symbol-retrieval-now-in-gui/</link>
		<comments>http://www.piware.de/2011/10/apport-debug-symbol-retrieval-now-in-gui/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 11:18:49 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[Apport]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[symbolic stack trace]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=534</guid>
		<description><![CDATA[On a rather calm ten-hour flight to Orlando I once again did some pygobject, udisks, and Apport hacking (It&#8217;s scary how productive one can be when not constantly being interrupted by IRC, email, etc). One more visible change amongst these was finally fixing a five year old five-digit bug to integrate apport-retrace into the GUI, [...]]]></description>
			<content:encoded><![CDATA[<p>On a rather calm ten-hour flight to Orlando I once again did some pygobject, udisks, and Apport hacking (It&#8217;s scary how productive one can be when not constantly being interrupted by IRC, email, etc). One more visible change amongst these was finally fixing a <a href="https://launchpad.net/bugs/75901">five year old five-digit bug</a> to integrate <a href="manpages.ubuntu.com/apport-retrace">apport-retrace</a> into the GUI, now that it <a href="http://www.piware.de/2011/08/apport-retrace-made-useful/">does not potentially wreck your installation any more</a>.</p>
<p>If the <code>apport-retrace</code> package is installed, the crash detail dialog will show a new &#8220;Examine locally&#8221; button:</p>
<p><img src="http://piware.de/wp-uploads/2011/10/crash-details.png" alt="Apport crash detail dialog" title="Apport crash detail dialog" /></p>
<p>After clicking this, you can choose what do do exactly:</p>
<p><img src="http://piware.de/wp-uploads/2011/10/retrace-dialog.png" alt="Retrace action dialog" title="Retrace action dialog"  /></p>
<p>I know this dialog is not a beauty, as it&#8217;s implemented using the <code>ui_question_choice()</code> API which is used by package hooks. That makes it work for all available UIs (GTK, KDE, CLI), though, and can easily be extended to have more actions. And if you get this far and want to stack traces, you are used to looking at eye-bleeding gibberish anyway..</p>
<p>Presumably the most useful (and default) action is to download all the debug symbols, open a Terminal, and put you into a GDB session with all these, and the core dump loaded, so that you can poke around the crashed program state with all symbols available.</p>
<p>But you can also run gdb without downloading debug symbols, or just update the .crash report file with a fully symbolic stack trace.</p>
<p>This works just as well in <code>apport-cli</code>, but not yet in the KDE version: Someone needs to implement the equivalent of <a href="http://bazaar.launchpad.net/~apport-hackers/apport/trunk/revision/2007">the apport-gtk implementation</a> to <code>apport-kde</code> and <code>kde/bugreport.ui</code>, i. e. show an &#8220;Examine locally&#8221; button if <code>self.can_examine_locally()</code> is true, and add an appropriate <code>ui_run_terminal()</code> method (which should be fairly similar to the GTK one, just with Qt/KDEish terminal emulators). But as Kubuntu does not currently use Apport (and also because I didn&#8217;t have all the dependencies installed on my laptop) I did not yet do this. Please catch me on IRC/mail/merge proposal if you want to work on this. If you look at above commit, the changes to the GtkBuilder file look huge, but that&#8217;s only because I haven&#8217;t touched it for ages and the current Glade shuffled the elements quite a bit; it just adds the button to the dialog.</p>
<p>For now this is all sitting in trunk, I&#8217;ll do a new upstream release and Ubuntu precise upload soon.</p>
<p>Happy debugging!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2011/10/apport-debug-symbol-retrieval-now-in-gui/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Happy Birthday Ubuntu!</title>
		<link>http://www.piware.de/2011/10/happy-birthday-ubuntu/</link>
		<comments>http://www.piware.de/2011/10/happy-birthday-ubuntu/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 07:40:41 +0000</pubDate>
		<dc:creator>pitti</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[anniversary]]></category>
		<category><![CDATA[birthday]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[oxford]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[uds]]></category>

		<guid isPermaLink="false">http://www.piware.de/?p=526</guid>
		<description><![CDATA[7 years ago, The Ubuntu 4.10 &#8220;The Warty Warthog&#8221; was announced. A huge congrats to the community, Canonical, and especially Mark for getting so far from &#8220;there&#8221; to &#8220;here&#8221;. This brings back old memories of my first conference in Oxford in August, the great-great-grandfather to what is UDS these days. Back then, there was no [...]]]></description>
			<content:encoded><![CDATA[<p>7 years ago, The <a href="https://lists.ubuntu.com/archives/ubuntu-announce/2004-October/000003.html">Ubuntu 4.10 &#8220;The Warty Warthog&#8221;</a> was announced. A huge congrats to the community, Canonical, and especially Mark for getting so far from &#8220;there&#8221; to &#8220;here&#8221;.</p>
<p>This brings back old memories of my first <a href="http://piware.de/fotos/Warthogs-Conference-Aug2004/07%20-%20Warty%20Hack%20room.html">conference in Oxford in August</a>, the great-great-grandfather to what is UDS these days. Back then, there was no company, no Launchpad, no Blueprints, no work items, no detailled plans, just a bunch of ideas, BoFs, and this was a third of the <em>entire</em> crowd:</p>
<p><a href="http://piware.de/fotos/Warthogs-Conference-Aug2004/.slide_07%20-%20Warty%20Hack%20room.jpg"><img alt="Warty Hack Room" src="http://piware.de/fotos/Warthogs-Conference-Aug2004/.slide_07%20-%20Warty%20Hack%20room.jpg" title="Warty Hack Room" width="300"/></a></p>
<p>Back then we worked on the famous TRLS technology (&#8220;Totally Rad Laptop Support&#8221;) and were proud when we got the ThinkPads to suspend once. During that conference I wrote <a href="http://packages.debian.org/sid/pmount">pmount</a> to provide automatic mounting of USB sticks in a safe manner. Those were the days&#8230; <img src='http://www.piware.de/wp/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>But I can also safely say that there are some things that haven&#8217;t changed. Even though both the community and the company (which changed away from <code>www.no-name-yet.com</code> recently) grew by two magnitudes since then, we still have the same serious attitude, stern look, and formal attire as we had back then:</p>
<div class="wp-caption alignnone" style="width: 310px"><a href="http://piware.de/fotos/Warthogs-Conference-Aug2004/.slide_06%20-%20Rob%2C%20Daniel%2C%20Scott%2C%20Jeff.jpg"><img alt="We are professionals, really!" src="http://piware.de/fotos/Warthogs-Conference-Aug2004/.slide_06%20-%20Rob%2C%20Daniel%2C%20Scott%2C%20Jeff.jpg" title="We are professionals, really!" width="300"/></a><p class="wp-caption-text">We are professionals, really!</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.piware.de/2011/10/happy-birthday-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

