<?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>Fri, 09 Jul 2010 10:09:23 +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>Discussing Unity in Linux Format</title>
		<link>http://davidsiegel.org/discussing-unity-in-linux-format/</link>
		<comments>http://davidsiegel.org/discussing-unity-in-linux-format/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 10:40:14 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CS]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[foss]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=829</guid>
		<description><![CDATA[Issue 134 (August, 2010) of Linux Format magazine contains an interview by Jono Bacon in which I discuss Unity and other related topics. Below are the questions Jono asked me and my responses.

How did you get started in Open Source?

I had to build a UNIX shell and UNIX-like kernel for a university course on operating [...]]]></description>
			<content:encoded><![CDATA[<p>Issue 134 (August, 2010) of Linux Format magazine contains an interview by Jono Bacon in which I discuss Unity and other related topics. Below are the questions Jono asked me and my responses.</p>
<hr />
<p><strong>How did you get started in Open Source?<br />
</strong></p>
<p>I had to build a UNIX shell and UNIX-like kernel for a university course on operating system design. After running into incompatibilities between system calls on Mac OS X and the Linux-powered lab computers, I installed Ubuntu on my Mac to align my development environment with that of the lab computers. At the end of the project, I remember thinking &#8220;this Ubuntu thing has everything I need, maybe I should stick with it.&#8221;</p>
<p>The following summer I worked at Google with Sean Egan, who was the maintainer of Pidgin at the time. Sean described what it was like to run an open source project, and I thought the responsibilities involved sounded really exciting.</p>
<p>The one application that was preventing me from making the switch from Mac OS X to Ubuntu was Quicksilver, a keyboard launcher application by Nicholas Jitkoff. For my senior thesis in Computer Science, I decided to form an open source software project to explore desktop search with the goal of ultimately producing an equivalent application for Linux, and the result was GNOME Do.</p>
<p><strong>How did you join Canonical?<br />
</strong></p>
<p>I met Mark Shuttleworth in Boston at GNOME Summit 2008, where I spoke with him about my ideas about user experience and free software. He suggested that I stop by Canonical&#8217;s London office for an interview and to see if I&#8217;d be interested in moving to London to join Canonical&#8217;s nascent design team, and by coincidence I had plans to visit London the very next week, so that&#8217;s what I did. I decided not to join Canonical initially, but eight months later Mark asked me to attend a design sprint in Capetown and I was too excited to say no!</p>
<p><strong>Where do you fit into the design team and design vision of Ubuntu?<br />
</strong></p>
<p>My role on the design team is &#8220;Desktop Interaction Architect.&#8221; I write narratives and create wireframes to describe wonderful experiences for people using Ubuntu. Other members of the design team turn these descriptions into interactive prototypes and visual renderings that can be tested with users and eventually implemented.</p>
<p>When I&#8217;m not &#8220;architecting desktop interaction,&#8221; I&#8217;m trying to engender interest in user experience throughout the free software community. To this end, I&#8217;ve led the One Hundred Paper Cuts project and the recently announced UX Advocate project while at Canonical.</p>
<p>I&#8217;m not sure how I fit into the &#8220;design vision&#8221; of Ubuntu, but I&#8217;ll answer this question by saying that I try to encourage technical stakeholders in Ubuntu to see software not only as an opportunity to write beautiful source code, but also as an opportunity to create beautiful experiences for people.</p>
<p><strong>What is Unity?<br />
</strong></p>
<p>Unity is a lightweight interface for your Ubuntu netbook. Considered more generally, it&#8217;s a shell tailored for devices with small screens.</p>
<p>Unity comprises: a launcher that makes opening and switching between applications delightful; a panel where indicators behave uniformly; a view of your installed applications, with Ubuntu Software Center integration; a view of your files, with quick access to favorite folders, recent files, downloads, and simple browsing; and a search interface, enabling pervasive use of find-as-you-type search so you can find applications, files, and settings with a few keystrokes.</p>
<p><strong>What is the vision for Unity? What do you seek to achieve with it?<br />
</strong></p>
<p>Canonical recently announced Ubuntu Light, a version of Ubuntu whose interface was honed to create a fast, simple, and secure web experience. Mark Shuttleworth describes Ubuntu Light adeptly in an announcement on his blog,</p>
<blockquote><p>&#8230;Ubuntu Netbook Light, or Ubuntu Desktop Light, will give OEM’s the ability to differentiate themselves with fast-booting Linux offerings that are familiar to Ubuntu users and easy to use for new users, safe for web browsing in unprotected environments like airports and hotels, focused on doing that job very well, but upgradeable with a huge list of applications, on demand. The Light versions will also benefit from the huge amount of work done on every Ubuntu release to keep it maintained – instant-on environments need just as much protection as everyday desktops, and Ubuntu has a deep commitment to getting that right.</p>
<p>The Ubuntu Light range is available to OEM’s today. Each image will be hand-crafted to boot fastest on that specific hardware, the application load reduced to the minimum, and it comes with tools for Windows which assist in the management of the dual-boot experience. Initially, the focus is on the Netbook Light version based on Unity, but in future we expect to do a Light version of the desktop, too.</p></blockquote>
<p>There&#8217;s a lot of overlap between Ubuntu Light and Ubuntu Netbook Edition, mostly because they&#8217;re both optimized for small screens and web browsing. Unity serves as the foundation of both products so that they can share common elements like indicators and the Launcher. My short term goal for Unity is to build a fantastic experience for Ubuntu Netbook Edition 10.10 by extending Ubuntu Light to support basic application and file management use cases that are appropriate for general purpose devices like netbooks.</p>
<p>I&#8217;d also like to explore search further, and begin to incorporate touch. I&#8217;m very interested in using search to tame complex user journeys (but I don&#8217;t treat search as a panacea), and everyone is interested in touch devices these days.</p>
<p><strong>When will Unity hit the netbook edition?<br />
</strong></p>
<p>Hopefully Unity will be released in Ubuntu Netbook Edition 10.10! We have a lot of work to do before October, but with Neil Patel as the Unity engineering lead, I am at ease.</p>
<p><strong>Can people participate in Unity, and if so, how?<br />
</strong></p>
<p>Unity is available immediately from a PPA:
<pre>ppa:canonical-dx-team/une</pre>
<p> After adding this PPA to your Ubuntu system (you need to be running Lucid for now), install the &#8220;unity&#8221; package, then change your session from GNOME to Unity at the login screen.</p>
<p>Once you have Unity installed, please play with it and report bugs. You can find me in the IRC channel #ayatana on irc.freenode.net, where my nickname is &#8220;djsiegel.&#8221; Please come talk to me about Unity&#8211;I am eager to hear your feedback and suggestions!</p>
<p><strong>How do you feel Unity improves on the current crop of netbook interfaces?<br />
</strong></p>
<p>I&#8217;ve already described Unity&#8217;s Launcher as &#8220;delightful,&#8221; and I really meant it. The first version of the Launcher simply scrolled off screen when full. The second version of the Launcher, due to land in time for Ubuntu 10.10, behaves completely differently. Words cannot describe it&#8211;it&#8217;s breathtaking. If someone sees you using Unity, they will ask, &#8220;hey, what is that?&#8221;. It&#8217;s not only an improvement over the current crop of netbook interfaces, it&#8217;s an improvement over personal computer interfaces in general.</p>
<p>The Applications Place&#8211;Unity&#8217;s view of your installed applications&#8211;is unprecedented. It lets you browse your installed applications in a gorgeous manner, and provides find-as-you-type search of both your installed applications and applications available in the Ubuntu Software Center. It&#8217;s slick.</p>
<p>The Files Place&#8211;Unity&#8217;s view of the files on your netbook&#8211;eschews traditional, hierarchical filesystem navigation and instead promotes search and time-based browsing. This will make Ubuntu Netbook Edition the first netbook interface with a file browsing experience powered by Zeitgeist. There is still much to be designed, but it&#8217;s already a bold and exciting experiment that challenges many longstanding assumptions about how people think about their files.</p>
<p><strong>How is this going to affect GNOME Shell?<br />
</strong></p>
<p>Mark Shuttleworth already addressed this question during his keynote at Ubuntu Developer Summit, so I defer to him.</p>
<p><strong>Some people have accused Ubuntu of mimicking Mac OS X, what is your take?<br />
</strong></p>
<p>I don&#8217;t take a position on every silly little thing that people say, but if forced to take a position on the matter, I would say &#8220;haters gonna hate.&#8221;</p>
<p><strong>What do you see as the ultimate goal and opportunity for Ubuntu on the desktop?<br />
</strong></p>
<p>The ultimate opportunity for Ubuntu is to make people happy, and its goal is to do so ethically by not treating its users as means to an end; Ubuntu users will be made happy by great user experience, and they will be treated as ends in themselves by not requiring them to sacrifice freedom in order to use software.</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/discussing-unity-in-linux-format/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Announcing the User Experience Advocates Project</title>
		<link>http://davidsiegel.org/announcing-ux-advocates/</link>
		<comments>http://davidsiegel.org/announcing-ux-advocates/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 15:55:40 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[foss]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=787</guid>
		<description><![CDATA[After working on paper cuts for a year, I realized how disorganized many open source projects affecting Ubuntu are when it comes to improving user experience. I would often go to upstream projects with a list of paper cuts to discuss and have a very difficult time finding someone to discuss them with. Either the [...]]]></description>
			<content:encoded><![CDATA[<p>After working on <a href="http://davidsiegel.org/one-hundred-paper-cuts/">paper cuts</a> for a year, I realized how disorganized many open source projects affecting Ubuntu are when it comes to improving user experience. I would often go to upstream projects with a list of paper cuts to discuss and have a very difficult time finding someone to discuss them with. Either the maintainer was too busy, or nobody was interested in small user experience issues, or &#8220;the mailing list made that [design decision],&#8221;  or there was no record justifying the existing user experience so project stakeholders assumed they were deliberate decisions made by the original authors, etc.</p>
<p>We simply cannot go on like this! We need to be able to address user experience issues at least as effectively as we address technical issues, and this starts with being able to communicate about these issues at least as effectively. If I discover a user experience issue in F-Spot, there should be exactly one person I can discuss it with, who will take responsibility for keeping an eye on it, and who will discuss and prioritize it with F-Spot&#8217;s development team. This person would be F-Spot&#8217;s <strong>User Experience Advocate</strong>, and everyone working on F-Spot would have this person on speed dial.</p>
<p>The User Experience Advocate is responsible for representing the interests of users within an open source project, and has the following specific duties:</p>
<ul>
<li>Review usability and user research documents.</li>
<li>Communicate user experience research to the project team.</li>
<li>Review use cases if they are available or produce them if they don&#8217;t exist.</li>
<li>Review software against user experience guidelines, usability heuristics and brand.</li>
<li>Work closely with the maintainer and advise on solutions that are most aligned with users needs and findings.</li>
<li>Conduct usability testing or other research to support the project team&#8217;s decision making.</li>
<li>Write and follow usability bug reports throughout the lifecycle of the project.</li>
<li>Work closely with UX Advocates on related projects.</li>
<li>Participate in the greater user experience community.</li>
</ul>
<p>Where do we find people with these skills, you ask? We already have them! To be a UX Advocate, you don&#8217;t need to be able to create pixel-perfect mockups in Inkscape or have an HCI degree. All you need is love&#8211;you have to love an open source project and the people who use it, and you need to be patient, persistent, and persuasive. Of course, if you have some background in user experience, that would be tremendously helpful, but it&#8217;s unnecessary; it&#8217;s far better for an open source project to have a novice UX Advocate than none at all.</p>
<p>Many open source projects already have people serving in this capacity; sometimes it&#8217;s the project maintainer, or sometimes there&#8217;s a de facto usability expert. <strong>My goal is to ensure that all major software projects shipping in Ubuntu can name their UX Advocate by this coming October.</strong> I would be delighted if the same happens for Kubuntu, or for any arbitrary open source software project for that matter. In my opinion, if an open source project has a Maintainer, it should also have a UX Advocate.</p>
<p>In his keynote address at O&#8217;Reilly Open Source Convention on July 22nd, 2008, Mark Shuttleworth challenged the open source community to not only to catch up to Apple in terms of user experience, but to surpass the user experience of Mac OS X within two years. That two year period will expire in 45 days, so how are we doing?</p>
<p><em><small>(Before people start complaining about this comparison, let me make it clear that I understand that many Ubuntu users are not interested in Apple or any of their products, and that many members of the open source community do not share the goal of making Ubuntu&#8217;s user experience surpass that of Mac OS X. That&#8217;s fine, I understand. I am writing this because it is my duty to make the experience of using Ubuntu better than the experience of using any similar product, and because Ubuntu and Mac OS X, as desktop operating systems, are similar products, it is my duty to make the experience of using Ubuntu better than the experience of using Mac OS X. I cannot accomplish this effectively without comparing the two, but I digress.)</small></em></p>
<p>It is an incredibly daunting task to compare the total user experience of Ubuntu to the total user experience of Mac OS X, so instead I will attempt a cursory comparison the rate of change of user experience over the course of the last two years. Any objective critic will readily admit that the Ubuntu of two years ago, Ubuntu 8.04, did not offer the same or better user experience as the Mac OS X of two years ago, Mac OS X 10.5. To trump the user experience of Mac OS X, Ubuntu&#8217;s user experience will necessarily have had to improve more in two years than Mac OS X did.</p>
<div id="attachment_794" class="wp-caption aligncenter" style="width: 610px"><a href="http://davidsiegel.org/wp-content/uploads/2010/06/default1.png"><img src="http://davidsiegel.org/wp-content/uploads/2010/06/default1.png" alt="Ubuntu 8.04" title="Ubuntu 8.04" width="600" height="450" class="size-full wp-image-794" /></a><p class="wp-caption-text">Ubuntu, two years ago.</p></div>
<p>Here&#8217;s how the user experience of Ubuntu has improved in two years:</p>
<ul>
<li>The Ubuntu Software Center made it a snap to discover and install software.</li>
<li>The Humanity icon theme gave us much improved, scalable icons.</li>
<li>The Radiance and Ambiance themes made Ubuntu more beautiful.</li>
<li>The Me Menu lets you Tweet, Dent, and change status from anywhere.</li>
<li>The Messaging Menu consolidated new message notifcations.</li>
<li>The Session Menu made fast user switching and other session states more accessible.</li>
<li>PiTiVi Video Editor enabled video editing out of the box.</li>
<li>Brasero made burning CDs much simpler.</li>
<li>Empathy enabled video and audio chat on supported hardware.</li>
<li>Gwibber Social Client brought Facebook, Twitter, and other social services to the desktop.</li>
<li>Monochromatic panel icons reduced visual noise and made the panel feel cleaner.</li>
<li>Improved window animations and effects made Ubuntu feel snappier and smoother.</li>
<li>Simple Scan made scanning a no-brainer.</li>
<li>The Ubuntu One Music Store puts a huge library of DRM-free music at your fingertips.</li>
<li>Rhythmbox added fantastic iPod and iPhone support.</li>
<li>We fixed 178 Paper Cuts.</li>
<li>When you start or shut down, there is less flickering.</li>
<li>Ubuntu boots very very quickly.</li>
<li>Encrypted Home Folders keep your files extremely secure.</li>
<li>Ubuntu One keeps your files synchronized across multiple computers and the web.</li>
<li>Bluetooth Setup greatly simplifies working with Bluetooth devices.</li>
<li>The Installer slideshow gives a slick overview of the Ubuntu experience.</li>
<li>USB Startup Disk Creator saves time, hassle, and CDs!</li>
<li>Notify OSD presents uniform, unobstrusive notifications.</li>
<li>Sudoku!</li>
<li>Firefox 3 brought private browsing, improved UI, better security, more speed, improved audio, video, and web fonts.</li>
<li>Transmission BitTorrent Client makes downloading large files very pleasant.</li>
<li>Easier configuration of multiple displays.</li>
<li>Much refined installer, including a nicer time zone selector.</li>
<li>Ability to enable auto-login.</li>
<li>Tomboy Notes sync puts your notes on all of your computers and the web.</li>
<li>OpenOffice.org v3 brought many new features and improvements.</li>
<li>PulseAudio gives us better sound control for multiple devices.</li>
<li>Improved out-of-the-box experience for users of Nvidia drivers.</li>
<li>Mobile Broadband support lets you easily connect to the Internet via your mobile phone.</li>
<li>BBC and YouTube support in Movie Player.</li>
<li>Guest Account makes it easier to share your computer.</li>
<li>Fast User Switching.</li>
<li>Improved user account management.</li>
<li>Evolution with Exchange MAPI support (not just OWA).</li>
<li>Plug-and-Play printing enabled by automatic printer driver installation.</li>
<li>Notification of USB device removal (i.e. &#8220;you can unplug now&#8221;).</li>
<li>PDF comment support.</li>
<li>F-Spot duplicate photo detection.</li>
<li>Improved WINE integration.</li>
<li>Autorun for media containing software.</li>
<li>Tabs in Nautilus.</li>
<li>Desktop background slideshows.</li>
<li>And of course, improved hardware support so more things Just Work.</li>
</ul>
<p>Now I&#8217;d like you take a look at <a href="http://www.apple.com/macosx/refinements/enhancements-refinements.html" onclick="pageTracker._trackPageview('/outgoing/www.apple.com/macosx/refinements/enhancements-refinements.html?referer=');">the improvements Apple made to Mac OS X in a two year period</a>. Please visit that link and read at least the bold text, if not the entire page.</p>
<p>At the <em>very least</em>, can we not say that these improvements are comparable? I think they are. Of course there have been some regressions, but if someone would have shown me the list of improvements made to Ubuntu two years ago, and told me that all of these changes would be made in time for Ubuntu 10.04, I would have been very skeptical.</p>
<p>What will Ubuntu be like two years from now if every project assigns a UX Advocate to take ultimate responsibility for the user experience of that project? It will be amazing!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/announcing-ux-advocates/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Scala on Mono</title>
		<link>http://davidsiegel.org/scala-on-mono/</link>
		<comments>http://davidsiegel.org/scala-on-mono/#comments</comments>
		<pubDate>Sun, 16 May 2010 16:02:23 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[foss]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=745</guid>
		<description><![CDATA[In ScalaMono.scala:

Then,

Edit: Weak Mono/JVM comparison removed.
Update: wks asked me to try calculating some larger Fibonaccis to normalize runtime startup cost when comparing Mono to JVM performance:

Mono: 0.42s total
JVM (IcedTea6 1.8): 84.45s total
Go, Mono, go!
]]></description>
			<content:encoded><![CDATA[<p>In <code>ScalaMono.scala</code>:</p>
<p><script src="http://gist.github.com/402947.js?file=ScalaMono.scala"></script></p>
<p>Then,</p>
<p><script src="http://gist.github.com/402945.js?file=Scala+on+Mono.txt"></script></p>
<p><strong>Edit:</strong> Weak Mono/JVM comparison removed.</p>
<p><strong>Update:</strong> wks asked me to try calculating some larger Fibonaccis to normalize runtime startup cost when comparing Mono to JVM performance:</p>
<p><script src="http://gist.github.com/403149.js"></script></p>
<p>Mono: <strong>0.42s total</strong><br />
JVM (IcedTea6 1.8): 84.45s total</p>
<p>Go, Mono, go!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/scala-on-mono/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Reintroducing the Jonometer</title>
		<link>http://davidsiegel.org/reintroducing-the-jonometer/</link>
		<comments>http://davidsiegel.org/reintroducing-the-jonometer/#comments</comments>
		<pubDate>Fri, 14 May 2010 15:51:48 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=739</guid>
		<description><![CDATA[I finally had some time to port Matt Zimmerman&#8217;s &#8220;Jonometer&#8221; to Haskell, and have finished version 1! The following bit of code compiles natively, is statically typed, and requires no type declarations due to Haskell&#8217;s amazing type inference.
You&#8217;ll need hs-twitter, and you can run this as a script like ./jonometer.hs

Now I need to bone up [...]]]></description>
			<content:encoded><![CDATA[<p>I finally had some time to port <a href="http://mdzlog.alcor.net/2010/03/19/introducing-the-jonometer/" onclick="pageTracker._trackPageview('/outgoing/mdzlog.alcor.net/2010/03/19/introducing-the-jonometer/?referer=');">Matt Zimmerman&#8217;s &#8220;Jonometer&#8221;</a> to Haskell, and have finished version 1! The following bit of code compiles natively, is statically typed, and requires no type declarations due to Haskell&#8217;s amazing type inference.</p>
<p>You&#8217;ll need <code>hs-twitter</code>, and you can run this as a script like <code>./jonometer.hs</code></p>
<p><script src="http://gist.github.com/401265.js?file=jonometer.hs"></script></p>
<p>Now I need to bone up on CouchDB and write version 2!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/reintroducing-the-jonometer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hello, Unity</title>
		<link>http://davidsiegel.org/hello-unity/</link>
		<comments>http://davidsiegel.org/hello-unity/#comments</comments>
		<pubDate>Mon, 10 May 2010 16:14:53 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[foss]]></category>
		<category><![CDATA[GNOME]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=709</guid>
		<description><![CDATA[This is an early version of Unity, what will hopefully become the new interface for Ubuntu Netbook Edition 10.10:
Unity comprises:

A launcher that makes opening and switching between applications delightful.
A panel where indicators behave uniformly.
A view of your installed applications, with Ubuntu Software Center integration.
A view of your files, with quick access to favorite folders, recent [...]]]></description>
			<content:encoded><![CDATA[<p>This is an early version of Unity, what will hopefully become the new interface for Ubuntu Netbook Edition 10.10:</p>
<div id="attachment_722" class="wp-caption aligncenter" style="width: 810px"><a href="http://davidsiegel.org/wp-content/uploads/2010/05/Screenshot-11.png"><img src="http://davidsiegel.org/wp-content/uploads/2010/05/Screenshot-11.png" alt="Unity on an especially small screen" title="Unity on an especially small screen" width="800" height="600" class="size-full wp-image-722" /></a><p class="wp-caption-text">Unity running on a very small screen</p></div>
<p>Unity comprises:</p>
<ul>
<li>A launcher that makes opening and switching between applications delightful.</li>
<li>A panel where indicators behave uniformly.</i>
<li>A view of your installed applications, with Ubuntu Software Center integration.</li>
<li>A view of your files, with quick access to favorite folders, recent files, downloads, and simple browsing.</li>
<li>A search field, enabling pervasive use of find-as-you-type search so you can find applications, files, and settings with a few keystrokes. (This is <em>not</em> the search field pictured above.)</li>
</ul>
<p>Some pieces of Unity will be defined further this week at the Ubuntu Developer Summit. Other pieces are available now for testing. Neil Patel, the engineering lead for Unity, has written <a href="http://njpatel.blogspot.com/2010/05/unity.html" onclick="pageTracker._trackPageview('/outgoing/njpatel.blogspot.com/2010/05/unity.html?referer=');">a nice summary of the features</a> we&#8217;ve started to implement, or plan to implement (or plan to plan to implement this week at UDS) for Ubuntu Netbook Edition 10.10, along with instructions for how to test Unity on your computer. You might also be interested in <a href="http://www.markshuttleworth.com/archives/383" onclick="pageTracker._trackPageview('/outgoing/www.markshuttleworth.com/archives/383?referer=');">Mark Shuttleworth&#8217;s account</a> of why Unity was created and what it will be used for.</p>
<p>I will discuss each piece of Unity separately and in great detail; this is only the opening remark in a long and exciting conversation!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/hello-unity/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Ada Lovelace and the Turing Test</title>
		<link>http://davidsiegel.org/ada-lovelace-and-the-turing-test/</link>
		<comments>http://davidsiegel.org/ada-lovelace-and-the-turing-test/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 15:28:51 +0000</pubDate>
		<dc:creator>David</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CS]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://davidsiegel.org/?p=699</guid>
		<description><![CDATA[In Computing Machinery and Intelligence, Alan Turing describes the famous Turing test for detecting machine intelligence. Did you know that Turing&#8217;s thesis was heavily influenced by Ada Lovelace&#8217;s critique of Babbage&#8217;s Analytical Engine, wherein she states that &#8220;the Analytical Engine has no pretensions to originate anything,&#8221; arguing that computing machines do not exhibit creativity? You [...]]]></description>
			<content:encoded><![CDATA[<p>In <em>Computing Machinery and Intelligence</em>, Alan Turing describes the famous Turing test for detecting machine intelligence. Did you know that Turing&#8217;s thesis was heavily influenced by Ada Lovelace&#8217;s critique of Babbage&#8217;s Analytical Engine, wherein she states that &#8220;the Analytical Engine has no pretensions to originate anything,&#8221; arguing that computing machines do not exhibit creativity? You can read more about Lovelace&#8217;s critique of the possibility of machine creativity, and how this critique informed Turing&#8217;s work on machine intelligence in my paper, <a href="http://davidsiegel.org/computing-machinery-and-creativity/"><em>Computing Machinery and Creativity</em></a>.</p>
<p>Happy Ada Lovelace Day!</p>
]]></content:encoded>
			<wfw:commentRss>http://davidsiegel.org/ada-lovelace-and-the-turing-test/feed/</wfw:commentRss>
		<slash:comments>1</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[Uncategorized]]></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>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[Uncategorized]]></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>27</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[Uncategorized]]></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>31</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[Uncategorized]]></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 0.317 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-09-03 02:05:44 -->
