<?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>The Plenitude of Arboreal Beauty</title>
	<atom:link href="http://davidsiegel.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://davidsiegel.org</link>
	<description>David Siegel</description>
	<lastBuildDate>Tue, 02 Mar 2010 11:08:53 +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>Only 25 Paper Cuts Left for Lucid!</title>
		<link>http://davidsiegel.org/only-25-paper-cuts-left-for-lucid/</link>
		<comments>http://davidsiegel.org/only-25-paper-cuts-left-for-lucid/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 11:08:53 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Design and User Experience]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=693</guid>
		<description><![CDATA[That&#8217;s right, we&#8217;ve fixed 75 paper cuts for Lucid already! We only need to fix 25 more to reach 100, but with many important freezes occurring over the next couple weeks we need to prioritize and focus.

UI freeze comes this Thursday, March 4. This means that paper cuts involving user-facing changes (e.g. labels, menus, buttons) [...]]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s right, we&#8217;ve fixed 75 paper cuts for Lucid already! We only need to fix 25 more to reach 100, but with many important freezes occurring over the next couple weeks we need to prioritize and focus.</p>
<ul>
<li>UI freeze comes this Thursday, March 4. This means that paper cuts involving user-facing changes (e.g. labels, menus, buttons) need to land by Thursday.</li>
<li>We have more time left to fix paper cuts that affect more general behavior and are not associated with concrete interface changes.</li>
</ul>
<p><a href="http://is.gd/9w9wP" onclick="pageTracker._trackPageview('/outgoing/is.gd/9w9wP?referer=');">Here&#8217;s a list of fifty or so remaining paper cuts</a> that are good to work on subject to the conditions above.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/only-25-paper-cuts-left-for-lucid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>One Hundred Paper Cuts for Lucid, Round 10</title>
		<link>http://davidsiegel.org/100papercuts-lucid-round-10/</link>
		<comments>http://davidsiegel.org/100papercuts-lucid-round-10/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 17:07:54 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Design and User Experience]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=685</guid>
		<description><![CDATA[Time flies like an arrow! This week marks the final round of paper cuts for Ubuntu 10.04 LTS &#8220;Lucid Lynx.&#8221; We&#8217;ve done an outstanding job so far but we still have work ahead of us. Here are some paper cuts that need attention this round:

&#8220;Create Document&#8221; Templates difficult to use
Right-clicking on the Desktop and choosing [...]]]></description>
			<content:encoded><![CDATA[<p>Time flies like an arrow! This week marks the final round of paper cuts for Ubuntu 10.04 LTS &#8220;Lucid Lynx.&#8221; We&#8217;ve done an outstanding job so far but we still have work ahead of us. Here are some paper cuts that need attention this round:</p>
<dl>
<dt><a href="https://bugs.edge.launchpad.net/ubuntu/+source/nautilus/+bug/372132" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/nautilus/+bug/372132?referer=');">&#8220;Create Document&#8221; Templates difficult to use</a></dt>
<dd>Right-clicking on the Desktop and choosing &#8220;Create Document&#8221; still shows a menu with only &#8220;No templates installed&#8221; and &#8220;Empty File.&#8221; Let&#8217;s at least put some OpenOffice Document templates in there.</dd>
<dt><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/495127" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/495127?referer=');">Shutdown/restart dialogs make it unclear whether people should wait</a></dt>
<dd>Users often mistakenly believe they have to wait through the 60-second countdown on Shut Down and Restart dialogs.</dd>
<dt><a href="https://bugs.edge.launchpad.net/ubuntu/+source/gtk+2.0/+bug/8949" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/gtk+2.0/+bug/8949?referer=');">Opening a deleted &#8216;recent document&#8217; results in a new file.</a></dt>
<dd>Deleted files shouldn&#8217;t be displayed in the Recent Documents menu.</dd>
<dt><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/392589" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/392589?referer=');">Default setting for remembering password should be remember until logout</a></dt>
<dd><em>&#8220;When accessing a windows file share (or other network resource) that requires a password, the radiobutton defaults to &#8220;Forget password immediately&#8221;. While this is understandable for security reasons, it is a usability &#8220;paper cut&#8221; because one will typically be confronted with the same password prompt again in very short order (without even closing the nautilus window). Just yesterday this got a smirk out of a Windows user looking over my shoulder that I had to enter the password &#8220;again.&#8221; This has also been an annoyance for me for quite a few years.&#8221;</em></dd>
<dt><a href="https://bugs.edge.launchpad.net/ubuntu/+source/gvfs/+bug/453072" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/gvfs/+bug/453072?referer=');">Context menu for an USB pendrive shows &#8220;Unmount&#8221;, &#8220;Eject&#8221; and &#8220;Safely Remove Drive&#8221;</a></dt>
<dd>Which one do I choose?!</dd>
<dt><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/491451" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/491451?referer=');">OpenOffice menus still have icons which should be removed</a></dt>
<dd>&#8216;nough said.</dd>
<dt><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/503330" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/503330?referer=');">In the file operation dialog, the file count and the size count change in opposite direction.</a></dt>
<dd>File count decreases while copy size increases, causing users to go cross-eyed.</dd>
<dt><a href="https://bugs.edge.launchpad.net/ubuntu/+source/yelp/+bug/507788" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/yelp/+bug/507788?referer=');">In Help, Table of Contents switches from left to right when user selects topic</a></dt>
<dd>Eww.</dd>
<dt><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/411559" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/411559?referer=');">Unfriendly message upon typing incorrect password (Policykit-GNOME)</a></dt>
<dd>&#8220;<span style="text-decoration: blink; color: red; weight: heavy;">AUTHENTICATION FAILURE</span>&#8221; is a severe message to confront users with, especially users who sometimes make mistakes when typing into password fields. When a user makes a mistake while typing his password, we should be understanding, supportive, and encouraging rather than alarming, accusatory, or even perfunctory.</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/100papercuts-lucid-round-10/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Have you inspired millions of people lately?</title>
		<link>http://davidsiegel.org/lucid-wallpaper-contest/</link>
		<comments>http://davidsiegel.org/lucid-wallpaper-contest/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 14:28:57 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Design and User Experience]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=672</guid>
		<description><![CDATA[Ubuntu 10.04 LTS &#8220;Lucid Lynx&#8221; is just around the corner and Ubuntu users around the world are eager to be inspired by your awesome artwork and photos.  You know the drill&#8211;submit your photos to the Ubuntu Artwork Flickr pool and we&#8217;ll ship as many beautiful images as we can fit on the CD!

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ubuntu.com" onclick="pageTracker._trackPageview('/outgoing/www.ubuntu.com?referer=');">Ubuntu</a> 10.04 LTS &#8220;Lucid Lynx&#8221; is just around the corner and Ubuntu users around the world are eager to be inspired by your awesome artwork and photos.  You know the drill&#8211;submit your photos to the <a href="http://www.flickr.com/groups/ubuntu-artwork/pool/" onclick="pageTracker._trackPageview('/outgoing/www.flickr.com/groups/ubuntu-artwork/pool/?referer=');">Ubuntu Artwork Flickr pool</a> and we&#8217;ll ship as many beautiful images as we can fit on the CD!</p>
<p><object width="800" height="600"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fgroups%2Fubuntu-artwork%2Fpool%2Fshow%2F&#038;page_show_back_url=%2Fgroups%2Fubuntu-artwork%2Fpool%2F&#038;group_id=556923@N24&#038;jump_to=&#038;start_index="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fgroups%2Fubuntu-artwork%2Fpool%2Fshow%2F&#038;page_show_back_url=%2Fgroups%2Fubuntu-artwork%2Fpool%2F&#038;group_id=556923@N24&#038;jump_to=&#038;start_index=" width="800" height="600"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/lucid-wallpaper-contest/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lucid Paper Cuts Round 9 Progress Report</title>
		<link>http://davidsiegel.org/lucid-paper-cuts-round-9-progress-report/</link>
		<comments>http://davidsiegel.org/lucid-paper-cuts-round-9-progress-report/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 13:00:27 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Design and User Experience]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=662</guid>
		<description><![CDATA[One Hundred Paper Cuts for Lucid is going well. 56 paper cuts have been fixed so far. We have to fix at least 20 more paper cuts to match the number of paper cuts fixed in Karmic, a record you can help us surpass by working on closing the 26 paper cuts with bugs attached.
This [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption aligncenter" style="width: 510px"><a href="http://23.media.tumblr.com/tumblr_ksvttnB4Dp1qzs56do1_500.jpg" onclick="pageTracker._trackPageview('/outgoing/23.media.tumblr.com/tumblr_ksvttnB4Dp1qzs56do1_500.jpg?referer=');"><img alt="" src="http://23.media.tumblr.com/tumblr_ksvttnB4Dp1qzs56do1_500.jpg" title="" width="500" height="415" /></a><p class="wp-caption-text">Paper cuts are so irritating. (Adrian Ghenie, 'Pie Fight Study 2')</p></div>
<p><a href="https://edge.launchpad.net/hundredpapercuts/lucid" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/lucid?referer=');">One Hundred Paper Cuts for Lucid</a> is going well. <strong>56 paper cuts have been fixed so far.</strong> We have to fix at least 20 more paper cuts to match the number of paper cuts fixed in Karmic, a record <em>you</em> can help us surpass by working on closing the <a href="http://is.gd/7Y8V9" onclick="pageTracker._trackPageview('/outgoing/is.gd/7Y8V9?referer=');">26 paper cuts with bugs attached</a>.</p>
<p><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-9" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-9?referer=');">This week&#8217;s paper jam for Compiz settings</a> went well, thanks to the industrious work of Sebastian Bacher during the distro sprint in Portland. The <a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-7" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-7?referer=');">F-Spot paper jam</a> still has some unclaimed beauties, however.</p>
<p>Please get involved right away if there are any paper cuts that catch your eye. You could get your patch shipped in Lucid (and upstream too, haters!).</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/lucid-paper-cuts-round-9-progress-report/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Improved Window Management Shortcuts Land in Lucid</title>
		<link>http://davidsiegel.org/lucid-window-management-keyboard-shortcuts/</link>
		<comments>http://davidsiegel.org/lucid-window-management-keyboard-shortcuts/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 21:04:33 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Design and User Experience]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=652</guid>
		<description><![CDATA[Sebastian Bacher landed improved Compiz keyboard shortcucts in Lucid this week during the distro sprint in Portland, Oregon (which is by far the best sprint I&#8217;ve ever been to&#8211;everybody is rocking):

Super↓E↓↑↑ triggers Expo as usual.
Super↓W↓↑↑ scales all windows on your current workspace (hint: try typing in scale mode!).
Super↓A↓↑↑ scales all windows on all workspaces.
Super↓D↓↑↑ replaces [...]]]></description>
			<content:encoded><![CDATA[<p>Sebastian Bacher landed improved Compiz keyboard shortcucts in Lucid this week during the distro sprint in Portland, Oregon (which is by far the best sprint I&#8217;ve ever been to&#8211;everybody is rocking):</p>
<ul>
<li>Super↓E↓↑↑ triggers Expo as usual.</li>
<li>Super↓W↓↑↑ scales all windows on your current workspace (hint: try typing in scale mode!).</li>
<li>Super↓A↓↑↑ scales all windows on all workspaces.</li>
<li>Super↓D↓↑↑ replaces Control↓Alt↓D↓↑↑↑ for Show Desktop.</li>
</ul>
<p>Other Compiz changes have landed this week, including snappier window animations and other paper cut-sized fixes. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/lucid-window-management-keyboard-shortcuts/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Lucid Paper Jam Update!</title>
		<link>http://davidsiegel.org/lucidpaper-jam-update/</link>
		<comments>http://davidsiegel.org/lucidpaper-jam-update/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 21:38:40 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Design and User Experience]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=646</guid>
		<description><![CDATA[I thought I&#8217;d write a quick update on paper cut progress for Lucid. Last week was our &#8220;Sound &#038; Video&#8221; paper jam. The following paper cuts were fixed:

Totem: Must have a fullscreen button
&#8220;Razor&#8221; [is] an odd name for the split tool
Rhythmbox Notification Bubble shows wrong cover art
[Sound Recorder] Cancel button doesn&#8217;t use correct behaviour
[Sound Recorder] [...]]]></description>
			<content:encoded><![CDATA[<p>I thought I&#8217;d write a quick update on paper cut progress for Lucid. Last week was our <a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-6" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-6?referer=');">&#8220;Sound &#038; Video&#8221; paper jam</a>. The following paper cuts were fixed:</p>
<ul>
<li><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/440298" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/440298?referer=');">Totem: Must have a fullscreen button</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/pitivi/+bug/506642" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/pitivi/+bug/506642?referer=');">&#8220;Razor&#8221; [is] an odd name for the split tool</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/notify-osd/+bug/451086" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/notify-osd/+bug/451086?referer=');">Rhythmbox Notification Bubble shows wrong cover art</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/gnome-media/+bug/432395" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/gnome-media/+bug/432395?referer=');">[Sound Recorder] Cancel button doesn&#8217;t use correct behaviour</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/gnome-media/+bug/433207" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/gnome-media/+bug/433207?referer=');">[Sound Recorder] Save as button should be default focus</a></li>
</ul>
<p>These Sound &#038; Video paper cuts still need a kind soul to tend to them (I think the Rhythmbox paper cuts are especially enticing):</p>
<ul>
<li><a href="https://bugs.edge.launchpad.net/bugs/387467" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/bugs/387467?referer=');">obtuse error when ejecting a playing DVD</a></li>
<li><a href="https://bugs.edge.launchpad.net/bugs/71228" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/bugs/71228?referer=');">Rhythmbox has no apparent pause button</a></li>
<li><a href="https://bugs.edge.launchpad.net/bugs/185928" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/bugs/185928?referer=');">Pressing Space key should toggle play/pause (pause when playing; play when paused)</a></li>
<li><a href="https://bugs.edge.launchpad.net/bugs/420521" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/bugs/420521?referer=');">hide totem sidebar if there is only one file on the playlist</a></li>
<li><a href="https://bugs.edge.launchpad.net/bugs/500166" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/bugs/500166?referer=');">Totem&#8217;s &#8220;Also disable the screensaver when playing audio&#8221; is mysterious</a></li>
</ul>
<p><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-7" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-7?referer=');">This week&#8217;s paper jam</a> focuses on F-Spot. Here are five of the paper cuts identified so far:</p>
<ul>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/59881" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/59881?referer=');">F-Spot timeline slider can be dragged past the edge of the timeline</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/485099" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/485099?referer=');">F-Spot Photo Manager Edit buttons difficult to find</a></li>
<li><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/488784" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/488784?referer=');">&#8220;Import tags&#8221; category sounds like an action</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/511767" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/511767?referer=');">&#8220;Hash for Duplicates&#8221; is tech-speak</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/454972" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/454972?referer=');">F-Spot uses poorly formatted email subjects (when sending photos via Evolution)</a></li>
</ul>
<p>To check out the last few paper jams for yourself, click below:</p>
<ul>
<li><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-4" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-4?referer=');">Empathy Paper Jam</a></li>
<li><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-6" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-6?referer=');">Sound &#038; Video Paper Jam</a></li>
<li><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-7" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-7?referer=');">F-Spot Paper Jam</a></li>
</ul>
<p>There are only three more rounds of paper cuts before feature freeze, so please help out now if you can!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/lucidpaper-jam-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Improving Launchpad Bug Workflow for Opportunistic Programmers</title>
		<link>http://davidsiegel.org/improving-bug-workflow-for-opportunistic-programmers/</link>
		<comments>http://davidsiegel.org/improving-bug-workflow-for-opportunistic-programmers/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 19:46:18 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Design and User Experience]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/621/</guid>
		<description><![CDATA[I&#8217;m a talented software engineer. I have a good deal of application programming experience on Windows, Mac OS, Linux, iPhone, Android, and the Web. I&#8217;m crazy about style guidelines, correctness, functional decomposition, self-documenting code, explicit documentation, code review, unit tests, etc. I&#8217;m confident that for most application codebases, I could learn my way around quickly [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a talented software engineer. I have a good deal of application programming experience on Windows, Mac OS, Linux, iPhone, Android, and the Web. I&#8217;m crazy about style guidelines, correctness, functional decomposition, self-documenting code, explicit documentation, code review, unit tests, etc. I&#8217;m confident that for most application codebases, I could learn my way around quickly enough to make meaningful bug fixes and other improvements.</p>
<p>Despite being good at these things, the barrier to entry for fixing a bug in any given application (paper cuts are a very good example of the kind of bug I&#8217;d like to fix) is still very high for me. I am lousy at chasing down dependencies, maintaining clean build environments, generating patches, and dealing with unfamiliar version control systems. I know next to nothing about packaging or publishing PPAs. Some of you may read this and think, &#8220;well, that&#8217;s your fault&#8211;stop complaining and learn these things,&#8221; but I contend that there are very many talented, opportunistic programmers just waiting to contribute by doing what they do best&#8211;writing code. These eager programmers are similarly hindered by this barrier to entry, and we would benefit more by accommodating them than by insisting that they accommodate us. Furthermore, we have the ability to completely automate <em>the stuff that isn&#8217;t software development</em> and hide its complexity from developers&#8211;in fact, we&#8217;re already mostly there. To illustrate my point, I present my ideal user story for fixing a paper cut.</p>
<p>I want to fix <a id="m6y." href="https://bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/511767" title="&quot;'Hash for Duplicates'&quot; is tech-speak&quot;" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/f-spot/+bug/511767?referer=');">bug #511767, &#8220;&#8216;Hash for Duplicates&#8217;&#8221; is tech-speak.&#8221;</a> F-Spot has a great feature for finding duplicate images in your photo library and getting rid of unwanted copies; however, this useful feature is exposed to the user under the label &#8220;Hash for Duplicates.&#8221; The user likely doesn&#8217;t know what hashing is. Besides, the user wants to <em>find</em> duplicates, not <em>hash</em> them&#8211;hashing is just an implementation detail. To fix this bug, I click &#8220;Quickly fix this bug,&#8221; right on the bug report in Launchpad:</p>
<div style="text-align: center" id="e46j"><img src="http://docs.google.com/File?id=ddgjk3vg_108mnq6xpfg_b" /></div>
<p>Automagically, an application on my machine opens to handle the URL behind the Quickly fix link (e.g. lp://fix/?bug=511767). This application performs the following steps on my behalf:</p>
<ol>
<li>Runs <code>apt-get build-dep f-spot</code> to prepare my machine to build the package affected by the bug.</li>
<li>Runs <code>apt-get source f-spot</code> to download a source package that can be built on my machine.</li>
<li>Opens the f-spot source in Eclipse*, where the source package is built for me.</li>
<li>&#8230;and presumably cleans up the mess after I&#8217;m done.</li>
</ol>
<p><small>* Why Eclipse and not [insert your favorite IDE/editor here]? Because Eclipse is extensible, popular, cross-platform, and supports many different languages, but most of all, I picked Eclipse hoping we could just skip the endless debate where everyone argues that we should use the IDE they wrote &#8220;Hello, World&#8221; in once.</small></p>
<p>With the exception of typing my password if needed, the next thing I should see after clicking &#8220;Quickly fix this bug&#8221; is the F-Spot source package open and built in Eclipse, where I can &#8220;quickly fix&#8221; the bug:</p>
<div>
<div style="text-align: center" id="awcv"><img src="http://docs.google.com/File?id=ddgjk3vg_110d9r25bdm_b" style="width: 800px; height: 402px"></div>
<p>With one click, Eclipse builds and runs the project to let me test my changes:</p>
<div style="text-align: center" id="jyls"><img src="http://docs.google.com/File?id=ddgjk3vg_109cbgj95fq_b" style="width: 800px; height: 594px"></div>
<p>Looks good to me! Time to submit my changes to the Launchpad bug report. With one additional click, Eclipse can push my changes to a PPA, publish a Bazaar branch and generate a merge proposal, or simply attach the patch to the Launchpad bug report. I choose &#8220;Attach Patch to Bug Report,&#8221; so Eclipse creates a patch, opens my browser to the patch submission form on the Launchpad bug report, attaches the patch, and leaves it to me to add a comment and submit:</p>
<div style="text-align: center" id="b1y3"><img src="http://docs.google.com/File?id=ddgjk3vg_111dwcmz6gs_b" style="width: 800px; height: 665px"></div>
<p>To summarize, this user story consists of the following steps to create, test, and submit a patch for a small bug:</p>
<ol>
<li>Click &#8220;Quickly fix this bug&#8221; on the Launchpad bug report.</li>
<li>Edit the source of the corresponding package in Eclipse.</li>
<li>Build the project and test the changes.</li>
<li>Submit the patch and comment back to Launchpad.</li>
</ol>
<p>Which version control software does upstream use for this package? How do I get the code? Which build environment or IDE do they recommend? What dependencies does the package have? How do I use debuild? I shouldn&#8217;t have to know the answers to any of these questions to fix the bug in question. Can we make this quantum leap forward in our bug workflow? Even if we were to enable &#8220;Quickly fix this bug&#8221; for only a handful of important packages, this would be a tremendous force in improving the quality of software in Ubuntu.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/improving-bug-workflow-for-opportunistic-programmers/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Empathy Paper Jam</title>
		<link>http://davidsiegel.org/empathy-paper-jam/</link>
		<comments>http://davidsiegel.org/empathy-paper-jam/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 18:13:06 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Design and User Experience]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=615</guid>
		<description><![CDATA[Last week marked our first &#8220;paper jam&#8221; for the Lucid cycle, during which the Ubuntu community identified ten potential paper cuts affecting Empathy to fix in Ubuntu 10.04. These paper cuts include:

Open (but do not raise) new conversation windows automatically
&#8220;Automatically connect on startup&#8221; setting confusing &#8211; users may expect this to run Empathy on login
Inconsistent [...]]]></description>
			<content:encoded><![CDATA[<p>Last week marked our first &#8220;paper jam&#8221; for the Lucid cycle, during which the Ubuntu community identified <a href="https://bugs.edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-4" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-4?referer=');">ten potential paper cuts affecting Empathy</a> to fix in Ubuntu 10.04. These paper cuts include:</p>
<ul>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/empathy/+bug/206547" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/empathy/+bug/206547?referer=');">Open (but do not raise) new conversation windows automatically</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/empathy/+bug/322314" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/empathy/+bug/322314?referer=');">&#8220;Automatically connect on startup&#8221; setting confusing &#8211; users may expect this to run Empathy on login</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/indicator-applet/+bug/489097" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/indicator-applet/+bug/489097?referer=');">Inconsistent Naming of &#8220;Invisible&#8221; status in indicator applet and Empathy</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/empathy/+bug/437414" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/empathy/+bug/437414?referer=');">some protocol icons in create account dropdown menu are missing</a></li>
<li><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/502999" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/502999?referer=');">The microphone and webcam icons displayed in the buddy list need improvement</a></li>
<li><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/504408" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/504408?referer=');">Invisible accounts button is difficult to discover, arguably not useful, and an apparent interface glitch</a></li>
<li><a href="https://bugs.edge.launchpad.net/ubuntu/+source/empathy/+bug/392488" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/ubuntu/+source/empathy/+bug/392488?referer=');">Empathy could use an Ubuntu-specific Adium theme</a>*</li>
<li><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/502996" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/502996?referer=');">Edit Custom Messages window is too narrow</a></li>
<li><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/503052" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/503052?referer=');">Contact List is sometimes not shown when Empathy is launched</a></li>
<li><a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/504405" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/504405?referer=');">Ctrl-Tab should jump to the next tab</a></li>
</ul>
<p>If any of these paper cuts catch your eye, please take any you&#8217;d like to help triage, fix, integrate, test, or merge and get to work! Ubuntu (and Empathy) users everywhere will love you.</p>
<p>* <small><a http="http://itorrey.com">Torrey Rice</a>, author of the popular <a href="http://www.adiumxtras.com/index.php?a=xtras&#038;xtra_id=2160" onclick="pageTracker._trackPageview('/outgoing/www.adiumxtras.com/index.php?a=xtras_038_xtra_id=2160&amp;referer=');">&#8220;Renkoo&#8221; Adium theme</a> has agreed to get involved with Ubuntu development for the first time by updating Renkoo and ensuring that it works well with Empathy. Three cheers for Torrey!</small></p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/empathy-paper-jam/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>One Hundred Paper Cuts: Karmic Summary and Lucid Plans</title>
		<link>http://davidsiegel.org/100papercuts-karmic-lucid/</link>
		<comments>http://davidsiegel.org/100papercuts-karmic-lucid/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 15:34:55 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Design and User Experience]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=585</guid>
		<description><![CDATA[Karmic Retrospective
Long story short: we fixed 76 paper cuts for Karmic. Hooray! Congratulations! For more details, see the Ubuntu wiki page.
(I believe we actually reached 100, but many paper cuts were fixed without being reported or carefully tracked, and some individual paper cuts addressed multiple instances of a general of problem.)
What about Lucid?
At the Ubuntu [...]]]></description>
			<content:encoded><![CDATA[<h3>Karmic Retrospective</h3>
<p>Long story short: we fixed <a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bugs?field.searchtext=&#038;orderby=-importance&#038;search=Search&#038;field.status:list=FIXCOMMITTED&#038;field.status:list=FIXRELEASED&#038;assignee_option=any&#038;field.assignee=&#038;field.bug_reporter=&#038;field.bug_supervisor=&#038;field.bug_commenter=&#038;field.subscriber=&#038;field.omit_dupes.used=&#038;field.omit_dupes=on&#038;field.has_patch.used=&#038;field.has_cve.used=&#038;field.tag=&#038;field.tags_combinator=ANY" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bugs?field.searchtext=_038_orderby=-importance_038_search=Search_038_field.status_list=FIXCOMMITTED_038_field.status_list=FIXRELEASED_038_assignee_option=any_038_field.assignee=_038_field.bug_reporter=_038_field.bug_supervisor=_038_field.bug_commenter=_038_field.subscriber=_038_field.omit_dupes.used=_038_field.omit_dupes=on_038_field.has_patch.used=_038_field.has_cve.used=_038_field.tag=_038_field.tags_combinator=ANY&amp;referer=');">76 paper cuts</a> for Karmic. Hooray! Congratulations! For more details, see the <a href="https://wiki.ubuntu.com/OneHundredPaperCuts" onclick="pageTracker._trackPageview('/outgoing/wiki.ubuntu.com/OneHundredPaperCuts?referer=');">Ubuntu wiki page</a>.</p>
<p><em><small>(I believe we actually reached 100, but many paper cuts were fixed without being reported or carefully tracked, and some individual paper cuts addressed multiple instances of a general of problem.)</small></em></p>
<h3>What about Lucid?</h3>
<p>At the <a href="https://wiki.ubuntu.com/UDS-L" onclick="pageTracker._trackPageview('/outgoing/wiki.ubuntu.com/UDS-L?referer=');">Ubuntu Developer Summit</a> last week in Dallas, the Canonical Design team; members of the papercutters team; and representatives from the Ubuntu community agreed to tackle one hundred paper cuts for Lucid. As an <a href="https://wiki.ubuntu.com/LTS" onclick="pageTracker._trackPageview('/outgoing/wiki.ubuntu.com/LTS?referer=');">LTS (Long Term Support) release</a>, Lucid is a fantastic opportunity for us to use the One Hundred Paper Cuts project to enrich the experience of LTS users by delivering a polished release that will stand the test of time. Bear in mind that paper cuts that go unfixed in Lucid will affect LTS users for years to come, so each opportunity to fix a paper cut is momentous. Luckily, very few disruptive changes are being introduced in Lucid, so we will be able to spend less time adjusting to major changes, and more time nailing the details.</p>
<p>Here are descriptions of the ten milestones structuring our effort to fix one hundred paper cuts for Lucid (see the <a href="https://edge.launchpad.net/hundredpapercuts/lucid" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/lucid?referer=');">Lucid series</a> on Launchpad):</p>
<dl>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-1" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-1?referer=');">Round 1 &#8220;Kibosh on Karmic&#8221; (2009-12-03)</a></dt>
<dd>In Round 1, our goal is to fix ten of the fifteen paper cuts from the Karmic cycle that had patches attached but were not merged. After some discussion with Rick &#8220;Quickly&#8221; Spencer&#8211;the Ubuntu Desktop Team lead&#8211;we&#8217;ve established a more comprehensive workflow for landing paper cut fixes in Ubuntu: in the Lucid cycle, paper cuts with patches attached should be assigned to &#8220;canonical-desktop-team,&#8221; and &#8220;ubuntu-main-sponsors&#8221; should be subscribed to the bug report to prevent patches from languishing.</dd>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-2" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-2?referer=');">Round 2 &#8220;Kibosh on Karmic&#8221; (2009-12-10)</a></dt>
<dd>In Round 2, our goal is to fix the remaining paper cuts from the Karmic cycle with patches attached. Additional unfixed paper cuts from the Karmic cycle will be moved to this milestone to make an even ten.</dd>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-3" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-3?referer=');">Round 3 &#8220;Kibosh on Karmic&#8221; (2009-12-17)</a></dt>
<dd>In Round 3, we will finish fixing the leftover paper cuts from the Karmic cycle.</dd>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-4" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-4?referer=');">Round 4 &#8220;Paper Jam: Empathy&#8221; (2010-01-07)</a></dt>
<dd>Round 4 will be our first &#8220;Paper Jam.&#8221; A Paper Jam is a milestone where a majority of the paper cuts are taken from a particular domain of user experience. Our first Paper Jam will focus on Empathy; this milestone should contain paper cuts affecting Empathy&#8217;s user experience.</dd>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-5" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-5?referer=');">Round 5 &#8220;Paper Jam: Gwibber&#8221; (2010-01-14)</a></dt>
<dd>Gwibber is shipping by default in Lucid. Let&#8217;s help it make a great first impression.</dd>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-6" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-6?referer=');">Round 6 &#8220;Paper Jam: Sound &#038; Video&#8221; (2010-01-21)</a></dt>
<dd>Movie Player, Rhythmbox, and maybe PiTiVi. These are very solid applications, so this milestone will be challenging!</dd>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-7" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-7?referer=');">Round 7 &#8220;Paper Jam: F-Spot&#8221; (2010-01-28)</a></dt>
<dd>With the removal of the GIMP from the default install, more weight is being placed on F-Spot&#8217;s shoulders &#8212; especially viewer mode.</dd>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-8" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-8?referer=');">Round 8 &#8220;Paper Jam: Notifications&#8221; (2010-02-04)</a></dt>
<dd>Fixing notification priorities and any other vagaries that <em>pop up</em> (ha!).</dd>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-9" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-9?referer=');">Round 9 &#8220;Paper Jam: Compiz Settings&#8221; (2010-02-11)</a></dt>
<dd>Clean up animations, make appearance consistent with Ubuntu&#8217;s look and feel, improve discoverability of Scale and other useful features, etc.</dd>
<dt><a href="https://edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-10" onclick="pageTracker._trackPageview('/outgoing/edge.launchpad.net/hundredpapercuts/+milestone/lucid-round-10?referer=');">Round 10 &#8220;Fin&#8221; (2010-02-18)</a></dt>
<dd>Odds and ends.</dd>
</dl>
<p>As you can see, the One Hundred Paper Cuts effort for Lucid will look very much like the One Hundred Paper Cuts effort for Karmic, except that most of the milestones are organized around threads of user experience.</p>
<h3>Documenting Design Decisions</h3>
<p>In the Karmic cycle, it was often difficult to find the relevant design decisions buried in bug activity and comments. One important change to observe for the Lucid cycle is that paper cut design decisions should be documented separately on the Ubuntu wiki. When a paper cut needs an explicit design specification, append the following line to the bug description: </p>
<blockquote><p>Design Spec: http://wiki.ubuntu.com/OneHundredPaperCuts/Spec/&lt;bug id&gt;</p></blockquote>
<p>And document the design decisions there. Here&#8217;s <a href="https://wiki.ubuntu.com/OneHundredPaperCuts/Spec/382703" onclick="pageTracker._trackPageview('/outgoing/wiki.ubuntu.com/OneHundredPaperCuts/Spec/382703?referer=');">an example spec</a> for the unfinished Karmic paper cut, <a href="https://bugs.edge.launchpad.net/hundredpapercuts/+bug/382703" onclick="pageTracker._trackPageview('/outgoing/bugs.edge.launchpad.net/hundredpapercuts/+bug/382703?referer=');">&#8220;Home Folder&#8221; has 3 different names</a>. If you&#8217;d like to propose a solution, <em>do not merely post a comment on the bug report</em>; rather, please use the following template to record a solution in the design spec:</p>
<p><code><br />
== Solution: &lt;solution name&gt; ==</p>
<p>=== Description ===<br />
# Succinctly describe the solution.</p>
<p>=== Advantages ===<br />
# List advantages of the solution.</p>
<p>=== Disadvantages ===<br />
# Give at least one disadvantage of the solution.</p>
<p>=== Behavior Changes ===<br />
# Specify behavior changes.</p>
<p>=== String Changes ===<br />
# Specify string (text) changes.</p>
<p>=== Visual Changes ===<br />
# Specify visual changes (e.g. icons).<br />
</code></p>
<p>If you agree or disagree with a proposed solution, feel free to add a bullet point to the appropriate Advantages or Disadvantages section. If you strongly disagree with a proposed solution and find it beyond remedy, please propose an alternate solution.</p>
<p>Sound good? Great, let&#8217;s do this!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/100papercuts-karmic-lucid/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Haskell Gem: Unwrapping Indented Text</title>
		<link>http://davidsiegel.org/haskell-unwrap/</link>
		<comments>http://davidsiegel.org/haskell-unwrap/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 04:30:14 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[haskell]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=566</guid>
		<description><![CDATA[While processing some email, I needed a script to unwrap indented lines in email headers. I wrote a Haskell program that turned out to be a short and sweet demonstration of simple but interesting Haskell features (pattern matching, guards, type inference, function composition, and the humble cons) so I thought I&#8217;d share it.

If you&#8217;re new [...]]]></description>
			<content:encoded><![CDATA[<p>While processing some email, I needed a script to unwrap indented lines in email headers. I wrote a Haskell program that turned out to be a short and sweet demonstration of simple but interesting Haskell features (pattern matching, guards, type inference, function composition, and the humble cons) so I thought I&#8217;d share it.</p>
<p><script src="http://gist.github.com/226693.js"></script></p>
<p>If you&#8217;re new to Haskell,</p>
<ul>
<li><code>[]</code> is the empty list</li>
<li><code>[a]</code> is a list with a single element <code>a</code></li>
<li><code>x : y</code> creates a new list by placing element <code>x</code> at the front of list <code>y</code></li>
<li><code>++</code> is concatenate</li>
<li><code>interact</code> is a function taking a single argument, a function that takes a string and returns a string, and returns a bit of IO that runs the string transformation function on the contents of STDIN and prints the result</li>
<li><code>.</code> (period) is a binary operator that composes functions</li>
<li><code>foldr</code> is right-fold, and behaves like this: <code>foldr f d [a, b, c] == f a (f b (f c d))</code></li>
<li>Lines of the form <code>| a = b</code> are guards, which evaluate to <code>b</code> if <code>a</code> evaluates to <code>True</code></li>
</ul>
<p>Example usage:<br />
<code><br />
[/tmp]% cat > header<br />
This is a normal line.<br />
This is a slightly longer line that<br />
&nbsp;&nbsp;wraps with two spaces.<br />
A short line.<br />
Another example of a long line that<br />
&nbsp;&nbsp;&nbsp;&nbsp;wraps with tabs (not just once,<br />
&nbsp;&nbsp;&nbsp;&nbsp;but twice.<br />
Final line.<br />
[/tmp]% cat header | runhaskell Unwrap.hs<br />
This is a normal line.<br />
This is a slightly longer line that wraps with two spaces.<br />
A short line.<br />
Another example of a long line that wraps with tabs (not just once, but twice.<br />
Final line.<br />
</code></p>
<p>Care to share the same program implemented in your language of choice?</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/haskell-unwrap/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 1.922 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-03-13 17:03:00 -->
