<?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>jonobacon@home &#187; Desktop</title>
	<atom:link href="http://www.jonobacon.org/category/desktop/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jonobacon.org</link>
	<description>At home with Jono Bacon, Community Manager and Author</description>
	<lastBuildDate>Tue, 16 Mar 2010 22:20:20 +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>Download Files Async With Gio And Python</title>
		<link>http://www.jonobacon.org/2010/03/15/download-files-async-with-gio-and-python/</link>
		<comments>http://www.jonobacon.org/2010/03/15/download-files-async-with-gio-and-python/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 19:37:40 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Opportunistic Developers]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2527</guid>
		<description><![CDATA[Recently I asked for some help on how to download a file without blocking the GUI. Thanks to everyone who contributed their expertise in the post comments: I now have my program working great.

I wanted to now share my conclusions so that others can benefit from them too. To do this I am going to [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="R" class="cap"><span>R</span></span>ecently I <a href="http://www.jonobacon.org/2010/03/15/downloading-large-files-async-with-gio/">asked for some help on how to download a file without blocking the GUI</a>. Thanks to everyone who contributed their expertise in the post comments: I now have my program working great.</p>

<p>I wanted to now share my conclusions so that others can benefit from them too. To do this I am going to first explain how this works, and secondly I have created a Python Snippet and added it to the <a href="https://wiki.ubuntu.com/PythonSnippets">Python Snippets library</a> so there is a great working example you folks can play with. You can use Acire to load the snippet and play with it. This is the first <code>gio</code> snippet, and I hope there will be many more. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p>The goal I set out with was to download a file without freezing the GUI. This was somewhat inspired from <a href="http://shotofjaq.org/2010/03/going-async/">a recent Shot Of Jaq</a> shot that we did on async programming, and I used this app as a good example to play with. Typically I had downloaded files the manual way and this had blocked my GUI hard, but I was aware that this is exactly what <code>gio</code>, part of the GNOME platform is here to solve.</p>

<p>The way async basically works is that you kick off an operation and then you wait for confirmation of the result before you proceed. It is the opposite of procedural programming: you don&#8217;t kick off an operation and in the next line process it. When you do things the async way, you start an operation and then tell it what callback should be called when it is complete. It feels very event-driven: kind of how you connect a handler to a signal in a widget so that when that signal is generated, the handler is called.</p>

<p>When I started playing with this the docs insinuated that <code>read_async()</code> and <code>read_finish()</code> were what I needed to use. I started off with code that looked a little like this:</p>

<pre><code>def download_latest_shot(self):
    audiourl = "http://....the url to the Ogg file...."

    self.shot_stream = gio.File(audiourl)
    self.shot_stream.read_async(self.download_latest_shot_complete)
</code></pre>

<p>It then calls this callback:</p>

<pre><code>def download_latest_shot_complete(self, gdaemonfile, result):
    f = self.shot_stream.read_finish(result).read()

    outputfile = open("/home/jono/Desktop/shot.ogg","w")
    outputfile.writelines(f)
</code></pre>

<p>After some helpful notes from the GNOME community, it turned out that what I really needed to use was <code>load_contents_async()</code> to download the full content of the file (<code>read_async()</code> merely kicks off a read operation) and <code>load_contents_finish()</code> as the callback that is called when it is complete. This worked great for me.</p>

<p>As such, here is the snippet which I have added to the <a href="https://wiki.ubuntu.com/PythonSnippets">Python Snippets library</a> which downloads the Ubuntu HTML index page, shows it in a GUI without blocking it and writes it to the disk:</p>

<pre><code>#!/usr/bin/env python
#
# [SNIPPET_NAME: Download a file asynchronously]
# [SNIPPET_CATEGORIES: GIO]
# [SNIPPET_DESCRIPTION: Download a file async (useful for not blocking the GUI)]
# [SNIPPET_AUTHOR: Jono Bacon &lt;jono@ubuntu.com&gt;]
# [SNIPPET_LICENSE: GPL]

import gio, gtk, os

# Downloading a file in an async way is a great way of not blocking a GUI. This snippet will show a simple GUI and
# download the main HTML file from ubuntu.com without blocking the GUI. You will see the dialog appear with no content
# and when the content has downloaded, the GUI will be refreshed. This snippet also writes the content to the home
# directory as pythonsnippetexample-ubuntuwebsite.html.

# To download in an async way you kick off the download and when it is complete, another callback is called to process
# it (namely, display it in the window and write it to the disk). This separation means you can download large files and
# not block the GUI if needed. 

class Example(object):
    def download_file(self, data, url):
        """Download the file using gio"""

        # create a gio stream and download the URL passed to the method
        self.stream = gio.File(url)

        # there are two methods of downloading content: load_contents_async and read_async. Here we use load_contents_async as it
        # downloads the full contents of the file, which is what we want. We pass it a method to be called when the download has
        # complete: in this case, self.download_file_complete
        self.stream.load_contents_async(self.download_file_complete)

    def download_file_complete(self, gdaemonfile, result):
        """Method called after the file has downloaded"""

        # the result from the download is actually a tuple with three elements. The first element is the actual content
        # so let's grab that
        content = self.stream.load_contents_finish(result)[0]

        # update the label with the content
        label.set_text(content)

        # let's now save the content to the user's home directory
        outputfile = open(os.path.expanduser('~') + "/pythonsnippetexample-ubuntuwebsite.html","w")
        outputfile.write(content)

ex = Example()

dial = gtk.Dialog()
label = gtk.Label()
dial.action_area.pack_start(label)
label.show_all()
label.connect('realize', ex.download_file, "http://www.ubuntu.com")
dial.run()
</code></pre>

<p>I am still pretty new to this, and I am sure there is plenty that can be improved in the snippet, so feel free <a href="https://wiki.ubuntu.com/PythonSnippets">submit a merge request</a> if you would like to improve it. Hope this helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/03/15/download-files-async-with-gio-and-python/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Downloading Large Files Async With GIO</title>
		<link>http://www.jonobacon.org/2010/03/15/downloading-large-files-async-with-gio/</link>
		<comments>http://www.jonobacon.org/2010/03/15/downloading-large-files-async-with-gio/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 06:19:06 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Desktop]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2519</guid>
		<description><![CDATA[Slightly technical question for my friends on Planet GNOME. I have been hunting around for some help online with no luck, so I figured I would post here and hopefully this blog entry can be a solution for those who have similar questions.

I am in the process of porting App Of Jaq to to async. [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="S" class="cap"><span>S</span></span>lightly technical question for my friends on <a href="http://planet.gnome.org">Planet GNOME</a>. I have been hunting around for some help online with no luck, so I figured I would post here and hopefully this blog entry can be a solution for those who have similar questions.</p>

<p>I am in the process of porting <em>App Of Jaq</em> to to async. To do this I am using <code>gio</code> and have the code that downloads XML feeds up and running pretty well, and the app feels much more responsive. Now I need to have the application download an Ogg asynchronously without freezing the GUI.</p>

<p>My code currently looks like this:</p>

<pre><code>def download_latest_shot(self):
    audiourl = "http://....the url to the Ogg file...."

    self.shot_stream = gio.File(audiourl)
    self.shot_stream.read_async(self.download_latest_shot_complete)
</code></pre>

<p>It then calls this callback:</p>

<pre><code>def download_latest_shot_complete(self, gdaemonfile, result):
    f = self.shot_stream.read_finish(result).read()

    outputfile = open("/home/jono/Desktop/shot.ogg","w")
    outputfile.writelines(f)
</code></pre>

<p>Now, I am still pretty new to this, and while this code does work, it freezes the GUI pretty hard. Can anyone recommend some next steps for how I can download the file without it freezing? Some example code would be great. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p>Thanks in advance for anyone who can help. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/03/15/downloading-large-files-async-with-gio/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Ubuntu Opportunistic Developer Week and Python Snippets Day</title>
		<link>http://www.jonobacon.org/2010/03/04/ubuntu-opportunistic-developer-week-and-python-snippets-day/</link>
		<comments>http://www.jonobacon.org/2010/03/04/ubuntu-opportunistic-developer-week-and-python-snippets-day/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 17:07:34 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Opportunistic Developers]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2483</guid>
		<description><![CDATA[Ubuntu Opportunistic Developer Week day 4 kicks off and we have some incredible events today:


5pm UTC &#8211; Hot rodding your app for translations support &#8211; David Planella
6pm UTC &#8211; Learning through examples with Acire and Python-Snippets &#8211; Jono Bacon
7pm UTC &#8211; Write Beautiful Code (and Maintain it Beautifully) &#8211; rockstar
8pm UTC &#8211; Speed your development [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><a href="https://wiki.ubuntu.com/UbuntuOpportunisticDeveloperWeek"><span title="U" class="cap"><span>U</span></span>buntu Opportunistic Developer Week</a> day 4 kicks off and we have some incredible events today:</p>

<ul>
<li><strong>5pm UTC</strong> &#8211; Hot rodding your app for translations support &#8211; David Planella</li>
<li><strong>6pm UTC</strong> &#8211; Learning through examples with Acire and Python-Snippets &#8211; Jono Bacon</li>
<li><strong>7pm UTC</strong> &#8211; Write Beautiful Code (and Maintain it Beautifully) &#8211; rockstar</li>
<li><strong>8pm UTC</strong> &#8211; Speed your development with quickly.widgets &#8211; Rick Spencer</li>
<li><strong>9pm UTC onwards</strong> &#8211; Snippets Party &#8211; Join us in <code>#ubuntu-app-devel</code> and create Python snippets to share with other people &#8211; see <a href="https://wiki.ubuntu.com/PythonSnippets">this page</a> for details of how to get involved!</li>
</ul>

<p>It is recommended that you enjoy the week in <a href="http://wiki.ubuntu.com/Lernid">Lernid</a>. You can find out more details of how to install Lernid <a href="http://wiki.ubuntu.com/Lernid">right here</a>. Don&#8217;t want to use Lernid? No worries, just pop over to <code>#ubuntu-classroom</code> and <code>#ubuntu-classroom-chat</code> to join in the fun. Don&#8217;t forget that <code>#ubuntu-app-devel</code> is the place to ask questions about general development on Ubuntu. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<h2>Join the snippets party!</h2>

<p>Today is a special day this week: in addition to providing some great content to help people get started writing apps on Ubuntu, we are also keen to continue growing our <a href="https://wiki.ubuntu.com/PythonSnippets">wonderful library of python-snippets</a> which is viewed with a program I wrote called <em>Acire</em>. This library of snippets provides a range of examples that you can run, play with, modify and merge into your programs. So many of us learn by doing, and the more snippets we have the easier it is the learn from a diverse range of topics!</p>

<p>We have two events today I am keen to encourage you to join. First I will be delivering a session on the python snippets project:</p>

<ul>
<li><strong>6pm UTC</strong> &#8211; Learning through examples with Acire and Python-Snippets &#8211; Jono Bacon</li>
</ul>

<p>In the session I will explain how the project came about, it&#8217;s current progress and where we are going. We will then have a fun snippets party a little later:</p>

<ul>
<li><strong>9pm UTC onwards</strong> &#8211; Snippets Party &#8211; Join us in <code>#ubuntu-app-devel</code> and create Python snippets to share with other people &#8211; see <a href="https://wiki.ubuntu.com/PythonSnippets">this page</a> for details of how to get involved!</li>
</ul>

<p>The snippets party is simple: just join <code>#ubuntu-app-devel</code> on freenode and join us to write a bunch of snippets and contribute them to python-snippets. Today we have 104 snippets already in the library: I would love to see us get that to over 150 today. Come and join us!</p>

<p><strong><a href="https://wiki.ubuntu.com/PythonSnippets">Contributing snippets is simple: just click here to find out more!</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/03/04/ubuntu-opportunistic-developer-week-and-python-snippets-day/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Refreshing The Ubuntu Brand</title>
		<link>http://www.jonobacon.org/2010/03/03/refreshing-the-ubuntu-brand/</link>
		<comments>http://www.jonobacon.org/2010/03/03/refreshing-the-ubuntu-brand/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 19:35:44 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2470</guid>
		<description><![CDATA[

The new style of Ubuntu is driven by the theme &#8220;Light&#8221;. We&#8217;ve developed a comprehensive set of visual guidelines and treatments that reflect that style, and are updating key assets like the logo accordingly. The new theme takes effect in 10.04 LTS and will define our look and feel for several years.

Ubuntu has seen a [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><img src="http://farm5.static.flickr.com/4020/4405062968_93c20bf7b4_o.jpg"></p>

<p><span title="T" class="cap"><span>T</span></span>he new style of Ubuntu is driven by the theme &#8220;Light&#8221;. We&#8217;ve developed a comprehensive set of visual guidelines and treatments that reflect that style, and are updating key assets like the logo accordingly. The new theme takes effect in 10.04 LTS and will define our look and feel for several years.</p>

<p>Ubuntu has seen a tremendous amount of growth and change since it was conceived in 2004. Back then it was a small project with strong ambitions and a handful of developers passionate about delivering a world class Linux Operating System that can compete on every level with Microsoft and Apple. We adopted a style based on the tagline &#8220;Linux for Human Beings&#8221;, and called it &#8220;Human&#8221;. Six years on we have made incredible progress. Ubuntu is a global phenomenon: we have carved out a pervasive culture of quality and  design, thoughtful usability and great technology all fused together in a project that maintains the same commitment to community and collaborative development that we embraced back in 2004.</p>

<p>In 2009, a small team lead by Mark Shuttleworth, conducted a review of our key brand values and identity. Based on that work, a set of visual treatments were produced, and shared with key members of the Ubuntu Art community, spanning the core distributions, derivatives, and aligned efforts like the Forums. Representatives from Ubuntu, Kubuntu, Edubuntu, Xubuntu, Mythbuntu, SpreadUbuntu and more came to London and worked with the Canonical design team to refine the designs and work together. The results of that work are presented <a href="https://wiki.ubuntu.com/Brand">here</a>.</p>

<p>This collection of community representatives worked with the design team and created some great work. Some examples:</p>

<p><img src="http://farm5.static.flickr.com/4057/4405075686_9ef90eab7f_o.jpg">
<br /><br /><br />
<img src="http://farm3.static.flickr.com/2700/4405072540_92f92b4d7e_o.png">
<br />
<img src="http://farm3.static.flickr.com/2743/4404309805_8a68ef1201_o.png"></p>

<p>In addition to this we also worked with our key governance boards: the Community Council, Technical Board, Forums Council, LoCo Council and others around this work to ensure that our community can use it to it&#8217;s best advantage.</p>

<h2>Brand Values</h2>

<p>The key values we believe are reflected in the Ubuntu project are:</p>

<ul>
<li><p><strong>Precision</strong>. We ship high quality software, and we ship it exactly on schedule. Our Debian heritage means that the individual components of our platform are tightly defined and neatly arranged. There is no excess, no fat, and no waste in Ubuntu. We are a community that thrives on delivery.</p></li>
<li><p><strong>Reliability</strong>. We are building Ubuntu for serious use. Whether it is being deployed on the desktop or in the cloud, we care that Ubuntu is secure, reliable and predictable. We deliver updates to Ubuntu that are rigorously tested. When we make a mistake, we learn from it and put in place good processes to ensure that it does not happen again.</p></li>
<li><p><strong>Collaboration</strong>. Ubuntu is the result of collaborative work between thousands of people, and it is both the beneficiary and the public face of the collaborative work of <em>tens</em> of thousands of free software developers who build individual upstream components, or aggregate them in Debian. We go to great lengths to ensure that anybody, anywhere, who is passionate about Ubuntu and competent to participate, can do so. We enable virtual participation in our physical Ubuntu Developer Summits, we use mailing lists and IRC in preference to over-the-cubicle-wall communications, and we welcome contributions from both companies and individuals. Our governance bodies reflect the diversity of that participation, and leadership or permissions are based on proven merit, not corporate employment.</p></li>
<li><p><strong>Freedom</strong>. We strive to deliver the very best free software platform. Our highest mission is to accelerate the adoption and spread of free software, to make it the de facto standard way that people build and consume software. We celebrate the work of other groups committed to collaborative content development, and open content licensing. While we are pragmatic about this (we ship proprietary drivers when we believe they are a requirement to get free software working well on PC&#8217;s) we expressly do not include any proprietary applications in the default installation of Ubuntu. We want people to love and appreciate free software, and even though we work to make sure that Ubuntu is compatible with, certified with and iteroperable with popular proprietary software, we do so to facilitate the adoption of free alternatives to proprietary solutions.</p></li>
</ul>

<p>While the branding has changed, the freedoms and rights have not: our global community will still maintain access to the resources needed to construct logos that use the branding. We will be providing the new font, images, colour specs, and a set of recommendations for creating branding for websites, t-shirts and the other needs of our community. As before we will protect the integrity of the Ubuntu brand with the <a href="http://www.ubuntu.com/aboutus/trademarkpolicy">Ubuntu Trademark Policy</a>.</p>

<h2>Light: Ubuntu is Lightware</h2>

<p><img src="http://farm5.static.flickr.com/4042/4405063646_f13782d542_o.png" width="600"></p>

<p><img src="http://farm5.static.flickr.com/4020/4405063702_907b40fcc4_o.png" width="600"></p>

<p>The new style in Ubuntu is inspired by the idea of &#8220;Light&#8221;.</p>

<p>We&#8217;re drawn to Light because it denotes both warmth and clarity, and intrigued by the idea that &#8220;light&#8221; is a good value in software. Good software is &#8220;light&#8221; in the sense that it uses your resources efficiently, runs quickly, and can easily be reshaped as needed. Ubuntu represents a break with the bloatware of proprietary operating systems and an opportunity to delight to those who use computers for work and play. More and more of our communications are powered by light, and in future, our processing power will depend on our ability to work with light, too.</p>

<p>Visually, light is beautiful, light is ethereal, light brings clarity and comfort.</p>

<p><em>Historical perspective: From 2004-2010, the theme in Ubuntu was &#8220;Human&#8221;. Our tagline was &#8220;Linux for Human Beings&#8221; and we used a palette reflective of the full range of humanity. Our focus as a project was bringing Linux from the data center into the lives of our friends and global family</em>.</p>

<p><strong><a href="https://wiki.ubuntu.com/Brand">Go and see the full details of the brand refresh here, with more images</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/03/03/refreshing-the-ubuntu-brand/feed/</wfw:commentRss>
		<slash:comments>372</slash:comments>
		</item>
		<item>
		<title>Ubuntu Opportunistic Developer Week Day 3 Kicks Off In An hour</title>
		<link>http://www.jonobacon.org/2010/03/03/ubuntu-opportunistic-developer-week-day-3-kicks-off-in-an-hour/</link>
		<comments>http://www.jonobacon.org/2010/03/03/ubuntu-opportunistic-developer-week-day-3-kicks-off-in-an-hour/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 15:00:24 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Opportunistic Developers]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2454</guid>
		<description><![CDATA[Just a quick note to let you all know that Ubuntu Opportunistic Developer Week day 3 kicks off in an hour!

Here is the order of events for today:


5pm UTC &#8211; Creating stunning interfaces with Cairo &#8211; Laszlo Pandy
6pm UTC &#8211; What&#8217;s new in Quickly 0.4 &#8211; Didier Roche
7pm UTC &#8211; Create games with PyGame &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="J" class="cap"><span>J</span></span>ust a quick note to let you all know that <a href="https://wiki.ubuntu.com/UbuntuOpportunisticDeveloperWeek">Ubuntu Opportunistic Developer Week</a> day 3 kicks off in an hour!</p>

<p>Here is the order of events for today:</p>

<ul>
<li><strong>5pm UTC</strong> &#8211; Creating stunning interfaces with Cairo &#8211; Laszlo Pandy</li>
<li><strong>6pm UTC</strong> &#8211; What&#8217;s new in Quickly 0.4 &#8211; Didier Roche</li>
<li><strong>7pm UTC</strong> &#8211; Create games with PyGame &#8211; Rick Spencer</li>
<li><strong>8pm UTC</strong> &#8211; SHOWCASE: Photobomb &#8211; Rick Spencer</li>
<li><strong>9pm UTC onwards</strong> &#8211; Hacking party in <code>#ubuntu-app-devel</code> on freenode! Come and join us, work on your apps, ask questions and have fun in our community. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>

<p>It is recommended that you enjoy the week in <a href="http://wiki.ubuntu.com/Lernid">Lernid</a>. You can find out more details of how to install Lernid <a href="http://wiki.ubuntu.com/Lernid">right here</a>. Don&#8217;t want to use Lernid? No worries, just pop over to <code>#ubuntu-classroom</code> and <code>#ubuntu-classroom-chat</code> to join in the fun. Don&#8217;t forget that <code>#ubuntu-app-devel</code> is the place to ask questions about general development on Ubuntu. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/03/03/ubuntu-opportunistic-developer-week-day-3-kicks-off-in-an-hour/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ubuntu Opportunistic Developer Week Day 2 Kicks Off In An Hour</title>
		<link>http://www.jonobacon.org/2010/03/02/ubuntu-opportunistic-developer-week-day-2-kicks-off-in-an-hour/</link>
		<comments>http://www.jonobacon.org/2010/03/02/ubuntu-opportunistic-developer-week-day-2-kicks-off-in-an-hour/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 14:00:10 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Opportunistic Developers]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2451</guid>
		<description><![CDATA[Just a quick note to let you all know that Ubuntu Opportunistic Developer Week day 2 kicks off in an hour!

Here is the order of events for today:


4pm UTC &#8211; Gooey Graphics with GooCanvas &#8211; Rick Spencer
5pm UTC &#8211; Writing a Rhythmbox plug-in &#8211; Stuart Langridge
6pm UTC &#8211; Microblog from your app with the Gwibber [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="J" class="cap"><span>J</span></span>ust a quick note to let you all know that <a href="https://wiki.ubuntu.com/UbuntuOpportunisticDeveloperWeek">Ubuntu Opportunistic Developer Week</a> day 2 kicks off in an hour!</p>

<p>Here is the order of events for today:</p>

<ul>
<li><strong>4pm UTC</strong> &#8211; Gooey Graphics with GooCanvas &#8211; Rick Spencer</li>
<li><strong>5pm UTC</strong> &#8211; Writing a Rhythmbox plug-in &#8211; Stuart Langridge</li>
<li><strong>6pm UTC</strong> &#8211; Microblog from your app with the Gwibber API &#8211; Ken VanDine</li>
<li><strong>7pm UTC</strong> &#8211; SHOWCASE: Gwibber &#8211; Ken Vandine</li>
<li><strong>8pm UTC</strong> &#8211; Building multimedia into your app with GStreamer &#8211; Laszlo Pandy</li>
<li><strong>9pm UTC onwards</strong> &#8211; Hacking parts in <code>#ubuntu-app-devel</code> on freenode! Come and join us, work on your apps, ask questions and have fun in our community. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>

<p>It is recommended that you enjoy the week in <a href="http://wiki.ubuntu.com/Lernid">Lernid</a>. You can find out more details of how to install Lernid <a href="http://wiki.ubuntu.com/Lernid">right here</a>. Don&#8217;t want to use Lernid? No worries, just pop over to <code>#ubuntu-classroom</code> and <code>#ubuntu-classroom-chat</code> to join in the fun. Don&#8217;t forget that <code>#ubuntu-app-devel</code> is the place to ask questions about general development on Ubuntu. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/03/02/ubuntu-opportunistic-developer-week-day-2-kicks-off-in-an-hour/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Ubuntu Opportunistic Developer Week Kicks Off In An Hour</title>
		<link>http://www.jonobacon.org/2010/03/01/ubuntu-opportunistic-developer-week-kicks-off-in-an-hour/</link>
		<comments>http://www.jonobacon.org/2010/03/01/ubuntu-opportunistic-developer-week-kicks-off-in-an-hour/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 14:00:42 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Opportunistic Developers]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2449</guid>
		<description><![CDATA[Just a quick note to let you all know that Ubuntu Opportunistic Developer Week kicks off in an hour!

Here is the order of events for today:


4pm UTC &#8211; Welcome! Ubuntu For Opportunistic Developers &#8211; Jono Bacon
5pm UTC &#8211; CouchDB support in your app with DesktopCouch &#8211; Stuart Langridge
6pm UTC &#8211; Creating an application from scratch [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="J" class="cap"><span>J</span></span>ust a quick note to let you all know that <a href="https://wiki.ubuntu.com/UbuntuOpportunisticDeveloperWeek">Ubuntu Opportunistic Developer Week</a> kicks off in an hour!</p>

<p>Here is the order of events for today:</p>

<ul>
<li><strong>4pm UTC</strong> &#8211; Welcome! Ubuntu For Opportunistic Developers &#8211; Jono Bacon</li>
<li><strong>5pm UTC</strong> &#8211; CouchDB support in your app with DesktopCouch &#8211; Stuart Langridge</li>
<li><strong>6pm UTC</strong> &#8211; Creating an application from scratch with Quickly &#8211; Rick Spencer</li>
<li><strong>7pm UTC</strong> &#8211; Building in Application Indicator support &#8211; Sense Hofstede</li>
<li><strong>8pm UTC</strong> &#8211; Integrated development workflow with Ground Control &#8211; Martin Owens</li>
<li><strong>9pm UTC onwards</strong> &#8211; Hacking parts in <code>#ubuntu-app-devel</code> on freenode! Come and join us, work on your apps, ask questions and have fun in our community. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
</ul>

<p>It is recommended that you enjoy the week in <a href="http://wiki.ubuntu.com/Lernid">Lernid</a>. You can find out more details of how to install Lernid <a href="http://wiki.ubuntu.com/Lernid">right here</a>. Don&#8217;t want to use Lernid? No worries, just pop over to <code>#ubuntu-classroom</code> and <code>#ubuntu-classroom-chat</code> to join in the fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/03/01/ubuntu-opportunistic-developer-week-kicks-off-in-an-hour/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Ubuntu Opportunistic Developer Week This Week</title>
		<link>http://www.jonobacon.org/2010/03/01/ubuntu-opportunistic-developer-week-this-week/</link>
		<comments>http://www.jonobacon.org/2010/03/01/ubuntu-opportunistic-developer-week-this-week/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 08:48:05 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Opportunistic Developers]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2446</guid>
		<description><![CDATA[

Well, folks, this week Ubuntu Opportunistic Developer Week kicks off with a fantastic week jammed with great sessions helping to bridge the gap for opportunistic developers who want to write fun, useful applications using Ubuntu as a platform. We have a wonderful week of sessions ahead and as ever, it is recommended that you enjoy [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><img src="http://farm5.static.flickr.com/4070/4397952960_65dd095d6e_o.jpg" width="600"></p>

<p><span title="W" class="cap"><span>W</span></span>ell, folks, this week <a href="https://wiki.ubuntu.com/UbuntuOpportunisticDeveloperWeek">Ubuntu Opportunistic Developer Week</a> kicks off with a fantastic week jammed with great sessions helping to bridge the gap for opportunistic developers who want to write fun, useful applications using Ubuntu as a platform. We have a wonderful week of sessions ahead and as ever, it is recommended that you enjoy the week in <a href="http://wiki.ubuntu.com/Lernid">Lernid</a>. You can find out more details of how to install Lernid <a href="http://wiki.ubuntu.com/Lernid">right here</a>. Don&#8217;t want to use Lernid? No worries, just pop over to <code>#ubuntu-classroom</code> and <code>#ubuntu-classroom-chat</code> to join in the fun.</p>

<p>I will be kicking off the week at <strong>4pm UTC</strong> and talking through the goals for the week and talking through some of the work we are doing to help opportunistic developers enjoy Ubuntu as a platform and write some fun apps.</p>

<p>Friends, also don&#8217;t forget about the fun challenge I set last week:</p>

<blockquote>
  <p>Think of a fun program to write, and see how much you can get completed by the end of the week, Fri 5th March 2010. On Friday I will write a blog entry that showcases screenshots of your progress and (if possible) a PPA where people can download a package to try.</p>
</blockquote>

<p>When you have something you would like me to blog, send an email no later than the end of the day Pacific time on Thu 4th March 2010 to me at <code>jono AT ubuntu DOT com</code> and include:</p>

<ul>
<li>The name of your program and a brief description of what it does.</li>
<li>A link to a screenshot online that shows your new app running.</li>
<li>If available, tell me the name of the Launchpad project where it is hosted and the PPA with the package. This is a great way for people to try your program and possibly join the project and contribute to it!</li>
</ul>

<p>I will send a t-shirt out to the three app authors who made the most interesting apps with the most progress. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p>Start your engines folks, let&#8217;s see what we can do! I can&#8217;t wait to see how you folks get on! <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/03/01/ubuntu-opportunistic-developer-week-this-week/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Fun Little Acire Story</title>
		<link>http://www.jonobacon.org/2010/02/27/fun-little-acire-story/</link>
		<comments>http://www.jonobacon.org/2010/02/27/fun-little-acire-story/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 23:10:23 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Acire]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Opportunistic Developers]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2443</guid>
		<description><![CDATA[With the new release of Acire just out I wanted to tell you folks a fun little story of an added benefit to Acire that I never envisaged when I came up with the idea for the app.

Yesterday I got an email from someone (I will keep the identify private) saying:


  I&#8217;m trying to [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><span title="W" class="cap"><span>W</span></span>ith the <a href="http://www.jonobacon.org/2010/02/26/acire-0-3-released/">new release of Acire just out</a> I wanted to tell you folks a fun little story of an added benefit to Acire that I never envisaged when I came up with the idea for the app.</p>

<p>Yesterday I got an email from someone (I will keep the identify private) saying:</p>

<blockquote>
  <p>I&#8217;m trying to create an application but I can&#8217;t seem to find any way to embed a gnome-terminal into my app. I know you&#8217;re not offering support <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  but if you have some spare time is there any chance you can point me to the documentation for that?</p>
</blockquote>

<p>This happens a lot: someone wants to do something, so they ask for help over email or on another medium such as IRC. Unfortunately, I am usually pretty busy and typically don&#8217;t have the time to answer support questions. Before Acire existed I would have at most hunted out some links or possibly just the person to to go and ask on a particular forum or mailing list.</p>

<p>Now Acire exists, I just fired it up, selected <em>Python VTE</em> from the cateogries combo box, clicked on the snippet, and then cut and pasted the code into the email:</p>

<pre><code>#!/usr/bin/env python

# [SNIPPET_NAME: Embed a VTE terminal]
# [SNIPPET_CATEGORIES: Python VTE]
# [SNIPPET_DESCRIPTION: Embed a VTE terminal in your application]

try:
    import gtk
except:
    print &gt;&gt; sys.stderr, "You need to install the python gtk bindings"
    sys.exit(1)

# import vte
try:
    import vte
except:
    error = gtk.MessageDialog (None, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
        'You need to install python bindings for libvte')
    error.run()
    sys.exit (1)

if __name__ == '__main__':
    # create the terminal
    v = vte.Terminal()
    v.connect ("child-exited", lambda term: gtk.main_quit())

    # fork_command() will run a command, in this case it shows a prompt
    v.fork_command()

    # create a window and add the VTE
    window = gtk.Window()
    window.add(v)
    window.connect('delete-event', lambda window, event: gtk.main_quit())

    # you need to show the VTE
    window.show_all()

    # Finally, run the application
    gtk.main()
</code></pre>

<p>Job done. What made me smile about this was that Acire not only helps me, but it helped me help someone else too. Rocking. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/02/27/fun-little-acire-story/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Acire 0.3 Released</title>
		<link>http://www.jonobacon.org/2010/02/26/acire-0-3-released/</link>
		<comments>http://www.jonobacon.org/2010/02/26/acire-0-3-released/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 22:56:24 +0000</pubDate>
		<dc:creator>jono</dc:creator>
				<category><![CDATA[Acire]]></category>
		<category><![CDATA[Desktop]]></category>
		<category><![CDATA[Opportunistic Developers]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.jonobacon.org/?p=2440</guid>
		<description><![CDATA[

Everyone&#8217;s favorite tool to browse Python snippets, run them, learn from them and incorporate them into your programs has been released! This new release has the following new features:


Translated &#8211; Acire has now got support for multiple languages, but this is very new so it needs your translations! Want to help make Acire rocking in [...]]]></description>
			<content:encoded><![CDATA[<p class="first-child "><img src="http://farm3.static.flickr.com/2702/4390219487_3102e3e5af_o.jpg" width="600"></p>

<p><span title="E" class="cap"><span>E</span></span>veryone&#8217;s favorite tool to browse Python snippets, run them, learn from them and incorporate them into your programs has been released! This new release has the following new features:</p>

<ul>
<li><strong>Translated</strong> &#8211; Acire has now got support for multiple languages, but this is very new so it needs your translations! Want to help make Acire rocking in <em>your</em> language? Easy. <a href="https://translations.edge.launchpad.net/acire">Go and contribute here</a>!</li>
<li><strong>Edit Snippets</strong> &#8211; Acire now allows you to edit the code inside a snippet and execute it within Acire itself. </li>
<li><strong>Save Snippets</strong> &#8211; You can now save the snippets, even if they have been edited, into a specific file on your system. </li>
<li><strong>Look and Feel Polish</strong> &#8211; a little bit of spit and shine has been applied to respect your chosen monospace font, use a scalable icon for docky and a few other little changes.</li>
</ul>

<p>As I have mentioned before, I the snippets that <em>Acire</em> shows and the Acire itself are in two separate packages (this means that others can write viewers to view the snippets on other environments).</p>

<p>Installing <em>Acire</em> and it&#8217;s snippets is simple. First install the daily snippets PPA (this will deliver new snippets to your system on a daily bases):</p>

<pre><code>sudo add-apt-repository ppa:python-snippets-drivers/python-snippets-daily
sudo apt-get update
sudo apt-get install python-snippets
</code></pre>

<p>Now install the <em>Acire</em> PPA:</p>

<pre><code>sudo add-apt-repository ppa:acire-team/acire-releases
sudo apt-get update
sudo apt-get install acire
</code></pre>

<p>Right now packages are available for Ubuntu 10.04 Lucid Lynx and Ubuntu 9.10 Karmic Koala packages should be available soon.</p>

<h2>We need your snippets!</h2>

<p>The fuel that makes <em>Acire</em> rock is the library of snippets. To really get the most out of Acire and it&#8217;s library of snippets, we need you to contribute snippets that demonstrate something in Python. These snippets are really helpful in showing us all how a given Python modules works, and really helpful in lowering the bar to development. Here is how you can contribute a snippet!</p>

<h3>Step 1: Grab the library</h3>

<p>Just run:</p>

<pre><code>bzr branch lp:python-snippets
</code></pre>

<h3>Step 2: Create your snippet</h3>

<p>A snippet should demonstrate a specific feature in a given module or in the Python language. This could include showing how to use a specific widget, a feature of that widget, or another function.</p>

<p>python-snippets is divided into sub-directories which outlines the theme of the snippets. You should pick the most appropriate directory to put your snippet it, and add it there. If a suitable directory does not exist already, create it and add it there.</p>

<h3>Step 3: Add metadata</h3>

<p>The way Acire pulls out the snippets is by detecting some specific metadata additions to comments at the top of the file You should now add the following meta data as comments to the top of the file:</p>

<pre><code># [SNIPPET_NAME: A Short Name For The Snippet]
# [SNIPPET_CATEGORIES: Category]  &lt;-- see CATEGORIES file for existing categories
# [SNIPPET_DESCRIPTION: A single line description of the snippet]
# [SNIPPET_AUTHOR: Your Name &lt;your@emailaddress.com&gt;]
# [SNIPPET_LICENSE: An Open Source license (from the LICENSES file)]
</code></pre>

<p>Here is an example:</p>

<pre><code># [SNIPPET_NAME: Playing a Pipeline]
# [SNIPPET_CATEGORIES: GStreamer]
# [SNIPPET_DESCRIPTION: Construct and play a pipeline]
# [SNIPPET_AUTHOR: Jono Bacon &lt;jono@ubuntu.com&gt;]
# [SNIPPET_LICENSE: GPL]
</code></pre>

<p>You now need to add your file to your branch with:</p>

<pre><code>bzr add your-snippet.py
</code></pre>

<h3>Step 4: Propose it for merging</h3>

<p>With your new snippet ready, it is time to propose it for inclusion in the main python-snippets library.</p>

<p>First, commit your changes to your local branch with:</p>

<pre><code>bzr commit
</code></pre>

<p>Now push it to your own branch on Launchpad:</p>

<pre><code>bzr push lp:~&lt;your launchpad username&gt;/python-snippets/&lt;name of your branch&gt;
</code></pre>

<p>As an example:</p>

<pre><code>bzr push lp:~jonobacon/python-snippets/gstreamer-snippets
</code></pre>

<p>Now go to https://code.launchpad.net/python-snippets and you should see your branch listed there. Click on it and when the branch page information page loads click on the Propose for merging link. Add a short description of what you examples do in the Initial Comment box and then click the Propose Merge button.</p>

<p>We will then review the merge and if it looks good, add it to python-snippets and it will be delivered to <em>Acire</em> users in the next daily package upload. <img src='http://www.jonobacon.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonobacon.org/2010/02/26/acire-0-3-released/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
	</channel>
</rss>
