<?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>20papercups :: Michael Marner&#039;s Website &#187; Linux</title>
	<atom:link href="http://www.20papercups.net/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.20papercups.net</link>
	<description>The (awesome) website of Michael Marner</description>
	<lastBuildDate>Tue, 15 Nov 2011 01:09:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How OpenNI Nearly Spoiled The Show</title>
		<link>http://www.20papercups.net/programming/how-openni-nearly-spoiled-the-show/</link>
		<comments>http://www.20papercups.net/programming/how-openni-nearly-spoiled-the-show/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 10:37:01 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Border Project]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[Half Real]]></category>
		<category><![CDATA[kinect]]></category>
		<category><![CDATA[OpenNI]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=420</guid>
		<description><![CDATA[So, for the last few months I&#8217;ve taken a break from the PhD to do some work for a theatre show for The Border Project, Half Real. There&#8217;s a lot of technology in the show. In particular, most of the set is projected, and we are using a Microsoft Kinect to track the actors on [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.20papercups.net/wp-content/uploads/2011/09/halfreal-1.jpg"><img class="alignleft size-thumbnail wp-image-424" title="Half Real" src="http://www.20papercups.net/wp-content/uploads/2011/09/halfreal-1-150x150.jpg" alt="Half Real" width="150" height="150" /></a>So, for the last few months I&#8217;ve taken a break from the PhD to do some work for a theatre show for <a title="The Border Project" href="http://www.theborderproject.com" target="_blank">The Border Project</a>, <a title="Half Real" href="http://www.theborderproject.com/project-half-real.html" target="_blank">Half Real</a>.</p>
<p>There&#8217;s a lot of technology in the show. In particular, most of the set is projected, and we are using a Microsoft Kinect to track the actors on stage, and modifying the projections based on their location.</p>
<p>I&#8217;m working on Linux, and using <a title="OpenNI" href="http://www.openni.org/" target="_blank">OpenNI</a> for interfacing with the Kinect. Things <em>almost</em> worked perfectly. In this post I will document the trials and tribulations of getting the Kinect to work for Half Real.</p>
<p><span id="more-420"></span>I often fall into <a title="Not Invented Here Syndrome" href="http://en.wikipedia.org/wiki/Not_Invented_Here" target="_blank">Not Invented Here Syndrome</a>, and so slowly I&#8217;m trying to get out of it. Obviously, interfacing with hardware like the Kinect is not something I really wanted to do during a 3 month theatre development. My Spatial Augmented Reality framework is built on Linux, so I basically had the option of <a href="http://openkinect.org/wiki/Main_Page" target="_blank">Libfreenect</a> or <a href="http://www.openni.org/" target="_blank">OpenNI</a>. OpenNI appears to be more mature, and so that&#8217;s what I went with.</p>
<p><iframe src="http://www.youtube.com/embed/4nowWxi75jE" frameborder="0" width="640" height="360"></iframe></p>
<p>As you can see, I&#8217;m only really tracking the position of the actors &#8211; we aren&#8217;t using any of the gesture recognition stuff.</p>
<p>During development everything looked peachy. However, during production week when we started running through the whole show, a <em>major</em> issue popped up. It turns out there is a bug buried deep in OpenNI that eventually rears its ugly head if you have a few people running around at the same time:</p>
<pre>Program received signal SIGSEGV, Segmentation fault.
 0x00007ffff215574d in Segmentation::checkOcclusion(int, int, int, int)</pre>
<p>This is a big problem. See, this is a theatre show, where the entire set is projected. If the system crashes, the stage goes black. The operator has to restart and bring the projections up to the right point in the show. It turned out that in our tech previews, the software was crashing 2-3 times per show. This was simply unacceptable.</p>
<p>Thankfully, I was only interested in the positions of the actors. This meant I could run the tracking in a completely different process and send the data to the projection system without too much overhead. So, on the day before I finished working for the project, I had to completely rewrite how the tracking worked.</p>
<h3>The Data We Need</h3>
<p>As I said, we only need position. I didn&#8217;t have to send through any camera images, gesture information, etc. All I needed was:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">struct</span> KinectMessage
<span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">uint8_t</span> actor_id<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">float</span>   quality<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">float</span>   x<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">float</span>   y<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">float</span>   z<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></div></div>

<p>The process that interfaces with the Kinect simply sent these messages over a TCP connection to the projection system for every actor on stage. TCP worked pretty well. Both processes run on the same system, and the Kinect only updates at 30fps anyway. So you know, there&#8217;s only 510 bytes per second, per actor that needed to be transferred. If I was transferring images, a better <a href="http://en.wikipedia.org/wiki/Inter-process_communication" target="_blank">IPC</a> technique would be required.</p>
<h3>While True</h3>
<p>At this point, the hard work was done. Simply wrap the tracking process in a shell script that loops forever, rerunning the process when the segfault occurs. The projectors never go to black, and the worst case is the tracking lags for a a couple of seconds. Not perfect, but infinitely better.</p>
<p>I guess the moral of this post is to be wary of relying on 3rd party libraries that are not particularly mature. And if you have to (you don&#8217;t have much choice if you want to talk to the Kinect), wrap it up so it can&#8217;t screw you over. TCP worked for me, because I didn&#8217;t need to transfer much data. Even if you were doing the skeleton tracking and gestures, there isn&#8217;t a lot of data to send. If you need the images from the camera, TCP <em>may</em> not be for you. But there are plenty of other IPC techniques that could handle that amount of data (even pipes would do it). I guess the good news is OpenNI is Open Source, so in theory someone can get around to fixing it.</p>
<p>Hope this helps someone.</p>
<p>Michael</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/programming/how-openni-nearly-spoiled-the-show/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kinect on Ubuntu with OpenNI</title>
		<link>http://www.20papercups.net/programming/kinect-on-ubuntu-with-openni/</link>
		<comments>http://www.20papercups.net/programming/kinect-on-ubuntu-with-openni/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 05:06:57 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Augmented Reality]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[kinect]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[NITE]]></category>
		<category><![CDATA[OpenNI]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=408</guid>
		<description><![CDATA[I&#8217;ve spent all this morning trying to talk to the Microsoft Kinect using OpenNI. As it turns out, the process is not exceptionally difficult, it&#8217;s just there doesn&#8217;t seem to be any up to date documentation on getting it all working. So, this post should fill the void. I describe how to get access to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.20papercups.net/wp-content/uploads/2011/06/kinect.png"><img class="size-thumbnail wp-image-409 alignleft" title="self portrait" src="http://www.20papercups.net/wp-content/uploads/2011/06/kinect-150x150.png" alt="" width="150" height="150" /></a></p>
<p>I&#8217;ve spent all this morning trying to talk to the Microsoft Kinect using <a href="http://openni.org/" target="_blank">OpenNI</a>. As it turns out, the process is not exceptionally difficult, it&#8217;s just there doesn&#8217;t seem to be any up to date documentation on getting it all working. So, this post should fill the void. I describe how to get access to the Kinect working using Ubuntu 11.04, OpenNI, and NITE.<span id="more-408"></span>To talk to the Kinect, there are two basic parts: OpenNI itself, and a Sensor module that is actually responsible for communicating with the hardware. Then, if you need it, there is NITE, which is another module for OpenNI that does skeletal tracking, gestures, and stuff. Depending on how you plan on using the data from the Kinect, you may not need NITE at all.</p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-9376349336558898";
google_ad_slot = "0815367707";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<h3>Step 1: Prerequisites</h3>
<p>We need to install a bunch of packages for all this to work. Thankfully, the readme file included with OpenNI lists all these. However, to make life easier, this is (as of writing) what you need to install, in addition to all the development packages you (hopefully) already have.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> <span style="color: #c20cb9; font-weight: bold;">git</span> build-essential python libusb-<span style="color: #000000;">1.0</span>-<span style="color: #000000;">0</span>-dev freeglut3-dev</pre></div></div>

<p>There are also some optional packages that you can install, depending on whether you want documentation, Mono bindings, etc. Note that on earlier versions the install failed if you didn&#8217;t have doxygen installed, even though it is listed as optional.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> doxygen graphviz mono-complete</pre></div></div>

<h3>Step 2: OpenNI</h3>
<p>OpenNI is a framework for working with what they are calling <em>natural interaction</em> devices.Anyway, this is how it is installed:</p>
<p>Check out from Git</p>
<p>OpenNI is hosted on Github, so checking it out is simple:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">git</span> clone https:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>OpenNI<span style="color: #000000; font-weight: bold;">/</span>OpenNI.git</pre></div></div>

<p>From there, change into the Platform/Linux-x86/CreateRedist directory, and run the RedistMaker script. Note that even though the directory is named x86, this same directory builds 64 bit versions just fine. So, don&#8217;t fret if you&#8217;re on 64bit Linux.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> OpenNI<span style="color: #000000; font-weight: bold;">/</span>Platform<span style="color: #000000; font-weight: bold;">/</span>Linux-x86<span style="color: #000000; font-weight: bold;">/</span>CreateRedist
.<span style="color: #000000; font-weight: bold;">/</span>RedistMaker</pre></div></div>

<p>The RedistMaker script will compile everything for you. You then need to change into the Redist directory and run the install script to install the software on your system.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>Redist
<span style="color: #c20cb9; font-weight: bold;">sudo</span> .<span style="color: #000000; font-weight: bold;">/</span>install.sh</pre></div></div>

<h3>Step 3: Kinect Sensor Module</h3>
<p>OpenNI doesn&#8217;t actually provide anything for talking to the hardware, it is more just a framework for working with different sensors and devices. You need to install a Sensor module for actually doing the hardware interfacing. Think of an OpenNI sensor module as a device driver for the hardware. You&#8217;ll also note on the OpenNI website that they have a Sensor module that you can download. Don&#8217;t do this though, because that sensor module doesn&#8217;t talk to the Kinect. I love how well documented all this is, don&#8217;t you?</p>
<p>The sensor module you want is also on GitHub, but from a different user. So, we can check out the code. We also need to get the kinect branch, not master.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">git</span> clone https:<span style="color: #000000; font-weight: bold;">//</span>github.com<span style="color: #000000; font-weight: bold;">/</span>avin2<span style="color: #000000; font-weight: bold;">/</span>SensorKinect
<span style="color: #7a0874; font-weight: bold;">cd</span> SensorKinect</pre></div></div>

<p>The install process for the sensor is pretty much the same as for OpenNI itself:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> Platform<span style="color: #000000; font-weight: bold;">/</span>Linux-x86<span style="color: #000000; font-weight: bold;">/</span>CreateRedist
.<span style="color: #000000; font-weight: bold;">/</span>RedistMaker
<span style="color: #7a0874; font-weight: bold;">cd</span> ..<span style="color: #000000; font-weight: bold;">/</span>Redist
<span style="color: #c20cb9; font-weight: bold;">sudo</span> .<span style="color: #000000; font-weight: bold;">/</span>install.sh</pre></div></div>

<p>On Ubuntu, regular users are only given read permission to unknown USB devices. The install script puts in some udev rules to fix this, but if you find that none of the samples work unless you run them as root, try unplugging and plugging the Kinect back in again, to make the new rules apply.</p>
<h3>Step 4: Test the OpenNI Samples</h3>
<p>At this point, you have enough installed to get data from the Kinect. The easiest way to verify this is to run one of the OpenNI samples.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> OpenNI<span style="color: #000000; font-weight: bold;">/</span>Platform<span style="color: #000000; font-weight: bold;">/</span>Linux-x86<span style="color: #000000; font-weight: bold;">/</span>Bin<span style="color: #000000; font-weight: bold;">/</span>Release
.<span style="color: #000000; font-weight: bold;">/</span>Sample-NiSimpleViewer</pre></div></div>

<p>You should see a yellow-black depth image. At this point, you&#8217;re left with (optionally) installing the higher level NITE module.</p>
<h3>Step 5: Install NITE (optional)</h3>
<p>Firstly, you need to obtain NITE. For some reason, the link on PrimeSense&#8217;s homepage results in a 404 error. After quite a bit of searching around yesterday, I found the correct link:</p>
<p><a href="http://www.openni.org/downloadfiles/opennimodules/openni-compliant-middleware-binaries/33-latest-unstable" target="_blank">http://www.openni.org/downloadfiles/opennimodules/openni-compliant-middleware-binaries/33-latest-unstable</a></p>
<p>Download either the 32 or 64 bit version, depending on your platform. As of writing they only have versions for Ubuntu 10.10, but these seem to work fine with 11.04 as well.</p>
<p>Extract the archive, and run the installer:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> .<span style="color: #000000; font-weight: bold;">/</span>install.sh</pre></div></div>

<p>At some point, you will be asked for a license key. A working license key can be found <a href="http://www.google.com/search?q=NITE+license+key" target="_blank">just about anywhere on the Internet</a>. I don&#8217;t think PrimeSense care, or maybe this is a non-commercial license or something. But whatever, just copy that license into the console, including the equals sign at the end, and NITE will install just fine.</p>
<h3>Conclusion</h3>
<p>After following these steps, you will be able to write programs that use the Microsoft Kinect through OpenNI and NITE middleware. I hope this helps someone, because I spent a lot of time screwing around this morning trying to get it all to work. Like I said, the process is pretty straight forward, it just hasn&#8217;t been written down in one place (or I suck at google).</p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-9376349336558898";
google_ad_slot = "0815367707";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/programming/kinect-on-ubuntu-with-openni/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Git Tutorial 4 &#8211; Rebase vs. Merge</title>
		<link>http://www.20papercups.net/tutorials/git-tutorial-4-rebase-vs-merge/</link>
		<comments>http://www.20papercups.net/tutorials/git-tutorial-4-rebase-vs-merge/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 22:29:51 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Git Video Tutorials]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[pull]]></category>
		<category><![CDATA[rebase]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=349</guid>
		<description><![CDATA[After over a year, here&#8217;s the next instalment of my Git tutorial! In this video we look at the difference between rebasing and pulling from remote repositories. Sorry it took so long! &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.20papercups.net/wp-content/uploads/2011/03/git-logo.png"><img src="http://www.20papercups.net/wp-content/uploads/2011/03/git-logo-150x150.png" alt="" title="git-logo" width="150" height="150" class="alignleft size-thumbnail wp-image-354" /></a>After over a year, here&#8217;s the next instalment of my Git tutorial! In this video we look at the difference between rebasing and pulling from remote repositories. Sorry it took so long!<br />
<span id="more-349"></span><br />
&nbsp;<br />
<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/Ss7oAh0Vi_8" frameborder="0" allowfullscreen></iframe><br />
&nbsp;</p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-9376349336558898";
google_ad_slot = "0815367707";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/tutorials/git-tutorial-4-rebase-vs-merge/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What I think of Ubuntu 10.4</title>
		<link>http://www.20papercups.net/linux/what-i-think-of-ubuntu-10-4/</link>
		<comments>http://www.20papercups.net/linux/what-i-think-of-ubuntu-10-4/#comments</comments>
		<pubDate>Mon, 24 May 2010 13:24:07 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bugs]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=327</guid>
		<description><![CDATA[I&#8217;ve been using Ubuntu since the 6.06 beta. It is my main operating system on my desktop at home, computer in the lab, and my laptop. Normally, I do distribution upgrades. This shields me from a lot of the changes happening around me; the user experience doesn&#8217;t change that much when I&#8217;ve already got everything [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.20papercups.net/wp-content/uploads/2010/05/Ubuntu-logo.gif"><img class="alignleft size-thumbnail wp-image-328" title="Ubuntu-logo" src="http://www.20papercups.net/wp-content/uploads/2010/05/Ubuntu-logo-150x150.gif" alt="" width="124" height="124" /></a>I&#8217;ve been using Ubuntu since the 6.06 beta. It is my main operating system on my desktop at home, computer in the lab, and my laptop. Normally, I do distribution upgrades. This shields me from a lot of the changes happening around me; the user experience doesn&#8217;t change that much when I&#8217;ve already got everything setup how I want. However, I just had to do a fresh install on my desktop. While my home directory is backed up, I am currently looking at a default user desktop. So, what do I think?<span id="more-327"></span></p>
<p>To be honest, I am not all that impressed with 10.4. Why you ask?</p>
<h3>Font rendering in Firefox is broken</h3>
<p>The first thing I notice with fresh Linux distribution is both the choice of default fonts, and the default font rendering. This is no problem, Gnome&#8217;s appearance dialog lets me easily configure anti-aliasing and sub-pixel smoothing how I want. There&#8217;s just one problem: Firefox completely ignores these settings!</p>
<p>To be more specific, it ignores the font smoothing settings and does it&#8217;s own, dog ugly version. There is a bug report for this <a href="https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/559149">here</a>. By the looks of things, there is a workaround, but I haven&#8217;t tried that yet. The workaround involves removing config files in /etc, and running a console command to reconfigure fontconfig.</p>
<p>This is a ridiculous oversight when Firefox is one of the flagship applications shipping with Ubuntu.</p>
<h3>Update Manager thinks it&#8217;s the most important app on the system</h3>
<p>This technically was introduced in an earlier version, I&#8217;m just surprised they haven&#8217;t changed the default behaviour by now. See, Update Manager pops up it&#8217;s main window if it finds updates it thinks you should install, on top of whatever you happen to be doing. This is both intrusive, and annoying. I don&#8217;t have any data, but I&#8217;m willing to bet users are more likely to dismiss the dialog instead of installing updates when it gets in their way.</p>
<p>This is a similar problem with Windows deciding it needs to reboot after an update, nomatter what you think to the contrary. I understand the Ubuntu devs are worried that the bright red icon in the notification area isn&#8217;t enough to get people to click. However, putting it in their face is even worse, as Windows has shown with the Cancel/Allow UAC dialogs. People don&#8217;t read dialogs! A much better solution would be to put the lovely new notification system to use. Just a subtle notification message every 10 minutes or whatever would be much more affective, without getting in everyone&#8217;s way.</p>
<h3>Nautilus&#8217;s Address Bar is missing!</h3>
<p>What the hell!? Stop with this Apple induced breadcrumb navigation nonsense. I want to type a path into an address bar. In previous versions of Ubuntu, there was a button to toggle between breadcrumbs and textual address bar. In 10.4, that button is gone. The only solution is to enter the following into a console:</p>
<pre>
<pre><code>gconftool-2 --type=Boolean --set /apps/nautilus/preferences/always_use_location_entry true</code></pre>
</pre>
<p>Of course, you need to enter a similar command to get back to breadcrumbs. Here&#8217;s what I really don&#8217;t understand: Ubuntu is a distribution that specifically tries to remove the need to go to the command prompt. By removing a single toggle button, they have removed the ability to enter paths directly, something that most of the people migrating to Ubuntu (Windows users) have always been able to do. Just put the button back.</p>
<h3>My iPod doesn&#8217;t show up in Banshee</h3>
<p>Arg! I&#8217;ve been having this problem intermittently for a while. I also admit that Banshee isn&#8217;t a program installed by default. But I don&#8217;t like Rhythmbox, and would really like Banshee to work again.</p>
<h3>Window controls on the left</h3>
<p>I hate this on Macs, and I hate it here too. Please give an easy option in Appearance Properties to flip the location of the buttons. Luckily, New Wave, my theme of choice still has the controls on the right.</p>
<h3>The mish-mash 10.4 theme</h3>
<p>I <em>love</em> the look of Ubuntu in 9.10. The grey was a cool getaway from the orange. 10.4 kind of builds on this, and in other ways pulls it in another direction. Now there&#8217;s added purple!. The login screen is the ugliest Ubuntu login screen ever. The default Ubuntu theme seems to be a mashup of three different themes: The cool black stuff from 9.10, the new purple stuff, and the old orange Human theme. Pick one, and refine it please.</p>
<h3>Still need to open gconf-editor to get Computer, Home, Trash icons on desktop</h3>
<p>If you aren&#8217;t familiar with gconf-editor, it is basically regedit for all of Gnome&#8217;s settings. Apparently in Ubuntu 10.4, you still need to use this to get icons such as Computer, Home, and Trash to appear on the desktop. This is incredibly confusing to new people (I just happened to remember what keys needed to be set). In my opinion, opening gconf-editor is worse than using the console, something the Ubuntu UI guys are dead against.</p>
<p>While we&#8217;re on the topic, the way you change the massive icon size on the desktop is to edit the <em>Default Zoom Level</em> in Nautilus&#8217;s settings. This is also incredibly unintuitive.</p>
<h3>Is there anything good?</h3>
<p>I like getting new versions of all the programs I use every day. Again, Ubuntu 10.4 doesn&#8217;t disappoint here. Everything is nice and fresh. There&#8217;s nothing really surprising here.</p>
<h3>Conclusion</h3>
<p>This is my least favourite default Ubuntu install since 6.06. I feel some of these things are so obvious it&#8217;s almost strange mentioning them. I&#8217;ll again point out that Ubuntu is my OS of choice for <em>actually getting work done</em>. I have a Windows virtual machine for the sole purpose of running Office and Photoshop. I use Ubuntu every day, and really want to see it get better. I speak up, because I care. So with that, please keep the flaming to a minimum, and sorry about the rant.</p>
<p>Michael</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/linux/what-i-think-of-ubuntu-10-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Git Tutorial 03 &#8211; Pushing &amp; Pulling</title>
		<link>http://www.20papercups.net/tutorials/git-vtm03-pushing-pulling/</link>
		<comments>http://www.20papercups.net/tutorials/git-vtm03-pushing-pulling/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 09:06:51 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Git Video Tutorials]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=174</guid>
		<description><![CDATA[In the last video, we just looked at adding files and commiting changes. This is great, but remember that in Git, commits are local. In this video we look at how we can set up remote repositories that we can push data to, either to use as backups, or for sharing with others. Note that [...]]]></description>
			<content:encoded><![CDATA[<p>In the last video, we just looked at adding files and commiting changes. This is great, but remember that in Git, commits are local. In this video we look at how we can set up remote repositories that we can push data to, either to use as backups, or for sharing with others.<span id="more-174"></span></p>
<p style="text-align: center;"><img src="http://www.20papercups.net/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<p style="text-align: left;">Note that this video is 640&#215;480, so hit the full screen button to get more readable detail.</p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-9376349336558898";
google_ad_slot = "0815367707";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p style="text-align: left;"><strong>Notes</strong></p>
<p style="text-align: left;">I cannot believe I messed up the remote path that many times! I am sorry about that. Of course, the side effect is you learnt how to both add and remove remotes. So yeah&#8230; I did that on purpose.</p>
<p style="text-align: left;">At this point, we can create a project or join an existing one. We can add files and commit changes. We can push our changes to remotes, and fetch changes that other people have made. This is all great. However, we haven&#8217;t touched on one of Git&#8217;s most powerful features. I am of course talking about branching and merging. This will be the priority for the next video.</p>
<p style="text-align: left;">Again, any feedback is much appreciated.</p>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/tutorials/git-vtm03-pushing-pulling/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Git Tutorial 02 &#8211; The basics</title>
		<link>http://www.20papercups.net/tutorials/git-vtm02-the-basics/</link>
		<comments>http://www.20papercups.net/tutorials/git-vtm02-the-basics/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 08:59:45 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Git Video Tutorials]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[vtm]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=172</guid>
		<description><![CDATA[This video hits up the terminal and starts using git. We start by creating a git repository, which is super easy with Git. Then, we look at adding files to the repository, and commiting changes. Note that this video is 640&#215;480, so hit the full screen button to get more readable detail. Notes In this [...]]]></description>
			<content:encoded><![CDATA[<p>This video hits up the terminal and starts using git. We start by creating a git repository, which is super easy with Git. Then, we look at adding files to the repository, and commiting changes. <span id="more-172"></span></p>
<p style="text-align: center;"><img src="http://www.20papercups.net/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<p style="text-align: left;">Note that this video is 640&#215;480, so hit the full screen button to get more readable detail.</p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-9376349336558898";
google_ad_slot = "0815367707";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p style="text-align: left;"><strong>Notes</strong></p>
<p style="text-align: left;">In this video, I specifically create a project using:</p>
<pre>git init</pre>
<p>. If you are working on your own projects, this is how you will work. However, a lot of the time you will be starting work on an already existing project. In this case, you don&#8217;t create a new repo using git init, instead you <em>clone</em> an already existing repository. The basic is this:</p>
<pre>git clone path/to/repository</pre>
<p>I will cover this in a later video, but I think it is important enough to mention here.</p>
<p>Another thing that I could have covered in more detail is the staging area. There is actually a lot more that you can do with it than I mentioned in this video. However, that will come later. For the first 3 videos (at least) I want to just get the basics down.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/tutorials/git-vtm02-the-basics/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Git Tutorial 01 &#8211; What is Git</title>
		<link>http://www.20papercups.net/tutorials/git-vtm01-what-is-git/</link>
		<comments>http://www.20papercups.net/tutorials/git-vtm01-what-is-git/#comments</comments>
		<pubDate>Sat, 28 Mar 2009 08:52:01 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Git Video Tutorials]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[vtm]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=169</guid>
		<description><![CDATA[In this video I give a brief introduction to the Git Version Control System. Note that this video is 640&#215;480, so hit the full screen button to get more readable detail. Notes Git is a distributed version control system, originally written by Linus Torvalds for Linux Kernel development. It is Free and Open Source software. [...]]]></description>
			<content:encoded><![CDATA[<p>In this video I give a brief introduction to the Git Version Control System. <span id="more-169"></span></p>
<p style="text-align: center;"><img src="http://www.20papercups.net/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<p style="text-align: left;">Note that this video is 640&#215;480, so hit the full screen button to get more readable detail.</p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-9376349336558898";
google_ad_slot = "0815367707";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p style="text-align: left;"><strong>Notes</strong></p>
<p>Git is a distributed version control system, originally written by Linus Torvalds for Linux Kernel development. It is Free and Open Source software. You can get it for Linux, Mac and Windows (either native or cygwin). There are also plugins for Eclipse, etc, so you don&#8217;t have to work from a terminal like me.</p>
<p style="text-align: left;">This video just tries to convey what makes working with a distributed version control system different and better. Nothing too strenuous just yet. If you are a Git guru, I am aware that I am glossing over some details in this video. This is intentional, and I hope to cover some of these details in later videos, or at least in the accompanying text. Still, I welcome any and all feedback and suggestions.</p>
<p style="text-align: left;">Also, I apologise in advanced for my terrible tablet handwriting skills.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/tutorials/git-vtm01-what-is-git/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Shameless Plug: Martin&#8217;s Linux VTMs</title>
		<link>http://www.20papercups.net/linux/shameless-plug-linux-vtms/</link>
		<comments>http://www.20papercups.net/linux/shameless-plug-linux-vtms/#comments</comments>
		<pubDate>Wed, 31 Dec 2008 00:24:38 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[vtm]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=156</guid>
		<description><![CDATA[Hey everyone, hope you are enjoying the holidays! Anyway, today I thought I would distract everyone from my lack of videos by pointing you to some videos made by someone else. And so I present: Martin&#8217;s Linux VTM. These videos are aimed at the Linux beginner, but they very quickly get into great depth. I [...]]]></description>
			<content:encoded><![CDATA[<p>Hey everyone, hope you are enjoying the holidays!</p>
<p>Anyway, today I thought I would distract everyone from my lack of videos by pointing you to some videos made by someone else. And so I present: <strong><a href="http://www.hatchlane.com/blog/?p=8" target="_blank">Martin&#8217;s Linux VTM.</a></strong></p>
<p><strong><a href="http://www.hatchlane.com/blog/?p=8" target="_blank"></a></strong><span id="more-156"></span></p>
<p>These videos are aimed at the Linux beginner, but they very quickly get into great depth. I am still getting my head around some of the more advanced Bash scripting videos. There is actually two releases of videos, so here are the links:</p>
<p><a href="http://www.hatchlane.com/blog/?p=8" target="_blank">Release 1</a></p>
<p><a href="http://www.hatchlane.com/blog/?p=9" target="_blank">Release 2</a></p>
<p>Enjoy!</p>
<p>Michael</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/linux/shameless-plug-linux-vtms/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

