<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Gmb on Launchpad Blog</title>
    <link>https://blog.launchpad.net/authors/gmb/</link>
    <description>News and updates from the Launchpad team</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 20 Jun 2012 16:06:27 +0000</lastBuildDate>
    <atom:link href="https://blog.launchpad.net/feed/authors/gmb/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Fixing a simple bug in Launchpad - A screencast</title>
      <link>https://blog.launchpad.net/general/fixing-a-simple-bug-in-launchpad-a-screencast/</link>
      <pubDate>Wed, 20 Jun 2012 16:06:27 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=3507</guid>
      <description>&lt;p&gt;When I ran the Launchpad Development Clinics at the last UDS, I was asked if I would give a presentation on how to fix a simple bug in Launchpad. This sounded like a great idea - after all there&amp;rsquo;s a lot of parts to the Launchpad development process that apply to every single branch you ever write, so it seemed well worth the effort. Rather than a presentation, though, I figured a screencast would be of more use, so here is just such a screencast. If you&amp;rsquo;ve got any questions or comments, don&amp;rsquo;t hesitate to get in touch.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;
			&lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/Crpuxq0XQ3Q?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;
		&lt;/div&gt;

</description>
    </item>
    
    <item>
      <title>A story of a clinic</title>
      <link>https://blog.launchpad.net/general/a-story-of-a-clinic/</link>
      <pubDate>Fri, 01 Jun 2012 10:27:38 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=3447</guid>
      <description>&lt;p&gt;You&amp;rsquo;ll remember that a while back, dear reader, &lt;a href=&#34;http://blog.launchpad.net/meet-the-devs/launchpad-clinic-at-uds-q&#34; title=&#34;Launchpad Clinic at UDS-Q&#34;&gt;we announced&lt;/a&gt; that we&amp;rsquo;d be running a couple of Launchpad Development Clinics at UDS (we called them Launchpad Clinics at the time, and I lost count of how many people commented that that sounded as though Launchpad was ill. It isn&amp;rsquo;t; it&amp;rsquo;s in the same rude health that it always was). We&amp;rsquo;ll come up with a better name next year!&lt;/p&gt;
&lt;p&gt;Anyway, we made the announcement, put up the wiki page, saw a few names and bugs added to it, and didn&amp;rsquo;t really expect to be hugely busy. Indeed, when &lt;a href=&#34;https://launchpad.net/~czajkowski&#34;&gt;Laura&lt;/a&gt;, &lt;a href=&#34;https://launchpad.net/~matthew.revell&#34;&gt;Matthew&lt;/a&gt;, &lt;a href=&#34;https://launchpad.net/~huwshimi&#34;&gt;Huw&lt;/a&gt;, &lt;a href=&#34;https://launchpad.net/~rvb&#34;&gt;Raphaël&lt;/a&gt; and I convened in one of the UDS meeting rooms for the first clinic, it was mostly empty except for the stragglers from the previous session.&lt;/p&gt;
&lt;p&gt;Then a person appeared. Actually, it was two people squeezed into the skin of one person: &lt;a href=&#34;https://launchpad.net/~thumper&#34;&gt;Tim Penhey&lt;/a&gt;, who looks like he&amp;rsquo;s been chiseled out of granite and has a tendency to loom well-meaningly, like an avuncular greek pillar. We figured that since he&amp;rsquo;s an ex-Launchpadder, he didn&amp;rsquo;t count, and so went back to self-deprecatory joking whilst worrying that we&amp;rsquo;d massively miscalculated how many people would want to come to the clinics.&lt;/p&gt;
&lt;p&gt;And then another person arrived. And another, and another. Soon, we&amp;rsquo;d gone from having a couple of attendees who really just needed to run ideas past a Launchpad core developer to having ten people who all needed questions answered, or a development instance spun up. After that, things get a bit fuzzy, because I was always answering someone&amp;rsquo;s question or being root on an EC2 instance for someone else. When Laura told us that our time was up I was, I have to confess, somewhat surprised.&lt;/p&gt;
&lt;p&gt;Thursday&amp;rsquo;s session was a quieter affair, in part at least because we had to reschedule it at the last minute (UDS schedules are like quicksand, and if it weren&amp;rsquo;t for the amazing UDS admin team everyone would be thoroughly lost for much of the time), but there were still people there with bugs to be fixed and questions to be answered. I had preliminary discussions with &lt;a href=&#34;https://launchpad.net/~chrisjohnston&#34;&gt;Chris Johnston&lt;/a&gt; about adding API support to Blueprints, and worked with &lt;a href=&#34;https://launchpad.net/~urshina&#34;&gt;Ursula Junque&lt;/a&gt; on working out how to add activity logging to the same.&lt;/p&gt;
&lt;p&gt;The upshot of the clinics is, I think, massively positive. There is a genuine development community out there for Launchpad, and people really are keen to make changes to the dear old Beast whilst the Launchpad core developers are working elsewhere or fixing things that are horribly complex (and usually not user-facing). For someone like me, who had been somewhat skeptical about the kind of response the clinics would receive (even though they were partly my idea), this is immensely gratifying news.&lt;/p&gt;
&lt;p&gt;There are, of course, many things that we need to improve on, and many lessons that we can learn. People want to know how to fix a simple bug without having to come to a session at UDS, so I&amp;rsquo;m going to record a screencast of just such a procedure, right from finding the bug to working out where the fix lives, all the way through the coding and testing process, right up to the point of getting the branch reviewed and landed. Hopefully this will give everyone a great jumping-off point.&lt;/p&gt;
&lt;p&gt;When we set out on this particular journey, one of the criteria I wrote down for considering the clinics a success was &amp;ldquo;we&amp;rsquo;ll want to do it again at the next UDS.&amp;rdquo; Well, I do. We did well; we can and will do better next time. Who&amp;rsquo;s with me?&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/06/large.jpg&#34;&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2012/06/large.jpg&#34; alt=&#34;Launchpad Clinic Attendees&#34;&gt;&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>That Juju that you do (Part II: A magical balm to sooth your ills)</title>
      <link>https://blog.launchpad.net/general/that-juju-that-you-do-part-ii/</link>
      <pubDate>Tue, 03 Apr 2012 10:16:42 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=3278</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/04/magic-bottle-2.png&#34;&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2012/04/magic-bottle-2-256x300.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In &lt;a href=&#34;http://blog.launchpad.net/general/that-juju-that-you-do-part-i&#34; title=&#34;That Juju that you do (Part I)&#34;&gt;my previous post&lt;/a&gt; I talked about the pain of having to set up a testing environment for our parallelised test work, and how there were an awful lot of hoops to jump through in order to get something usable up and running. Now, dear reader, let me tell you a tale of strangeness and charms.&lt;/p&gt;
&lt;h4 id=&#34;enter-juju&#34;&gt;Enter Juju&lt;/h4&gt;
&lt;p&gt;If you&amp;rsquo;re not familiar with Juju, I&amp;rsquo;d urge you to pay a visit to &lt;a href=&#34;http://juju.ubuntu.com&#34;&gt;the Juju website&lt;/a&gt; to learn more, but in brief, I&amp;rsquo;ll explain: Juju is an orchestration service for Ubuntu. Using Juju allows you to deploy services rapidly, scaling up or down as you need. Each service is contained within a Charm, which is at it simplest a set of scripts that ensure that a given Juju unit does what it&amp;rsquo;s supposed to do at the appointed time (for example: install and config_changed are two of the most common hook scripts for a charm to have). We realised that in order to make our life simpler when testing our parallelisation work we could develop a pair of Buildbot Charms (one for the master, one for the slave) which when deployed through Juju, and given the right set of configuration options, would give us a working Buildbot setup on which to test Launchpad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;More about the charms&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The charms need to be able to automatically configure themselves to talk to each other (this is usually managed in Buildbot by static configuration files). Luckily, Juju provides for exactly that situation with the notion of &amp;ldquo;relations&amp;rdquo;; one charm can declare that it provides a particular interface as part of a relation and another can say that it requires that interface in order to be able to be a part of that relation. For our Buildbot charms, we have the following in the master&amp;rsquo;s &lt;code&gt;metadata.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;provides:
  buildbot:
    interface: master
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And in the slave:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;provides:
  buildbot:
    interface: slave
requires:
  buildbot:
    interface: master
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Each charm has a couple of hooks that deal with relation, named in the form &lt;code&gt;buildbot-relation-*&lt;/code&gt; where &lt;code&gt;*&lt;/code&gt; is &lt;code&gt;joined&lt;/code&gt;, &lt;code&gt;changed&lt;/code&gt; or &lt;code&gt;broken&lt;/code&gt;. These are run by Juju at the appropriate point in the process of connecting one instance to another. With all this in place, then, we can set up a working Buildbot environment by doing something like this:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ juju bootstrap # create the Juju environment
$ juju deploy buildbot-master —config=/path/to/master/config.yaml # deploy the master charm
$ juju deploy buildbot-slave —config=/path/to/slave/config.yaml # deploy the slave charm
$ juju add-relation buildbot-slave buildbot-master
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The last line - &lt;code&gt;juju add-relation buildbot-slave buildbot-master&lt;/code&gt;- tells Juju to connect the buildbot slave node to the master node. The two then do a bit of a dance to configure each other properly (in fact, it&amp;rsquo;s mostly a case of the slave saying: &amp;ldquo;Hey, I&amp;rsquo;m here, what do you want me to do?&amp;rdquo; and the master passing back configuration instructions). Once this is all done, you have a working Buildbot master and slave, ready to accept work to build.&lt;/p&gt;
&lt;h4 id=&#34;what-have-we-discovered-about-juju&#34;&gt;What have we discovered about Juju?&lt;/h4&gt;
&lt;p&gt;First and foremost, we&amp;rsquo;ve learned just how powerful Juju actually is. We&amp;rsquo;ve taken a fairly complex-to-configure build environment, for which we normally use dedicated machinery whose configuration is not to be touched without sysadmin blessing on pain of pain, and turned it into something that we can deploy with four or five commands and a couple of configuration files. Sure, Juju has its quirks and oddnesses, but when we&amp;rsquo;ve run across them the Juju development team has been amazingly helpful with workarounds or, more usually, bug fixes. The current version of Juju is implemented in Python, too, so we find it pretty easy to contribute fixes of our own if we need to.&lt;/p&gt;
&lt;h4 id=&#34;where-can-i-find-out-more&#34;&gt;Where can I find out more?&lt;/h4&gt;
&lt;p&gt;As I said above, if you want to know more about Juju, you can check out the &lt;a href=&#34;http://juju.ubuntu.com&#34;&gt;Juju website&lt;/a&gt;. If you want to take a look at our Buildbot charms and how we&amp;rsquo;ve built our hooks (they&amp;rsquo;re written in Python because that happens to be our language of choice, but in fact they can be written in anything so long as they&amp;rsquo;re executable), you can grab our code from Launchpad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For the master: &lt;code&gt;bzr branch lp:~yellow/charms/oneiric/buildbot-master/trunk buildbot-master&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;For the slave: &lt;code&gt;bzr branch lp:~yellow/charms/oneiric/buildbot-slave/trunk buildbot-slave&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you&amp;rsquo;ve got questions about Juju in general, the folks in #juju on Freenode are always tremendously helpful. If you&amp;rsquo;ve got any questions about our charms, ask them in the comments here and I&amp;rsquo;ll do my best to answer them.&lt;/p&gt;
&lt;p&gt;((Image by &lt;a href=&#34;http://www.flickr.com/photos/samcatchesides/&#34;&gt;http://www.samcatchesides.com/&lt;/a&gt; under a Creative Commons license)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>That Juju that you do (Part I: Bring the pain)</title>
      <link>https://blog.launchpad.net/general/that-juju-that-you-do-part-i/</link>
      <pubDate>Fri, 30 Mar 2012 14:44:28 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=3272</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blog.launchpad.net/images/posts/2012/03/magic-bottle-1-for-blog.png&#34;&gt;&lt;img src=&#34;https://blog.launchpad.net/images/posts/2012/03/magic-bottle-1-for-blog-280x300.png&#34; alt=&#34;juju bottle&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Benji&amp;rsquo;s &lt;a href=&#34;http://blog.launchpad.net/general/parallelising-the-unparallelisable&#34; title=&#34;Parallelising the Unparallelisable&#34;&gt;blog post&lt;/a&gt; earlier this week gave you all some insight into what the Launchpad Yellow Squad has been doing recently in its attempt to parallelise the Launchpad test suite. One of the side effects of this is that we&amp;rsquo;ve been making quite a lot of use of Juju, and we thought it&amp;rsquo;d be nice to actually spell out what we&amp;rsquo;ve been doing.&lt;/p&gt;
&lt;h4 id=&#34;the-problem&#34;&gt;The problem&lt;/h4&gt;
&lt;p&gt;We&amp;rsquo;re working to parallelise Launchpad&amp;rsquo;s test suite so that it doesn&amp;rsquo;t take approximately one epoch to get a branch from being approved for merging until it lands. A lofty goal, sure, and one that presents some interesting problems from the perspective of building an environment to test our work in. You see, Launchpad&amp;rsquo;s build infrastructure is a pretty complicated beast. It&amp;rsquo;s come a long way since the time when submitting a branch for merging meant sending an email to our &lt;abbr title=&#34;Patch Queue Manager&#34;&gt;PQM&lt;/abbr&gt; bot, which would then run the test suite and kick the branch out if it failed, but now it&amp;rsquo;s something of a behemoth.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Time for some S&amp;amp;M&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We use &lt;a href=&#34;http://buildbot.net&#34;&gt;Buildbot&lt;/a&gt; as our continuous integration system. There are two parts to Buildbot: the master and the slave. Broadly put, the slave is the part of Buildbot that is responsible for doing the actual work of compilation and running tests and the master is responsible for telling the slave when to do things. Each master can be responsible for several slaves. When it became obvious that we were going to need to essentially replicate our existing setup in order to test our parallelisation work, we considered asking Canonicals system administrators, in our sweetest tones, to give us a box upon which to do our testing work, but we spotted two reasons that this would be problematic:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We didn&amp;rsquo;t actually know at the outset what the best architecture was for our project.&lt;/li&gt;
&lt;li&gt;Asking for a machine without knowing what you actually need is likely to earn you a look so old it could have come from an ammonite, at least if you have sensible sysadmins.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So instead, the obvious solution: use Amazon EC2. After all, that would allow us to play with different architectures without there being any huge cost in terms of physical resources. Moreover, we&amp;rsquo;d be able to have root access on the instances on which we were testing, which makes debugging such a complicated process so much easier.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;However&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There was still a problem. How to actually set up the test instances, given that there are five of us spread between three timezones, that it takes a significant amount of time to set up a machine for Launchpad development, and finally that we don&amp;rsquo;t really want to leave EC2 instances running overnight if we don&amp;rsquo;t have to (because it&amp;rsquo;s expensive).&lt;/p&gt;
&lt;p&gt;The sequence of steps we&amp;rsquo;d have to take to up an instance tends to look something like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Launch a new EC2 instance (this happens pretty quickly, thanks, Amazon)&lt;/li&gt;
&lt;li&gt;Make sure that everyone&amp;rsquo;s public SSH keys are usable on that instance&lt;/li&gt;
&lt;li&gt;Run our Launchpad setup script(s) (this takes about an hour, usually).&lt;/li&gt;
&lt;li&gt;Install buildbot.&lt;/li&gt;
&lt;li&gt;Configure buildbot correctly as   master or slave.&lt;/li&gt;
&lt;li&gt;Run buildbot (or buildslave, if this is a slave) and make sure it&amp;rsquo;s hooked up correctly to the other type of buildbot.&lt;/li&gt;
&lt;li&gt;Get some code into buildbot and make it run the test suite.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;As you can see, this is pretty long-winded and rather fragile; it&amp;rsquo;s very easy for us to miss out a step or misconfigure something, get confused and then be left with a broken instance and a bit of a headache. Now, you&amp;rsquo;d be quite right to argue that we could just write a checklist - or better yet, a shell script - to do a lot of the setup work for us. A good idea, true. But there&amp;rsquo;s a better way&amp;hellip;&lt;/p&gt;
&lt;p&gt;To be continued (or some other phrase that doesn&amp;rsquo;t sound so hammy that it almost goes &amp;ldquo;oink&amp;rdquo;)&amp;hellip;&lt;/p&gt;
&lt;p&gt;(Image by &lt;a href=&#34;http://www.flickr.com/photos/samcatchesides/&#34;&gt;http://www.samcatchesides.com/&lt;/a&gt; under a Creative Commons license)&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>You can&#39;t be too helpful: Better handling of large blobs by +filebug</title>
      <link>https://blog.launchpad.net/bug-tracking/you-cant-be-too-helpful/</link>
      <pubDate>Thu, 04 Mar 2010 07:35:26 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=1403</guid>
      <description>&lt;p&gt;Imagine the scene, dear reader. You&amp;rsquo;re running the latest Ubuntu pre-release, dilligently testing that everything works the way it ought. An application crashes horribly; Apport pops up to tell you that it spotted the crash - would you like to report a bug?&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Of course I would,&amp;rdquo; you cry, &amp;ldquo;I am a desktop testing hero!&amp;rdquo; And so Apport does its thing and takes you to Launchpad to file the bug report. And then Launchpad times out.&lt;/p&gt;
&lt;p&gt;At this point, if you&amp;rsquo;re like me, you might shout a bit. You refresh and refresh with all your might but still Launchpad will only give you an error page. Finally, defeated, broken, you close your browser and shuffle off into the corner of your room, where you bury yourself under the mountain of discarded CD-Rs that contain daily ISOs of Ubuntus past and sob into your coffee.&lt;/p&gt;
&lt;p&gt;Okay, so maybe I&amp;rsquo;ve exaggerated it a bit, but that doesn&amp;rsquo;t change the basic fact that timeouts on the +filebug page when you&amp;rsquo;re filing a bug via Apport are intensely, soul-destroyingly annoying. They&amp;rsquo;re annoying to us in the Launchpad Bugs team too, because we see them in our error reports. They&amp;rsquo;re so annoying, dear reader, that we&amp;rsquo;re moved to hyperbole when writing about them for the official Launchpad blog.&lt;/p&gt;
&lt;p&gt;The problem with processing data supplied by Apport has always been one of scale. Originally the extra data that Apport would upload to Launchpad wouldn&amp;rsquo;t be massive, maybe hitting 10MB if the application was particularly busy. Because of this, Launchpad simply processed those data synchronously whilst loading the bug-filing form for you, so that the data you&amp;rsquo;d uploaded would be included with the bug.&lt;/p&gt;
&lt;p&gt;Of course, that approach doesn&amp;rsquo;t scale very well, and recently we&amp;rsquo;ve been seeing the data blobs that Apport uploads hit ~100MB in size. That&amp;rsquo;s far too big for Launchpad to handle in a timely manner whilst doing all the additional work of rendering the bug filing form for you, so in those circumstances it invariably times out and you get that ever-annoying error page.&lt;/p&gt;
&lt;p&gt;This was an interesting problem to solve, and we came up with a number of different possible solutions. One viable solution for this, which we eventually decided not to implement, involved having a separate request for processing the extra bug data and then loading the data into the filebug form with AJAX. We discarded that idea because there was always the chance that that request would time out, leaving us in an only slightly better position than we were already.&lt;/p&gt;
&lt;p&gt;There was some discussion on the Launchpad developers mailing list about whether we could just defer loading the extra data into the bug until after it had been filed, but we quickly realised that not only could the extra data carry an initial subject for the bug, but it could also indicate that the bug should be filed as private, something which currently can&amp;rsquo;t be done via the Launchpad web UI.&lt;/p&gt;
&lt;p&gt;The solution we chose to implement, which we&amp;rsquo;ve now rolled out to the Launchpad edge and production servers, is to have a queue of blobs waiting to be processed. We already have quite a robust job-processing system built into the Launchpad codebase, which we use for creating the diffs in merge proposals and calculating bug heat, amongst other things. Adding support for processing uploaded blobs was quite simple, since the existing blob parsing code was well documented. The blob processing jobs are picked up and run by a cron script that runs every minute or so, and the data retrieved from the blobs are stored with the original processing job as a JSON-formatted string. When you hit the +filebug page it checks to see if the relevant blob has been processed. If not, it waits until processing is complete. Once processing is complete the serialized data are loaded into the +filebug page for use later on.&lt;/p&gt;
&lt;p&gt;The advantage to you as a user, then, is that you should never again see a timeout on the +filebug page due to the size of the blob that Apport has uploaded. With the upcoming release of Ubuntu Lucid, we&amp;rsquo;re hopeful that this will make a real difference to those people testing the pre-release versions of the distro.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Inline dupe-finding: an exercise in pain reduction</title>
      <link>https://blog.launchpad.net/cool-new-stuff/inline-dupe-finding/</link>
      <pubDate>Thu, 10 Dec 2009 09:35:06 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=1190</guid>
      <description>&lt;p&gt;For the last million years&lt;sup&gt;1&lt;/sup&gt; or so I&amp;rsquo;ve been working on a cool new feature for Launchpad Bugs: an inline, AJAXified, asynchronous dupe finder.&lt;/p&gt;
&lt;p&gt;For quite some time now people have encountered timeouts or long response times when trying to file bugs, particularly when they enter a long bug summary or the project that they&amp;rsquo;re filing the bugs on has a lot of bugs through which Launchpad has to search in order to be able to find possible duplicates. The upshot was that whenever a timeout occurred people were unable to file a bug and would have to back up and start again. Needless to say, this was frustrating for all involved.&lt;/p&gt;
&lt;p&gt;The new inline dupefinder, which you&amp;rsquo;ll now find on the &amp;ldquo;Report a bug&amp;rdquo; page of any project in Launchpad (when viewed on &lt;a href=&#34;https://edge.launchpad.net&#34;&gt;edge.launchpad.net&lt;/a&gt;) is designed to stop this from being a problem, or at least to reduce the problem to a more manageable level and stop it from getting in peoples&amp;rsquo; way. It does this in two ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The inline list of duplicates is much quicker to render than a full Launchpad page.&lt;/li&gt;
&lt;li&gt;If the search for duplicates times out for some reason you&amp;rsquo;ll still be able to file a bug.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Here&amp;rsquo;s the catch: &lt;strong&gt;we need your help&lt;/strong&gt;. Launchpad&amp;rsquo;s development cycle this month is very short due to the approaching year-end holiday period, so we need to get as much testing done on this as possible. Check out the dupe finder, see if it works for you and, most importantly, &lt;a href=&#34;https://bugs.launchpad.net/malone/+filebug&#34;&gt;report a bug&lt;/a&gt; if it doesn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;One last thing: at the time of writing, the inline dupe finder only works for projects (like &lt;a href=&#34;https://launchpad.net/malone&#34;&gt;Launchpad Bugs&lt;/a&gt;), not for packages or project groups. We&amp;rsquo;ll hopefully be enabling it for project groups today and with a bit of luck for packages, too. We started off with projects only because it&amp;rsquo;s the simplest implementation of the concept and it gives us a good base to test from.&lt;/p&gt;
&lt;p&gt;Thanks in advance for your help. Let&amp;rsquo;s make Launchpad awesome together!&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; This might be an exaggeration.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Making bug migration that bit easier</title>
      <link>https://blog.launchpad.net/cool-new-stuff/my-migrator-let-me-show-you-it/</link>
      <pubDate>Wed, 17 Jun 2009 10:41:01 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=800</guid>
      <description>&lt;p&gt;Greetings, readers!&lt;/p&gt;
&lt;p&gt;For a while now I&amp;rsquo;ve been the Launchpad developer in charge of helping users of other bug trackers migrate their projects to Launchpad. We do this reasonably regularly for users of Trac, SourceForge and Bugzilla, and we&amp;rsquo;re always open to helping people migrate from other solutions should they wish to.&lt;/p&gt;
&lt;p&gt;Several months back, the &lt;a href=&#34;http://launchpad.net/elisa&#34;&gt;Elisa project&lt;/a&gt; migrated from Trac to Launchpad. In doing so, they wrote a script to take their Trac database and convert it to the Launchpad bug interchange format, which is an XML schema that we use for bug imports (you give us an XML document containing your bugs that conforms to the interchange format schema and we can then import it into Launchpad for you).&lt;/p&gt;
&lt;p&gt;More recently, we realised that we were getting quite a few requests from Trac users for help with migration. We went back to the Elisa developers and asked if they&amp;rsquo;d be willing to let us have their migration tool under the GPL so that we could share it with everyone. They kindly said yes, passed the code to us under GPLv3, and yesterday I made it available on Launchpad as the &lt;a href=&#34;http://launchpad.net/trac-launchpad-migrator&#34;&gt;Trac to Launchpad Migrator&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a bit rough around the edges at the moment and needs some documentation, but more than anything else it needs people to test it and use it so that we can make migrating from Trac to Launchpad as smooth as possible.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Matthew&amp;rsquo;s written a &lt;a href=&#34;http://blog.launchpad.net/bug-tracking/launchpads-bug-import-format&#34;&gt;blog post about our bug import format&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Links to external bug trackers right where you need them</title>
      <link>https://blog.launchpad.net/cool-new-stuff/links-to-external-bug-trackers-right-where-you-need-them/</link>
      <pubDate>Thu, 26 Feb 2009 00:25:12 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=534</guid>
      <description>&lt;p&gt;Linking Launchpad bugs to upstream bugs can be hard work. You don&amp;rsquo;t necessarily know whether the bug is reported on the upstream tracker, and if you don&amp;rsquo;t know where the upstream project tracks its bugs you have to go and find out before you can file the bug and link the Launchpad bug to it.&lt;/p&gt;
&lt;p&gt;We understand that this process can be a bit of a pain, so we&amp;rsquo;re introducing a feature that should make linking to upstream bugs a bit easier: Launchpad will now give you direct links to the bug search and filing forms in a project&amp;rsquo;s external tracker, so long as Launchpad knows the location of the project&amp;rsquo;s tracker and, if the tracker tracks more than one project, which project on the external tracker the Launchpad project refers to (so, for example, Launchpad needs to know that the Launchpad project &amp;rsquo;evolution&amp;rsquo; links to the &amp;lsquo;Evolution&amp;rsquo; product in the Gnome Bugzilla).&lt;/p&gt;
&lt;p&gt;And because we know that a project maintainer shouldn&amp;rsquo;t have to go back to Launchpad and add the link to the remote project when Launchpad should be able to work it out for itself we&amp;rsquo;ve fixed that problem, too: Launchpad will check all the projects that are linked to a remote bug tracker and will try to deduce which remote project they&amp;rsquo;re linked to by looking at the bug watches that are registered against that bug tracker. Of course, this isn&amp;rsquo;t an exact science, and we&amp;rsquo;ll have to correct some of these auto-generated links manually, but hopefully it won&amp;rsquo;t take more than a few days for us to straighten out the kinks.&lt;/p&gt;
&lt;p&gt;In order to get to remote bug tracker links, all you have to do is click &lt;em&gt;Also affects project&lt;/em&gt; on the bug report and select the project that you want to link to. Launchpad will then offer you the links.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re going to be working to improve this further in the coming Launchpad development cycle, so keep your eyes on this blog for further information.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Announcing the Launchpad bug plugin API spec</title>
      <link>https://blog.launchpad.net/cool-new-stuff/announcing-the-launchpad-plugin-api-spec/</link>
      <pubDate>Thu, 04 Dec 2008 16:12:08 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=306</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://blog.launchpad.net/cool-new-stuff/bugzilla-and-trac-plugins-now-in-beta&#34;&gt;A while ago&lt;/a&gt; we announced the beta versions of the Launchpad plugins for Trac and Bugzilla. These allow Launchpad to sync not just bug statuses but also comments and, eventually, whole bug reports with the remote bug trackers that have them installed, bi-directionally. The practical upshot of this is that upstream projects that don&amp;rsquo;t use Launchpad for bug tracking can install one of these plugins and never again have to worry about not seeing bugs that people file using Launchpad but don&amp;rsquo;t forward upstream.&lt;/p&gt;
&lt;p&gt;We in the Launchpad team realise, of course, that Bugzilla and Trac aren&amp;rsquo;t the only two bug trackers in the world. A project that uses &lt;a href=&#34;http://mantis-bt.org&#34;&gt;Mantis&lt;/a&gt;, for example, may want its bug tracker to interact with Launchpad in the same way that Bugzilla and Trac now can. Unfortunately we can&amp;rsquo;t develop a plugin for every bug tracker out there as we don&amp;rsquo;t have the resources or the in-depth knowledge of those trackers&amp;rsquo; internals necessary to be able to do so.&lt;/p&gt;
&lt;p&gt;To make it possible for anyone to develop a plugin for any bug tracker, we&amp;rsquo;ve now opened up our &lt;a href=&#34;https://help.launchpad.net/Bugs/PluginAPISpec&#34;&gt;Plugin API spec&lt;/a&gt;. The spec details all the APIs that need to be implemented for Launchpad to be able to sync bi-directionally with a remote bug tracker. It&amp;rsquo;s pretty detailed, and we&amp;rsquo;ve rolled into it our experiences in developing the Bugzilla and Trac plugins so as to make sure that new plugins don&amp;rsquo;t repeat the issues that we came across when we started interacting with the first bug trackers to install those plugins.&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve written an API plugin for your bug tracker of choice you can contact us by &lt;a href=&#34;http://answers.launchpad.net/malone&#34;&gt;filing a question&lt;/a&gt; against Launchpad Bugs to let us know about it. We&amp;rsquo;ll then work to write the code on the Launchpad side that will interact with the API you&amp;rsquo;ve written. Once that&amp;rsquo;s done we&amp;rsquo;ll continue to work with you to iron out any bugs that we may come across.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m looking forward to seeing your plugins!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Bugzilla and Trac plugins now in beta</title>
      <link>https://blog.launchpad.net/cool-new-stuff/bugzilla-and-trac-plugins-now-in-beta/</link>
      <pubDate>Wed, 20 Aug 2008 23:59:00 +0000</pubDate>
      <dc:creator>Graham Binns</dc:creator>
      <guid isPermaLink="false">https://blog.launchpad.net/?p=115</guid>
      <description>&lt;p&gt;A few weeks ago, Matt &lt;a href=&#34;http://news.launchpad.net/cool-new-stuff/bugzilla-and-trac-plugins&#34;&gt;announced&lt;/a&gt; the new Launchpad plugins for &lt;a href=&#34;http://launchpad.net/bugzilla-launchpad&#34;&gt;Bugzilla&lt;/a&gt; and &lt;a href=&#34;http://launchpad.net/trac-launchpad&#34;&gt;Trac&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The plugins allow bidirectional communication between Launchpad and the remote bug trackers that have them installed. Obviously, we need to test the plugins - and that&amp;rsquo;s where we need your help.&lt;/p&gt;
&lt;p&gt;If you know of any Trac or Bugzilla instances whose administrators might be interested in installing the requisite Launchpad plugin - or indeed if you run such a bug tracker yourself - you can find details on how to install the plugins and what you need to do to get Launchpad to work with your bugtracker on the Launchpad Help wiki:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For Bugzilla, see &lt;a href=&#34;http://help.launchpad.net/Bugs/BugzillaPlugin&#34;&gt;http://help.launchpad.net/Bugs/BugzillaPlugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;For Trac, see &lt;a href=&#34;http://help.launchpad.net/Bugs/TracPlugin&#34;&gt;http://help.launchpad.net/Bugs/TracPlugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, what will installing the plugins do? Well, initially, installing one of the plugins will mean that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Launchpad will be able to import comments from upstream bugs which are being watched in Launchpad. If you register a bug watch against an upstream bug you&amp;rsquo;ll be able to read the conversation about that bug on Launchpad, including the comments that are made on the upstream bug tracker.&lt;/li&gt;
&lt;li&gt;Launchpad will be able to push comments to upstream bugs which are linked to a Launchpad bug, so if you add a comment on Launchpad in reply to a comment which was imported from an upstream bug tracker, the comment will automatically be added to the conversation on the upstream bug tracker, too. This means that users of both Launchpad and the upstream tracker can view the whole conversation about the bug without leaving their preferred environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once we&amp;rsquo;re happy that the plugins are working correctly we can use them to add some even cooler functionality to Launchpad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Launchpad will be able to forward bugs to upstream bug trackers that have the plugin installed. Users of those bug trackers won&amp;rsquo;t have to check Launchpad for bugs registered against their project; they&amp;rsquo;ll be forwarded straight to the upstream tracker.&lt;/li&gt;
&lt;li&gt;If a bug watch is created against an upstream bug, Launchpad will tell the upstream bug tracker which Launchpad bug is watching it. This means that not only is there a link in Launchpad to the upstream bug, but there&amp;rsquo;s also a link in the upstream bug tracker to the Launchpad bug.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Bugzilla plugin is licensed under the Mozilla Public License and the Trac plugin is licensed under GPLv2.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve got any questions, don&amp;rsquo;t hesitate to contact us by email at feedback@launchpad.net.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
