<?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>Matt Cutts: Gadgets, Google, and SEO &#187; Linux/Ubuntu</title>
	<atom:link href="http://www.mattcutts.com/blog/type/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mattcutts.com/blog</link>
	<description>neat fun stuff</description>
	<lastBuildDate>Mon, 13 May 2013 16:17:12 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Compile a simple USB program in Linux</title>
		<link>http://www.mattcutts.com/blog/compile-a-simple-usb-program-in-linux/</link>
		<comments>http://www.mattcutts.com/blog/compile-a-simple-usb-program-in-linux/#comments</comments>
		<pubDate>Mon, 13 May 2013 06:39:27 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[Linux/Ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=897</guid>
		<description><![CDATA[Here&#8217;s another &#8220;hairball&#8221; post about USB devices and drivers on Linux. I wish some expert would write the definitive &#8220;here&#8217;s how to reverse-engineer a USB device and write a new USB driver&#8221; guide. I am definitely not that expert. Once you reverse engineer a Windows USB device enough to know how it works, you&#8217;re ready [...]]]></description>
				<content:encoded><![CDATA[<p><em>Here&#8217;s another &#8220;hairball&#8221; post about USB devices and drivers on Linux. I wish some expert would write the definitive &#8220;here&#8217;s how to reverse-engineer a USB device and write a new USB driver&#8221; guide. I am definitely not that expert.<br />
</em></p>
<p>Once you <a href="http://www.mattcutts.com/blog/reverse-engineering-a-windows-usb-driver/">reverse engineer a Windows USB device</a> enough to know how it works, you&#8217;re ready to try talking to the device under Linux. Here are a few tips.</p>
<p>lsusb to list devices from a command-line.</p>
<p>On Ubuntu 7.10, usbview (use &#8220;sudo apt-get install usbview&#8221; to install it) is broken. It says &#8220;Can not open the file /proc/bus/usb/devices  Verify that you have USB compiled into your kernel, have the USB core modules loaded, and have the usbdevfs filesystem mounted.&#8221; It turns out that <a href="https://bugs.launchpad.net/ubuntu/+source/virtualbox/+bug/151585/comments/3">Ubuntu decided to drop support for /proc/bus/usb devices</a>. You can still find USB devices under /dev/bus/usb/ on Ubuntu, but they are special binary files.</p>
<p>usbmon is a Linux kernel module that lets you monitor USB events: http://people.redhat.com/zaitcev/linux/OLS05_zaitcev.pdf . The text file format is pretty terse (see the PDF for some details), but if you&#8217;ve installed Linux kernel source code, check Documentation/usb/usbmon.txt for more info. Note that USBMon is a tool with a graphical user interface (GUI) that is based on usbmon. I believe that usbmon operates by using instrumentation hooks in the usbcore Linux kernel module. usbmon normally outputs only text, although Eric Preston reported adding a binary interface to usbmon.</p>
<p>You can trace how talking to a USB device under Linux has gotten easier over the years by reading the sequence of articles that <a href="http://www.kroah.com/linux/">Greg Kroah-Hartman</a> has written for <a href="http://www.linuxjournal.com/">Linux Journal</a> over the years. Let&#8217;s examine a few of the articles:</p>
<p>October 2001: <a href="http://www.linuxjournal.com/article/4786">How to Write a Linux USB Device Driver</a>. Greg walks through nitty gritty details for using a program usb-skeleton.c that he wrote. Aspiring writers of drivers have to learn quite a bit of kernel hacking.</p>
<p>April 2004: <a href="http://www.linuxjournal.com/article/7353">Writing a Simple USB Driver</a>. Greg writes a simple driver for a USB lamp. The driver still sits in kernel space, but exposes some functionality to the user through sysfs. What the heck is sysfs? According to the <a href="http://en.wikipedia.org/wiki/Sysfs">Wikipedia page</a>, &#8220;Sysfs is a virtual file system provided by the 2.6 Linux kernel and it replaced the old deprecated devfs which use in 2.4 series of stable kernels. Sysfs exports information about devices and drivers from the kernel device model to userspace, and is also used for configuration.&#8221; Pretty handy. This article is also notable because Greg mentions a couple ways to reverse-engineer an unknown USB protocol: 1) sniff the USB events with Windows software such as <a href="http://sourceforge.net/projects/usbsnoop/">SnoopyPro</a>, or 2) run Windows on top of Linux using virtualization software such as VMWare. When you plug in a USB device, VMWare can make the device available to the Windows instance. Windows happily talks with the USB device, unaware that because Linux is sitting between Windows and the USB device, Linux gets to see (and can dump) all the communication that is happening between Windows and the USB device.</p>
<p>June 2004: <a href="http://www.linuxjournal.com/article/7466">Writing a Real Driver &#8212; In User Space</a>. Greg has now left the kernel behind for the ease of talking to a USB device from user space. This article covers three things that make like easier.</p>
<p>1. usbfs. Originally called usbdevfs, usbfs is a way for user space programs to read/write data to USB devices. The method of talking to the USB devices are ioctl (&#8220;input/output control&#8221;) function calls to special files, where each file represents a USB device. If you&#8217;ve use ioctl before, you&#8217;ll know that this is still a pretty down-to-the-metal way to talk to hardware.</p>
<p>2. libusb. This is where life really starts to get good. libusb is a library radically simplifies talking to USB devices. Even better, it runs on many types of UNIX besides Linux (including Mac OS X). You can read the <a href="http://libusb.sourceforge.net/doc/index.html">official libusb documentation</a>, but it lacks a good &#8220;talk to a simple device&#8221; example. I also enjoyed this <a href="http://www.linuxforums.org/forum/linux-tutorials-howtos-reference-material/10865-developing-usb-device-drivers-userspace-using-libusb.html">overview of libusb</a>.</p>
<p>3. Example source code. Is there anything better when you&#8217;re delving into a new library than example source code? Greg gives a short program that echoes his previous article. In just a few lines of code, he shows how to turn on an LED in a USB lamp.</p>
<p>There are a couple wrinkles with the sample code. First, there are at least a few errors in the code on the Linux Journal website. A C programmer can look at code like</p>
<p><code><br />
    usb_handle = usb_open(usb_dev);<br />
    if (usb_handle == NULL) {<br />
        fprintf(stderr,<br />
        goto exit;<br />
    }<br />
    usb_handle = usb_open(usb_dev);<br />
    if (usb_handle == NULL) {<br />
        fprintf(stderr, "Not able to claim the USB device\n");<br />
        goto exit;<br />
    }<br />
</code></p>
<p>and say &#8220;Hmm. That first fprintf doesn&#8217;t have a closing parenthesis. For that matter, why call usb_open() twice and overwrite usb_handle the second time?&#8221; So something got scrambled in the code listing. I recommend checking out this <a href="http://csourcesearch.net/data/package/avusbradio/avermedia_usbradio-0.1/usbradio.c">simple usbradio program</a> as another short example of how to use libusb. </p>
<p>Second, Greg doesn&#8217;t really say how to compile the program. On Ubuntu 7.10 (Gutsy Gibbon), I had to install a few packages. I think I had to do &#8220;sudo apt-get install gcc build-essential libusb-dev&#8221; to get everything I needed. Then if your program is called talk-to-usb.c, you would compile the program with &#8220;gcc -o talk-to-usb talk-to-usb.c -lusb&#8221;. (The &#8220;-lusb&#8221; tells the compiler to use the libusb library when linking in code.)</p>
<p>August 2004: <a href="http://www.linuxjournal.com/article/7582">Snooping the USB Data Stream</a>. This is a really fascinating article. Greg is given an unknown USB device and told to make it work on Linux. It turns out to be a crypto key and comes with working Linux code &#8212; but the license prohibits Greg from using the USB device as freely as he would like. This puts Greg back in the position of reverse-engineering a USB protocol. In the same way that Windows-running-atop-Linux-in-VMWare provides a way to monitor USB communication that takes place in usbfs, adding usbfs logging to Linux helps to see what commands are being sent from the too-restrictive Linux library for this USB device.</p>
<p>If you understood that last sentence, congratulations for paying such close attention. <img src='http://www.mattcutts.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  To continue, Greg walks the reader through a patch to the kernel to enable kernel-based logging of any USB communication through usbfs. He even adds a variable (controllable through sysfs) so that users can turn this USB logging on and off at will. </p>
<p>At this point (looking on the web, not in the kernel source), I noticed several reports of additional USB logging in Linux. There was <a href="http://www.linuxjournal.com/article/7582">Greg&#8217;s article</a>. There&#8217;s <a href="http://www.mjmwired.net/kernel/Documentation/usb/usbmon.txt">usbmon</a>, which is &#8220;a facility in kernel which is used to collect traces of I/O on the USB bus.&#8221; I noticed a patch by Paolo Abeni to <a href="http://lwn.net/Articles/203864/">add binary dumps</a> to usbmon. Both usbmon and Paolo&#8217;s patch utilize <a href="http://kerneltrap.org/node/4394">debugfs</a>, which is another Greg Kroah-Hartman invention to allow reading/writing of data to user space, especially debugging/binary data. As Greg puts it, &#8220;one line of code and you have a variable that can be read and written to from userspace.&#8221; And Eric Preston evidently added binary dumping of USB data to Linux as well, and then <a href="http://www.linux.com/feature/55910">started a USB protocol dissector</a> to view USB communication in ethereal/Wireshark, which normally is used to sniff on network communication.</p>
<p>Now we&#8217;ve gotten a lot of background, so we&#8217;re ready to look at an example actually monitoring USB communication in Linux. The best write-up I&#8217;ve seen is this one on <a href="http://www.quietearth.us/articles/2006/10/16/USB-Snoop-in-linux">USB snooping on Linux</a>. It&#8217;s a little over a year old, but check out one of the comments:</p>
<blockquote><p>
The cool thing I have spotted is that the debugfs and usbmon module is already present under ubuntu. You will not need to compile or configure the kernel, just mount the debugfs, load the usbmon module, and the usbmon directory should appear under the /sys/kernel/debug directory.
</p></blockquote>
<p>That means that a stock Ubuntu 7.10 (Gutsy Gibbon) install can just run these commands:</p>
<blockquote><p>
sudo mount -t debugfs none_debugs /sys/kernel/debug<br />
sudo modprobe usbmon<br />
ls -l /sys/kernel/debug/usbmon/<br />
total 0<br />
-rw&#8212;&#8212;- 1 root root 0 2008-02-17 00:59 0s<br />
-rw&#8212;&#8212;- 1 root root 0 2008-02-17 00:59 0t<br />
-rw&#8212;&#8212;- 1 root root 0 2008-02-17 00:59 0u<br />
-rw&#8212;&#8212;- 1 root root 0 2008-02-17 00:59 1s<br />
-rw&#8212;&#8212;- 1 root root 0 2008-02-17 00:59 1t<br />
-rw&#8212;&#8212;- 1 root root 0 2008-02-17 00:59 1u<br />
-rw&#8212;&#8212;- 1 root root 0 2008-02-17 00:59 2s<br />
-rw&#8212;&#8212;- 1 root root 0 2008-02-17 00:59 2t<br />
-rw&#8212;&#8212;- 1 root root 0 2008-02-17 00:59 2u
</p></blockquote>
<p>After that, you&#8217;re ready to cat those files, exercise the USB device, and observe the resulting USB traces to figure out what commands and data passed back and forth. In case you&#8217;re wondering, the filenames seem to be a number (0,1,2) followed by a letter (s,t,u). According to the <a href="http://www.mjmwired.net/kernel/Documentation/usb/usbmon.txt">usbmon documentation</a>, the number corresponds to the bus numbers of the USB devices. The documentation also mentions that the &#8216;u&#8217; files are a superset of the &#8216;t&#8217; files with more detailed information. I don&#8217;t know what the &#8216;s&#8217; files are.</p>
<p>Just as an aside, it looks like <a href="https://bugs.launchpad.net/virtualbox/+bug/156085">/proc/bus/usb/ is deprecated in Ubuntu 7.10</a> and is being replaced with /dev/bus/usb. Unfortunately, that breaks a few programs (usbview, virtualbox, and qemu). Instead of usbview, you can use lsusb to find the particulars of a specific USB device. Unfortunately, it sounds like /proc/bus/usb/devices is going away entirely, which is a shame because the file was easy-to-read for regular users. The bug report I linked to gives a workaround if you really want that file.</p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/compile-a-simple-usb-program-in-linux/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/compile-a-simple-usb-program-in-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to strip JPEG metadata in Ubuntu</title>
		<link>http://www.mattcutts.com/blog/howto-strip-jpeg-metadata/</link>
		<comments>http://www.mattcutts.com/blog/howto-strip-jpeg-metadata/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 08:02:27 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[How to]]></category>
		<category><![CDATA[Linux/Ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=4431</guid>
		<description><![CDATA[If you want to post some JPEG pictures but you&#8217;re worried that they might have metadata like location embedded in them, here&#8217;s how to strip that data out. First, install exiftool using this command: sudo apt-get install libimage-exiftool-perl Then, go into the directory with the JPEG files. If you want to remove metadata from every [...]]]></description>
				<content:encoded><![CDATA[<p>If you want to post some JPEG pictures but you&#8217;re worried that they might have metadata like location embedded in them, here&#8217;s how to strip that data out.</p>
<p>First, install exiftool using this command:</p>
<p><code>sudo apt-get install libimage-exiftool-perl</code></p>
<p>Then, go into the directory with the JPEG files. If you want to remove metadata from every file in the directory, use</p>
<p><code>exiftool -all= *.jpg</code></p>
<p>The exiftool will make copies, so if you had a file called image.jpg, when you&#8217;re done you&#8217;ll have image.jpg with all the metadata stripped plus a file called image.jpg_original which will still have the metadata.</p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/howto-strip-jpeg-metadata/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/howto-strip-jpeg-metadata/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Announcing the winners of the Kinect contest</title>
		<link>http://www.mattcutts.com/blog/kinect-contest-winners/</link>
		<comments>http://www.mattcutts.com/blog/kinect-contest-winners/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 22:42:25 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Gadgets/Hack]]></category>
		<category><![CDATA[Linux/Ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=4689</guid>
		<description><![CDATA[When the Kinect launched, Adafruit Industries ran a contest for the first person who released open-source code to extract video and depth from the Kinect. Adafruit also ended up donating to the EFF after the contest was over. When I was in grad school, I would have loved to have a device like the Kinect. [...]]]></description>
				<content:encoded><![CDATA[<p>When the <a href="http://www.xbox.com/en-US/kinect">Kinect</a> launched, Adafruit Industries ran a <a href="http://www.adafruit.com/blog/2010/11/04/the-open-kinect-project-the-ok-prize-get-1000-bounty-for-kinect-for-xbox-360-open-source-drivers/">contest for the first person who released open-source code</a> to extract video and depth from the Kinect. Adafruit also ended up <a href="http://www.adafruit.com/blog/2010/11/10/we-have-a-winner-open-kinect-drivers-released-winner-will-use-3k-for-more-hacking-plus-an-additional-2k-goes-to-the-eff/">donating to the EFF</a> after the contest was over.</p>
<p>When I was in grad school, I would have loved to have a device like the Kinect. So I <a href="http://www.mattcutts.com/blog/open-kinect-contest/">decided to run my own contest</a>:</p>
<blockquote><p>
The first $1000 prize goes to the person or team that writes the coolest open-source app, demo, or program using the Kinect. The second prize goes to the person or team that does the most to make it easy to write programs that use the Kinect on Linux.
</p></blockquote>
<p>It&#8217;s time to announce the prize winners. There&#8217;s been so many cool things going on with the Kinect that instead of two winners, I ended up declaring seven $1000 winners.</p>
<p><strong>Open-source Application or Demo</strong></p>
<p>I picked two winners in this category. </p>
<ul>
<li><a href="http://twitter.com/#!/tomoto335">Tomoto Washio</a> for <a href="http://code.google.com/p/kinect-ultra/">Kinect Ultra Seven</a>. This program lets you transform into <a href="http://en.wikipedia.org/wiki/Ultra_Seven">Ultra Seven</a> with lots of different powers. It&#8217;s a really fun demo&#8211;check out the <a href="http://code.google.com/p/kinect-ultra/">videos</a>:<br />
<object width="640" height="390"><param name="movie" value="http://www.youtube.com/v/RUG-Uvq-J-w&#038;rel=0&#038;hl=en_US&#038;feature=player_embedded&#038;version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/RUG-Uvq-J-w&#038;rel=0&#038;hl=en_US&#038;feature=player_embedded&#038;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"></embed></object></li>
<li><a href="http://technofetishist.info/">Tiago Serra</a> and the <a href="http://www.sensebloom.com/">SenseBloom team</a> for <a href="http://www.vimeo.com/17966780">XBox Kinect OSCeleton</a>. The application sends 3D tracked body skeletons through the OSC protocol. Essentially, it’s a do-it-yourself motion capture system:<br />
<iframe src="http://player.vimeo.com/video/17966780" width="640" height="390" frameborder="0"></iframe></li>
</ul>
<p><strong>People that have made it easier to write programs for the Kinect</strong></p>
<p>A ton of people have made the Kinect more accessible on Linux or helped the Kinect community. I ended up picking five winners.</p>
<ul>
<li><a href="http://marcansoft.com/blog/">Hector Martin</a></li>
<li><a href="http://sourceforge.net/users/arneb/">Arne Bernin</a></li>
<li><a href="http://www.nonpolynomial.com/">Kyle Machulis</a> </li>
<li><a href="http://brandynwhite.com/">Brandyn White</a></li>
<li><a href="http://nui.joshland.org/">Joshua Blake</a></li>
</ul>
<p>All of these individuals pushed things forward so others can develop great programs on the Kinect more easily. Congratulations to all the winners, and to everyone doing neat things with their Kinect!</p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/kinect-contest-winners/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/kinect-contest-winners/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Open Kinect Contest: $2000 in prizes</title>
		<link>http://www.mattcutts.com/blog/open-kinect-contest/</link>
		<comments>http://www.mattcutts.com/blog/open-kinect-contest/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 17:41:07 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Gadgets/Hack]]></category>
		<category><![CDATA[Linux/Ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=4442</guid>
		<description><![CDATA[I&#8217;m starting a contest for people that do cool things with a Kinect. See the details below. Before I joined Google, I was a grad student interested in topics like computer vision, motion self-tracking, laser scanners&#8211;basically any neat or unusual sensing device. That&#8217;s why I was so excited to hear about the Kinect, which is [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m starting a contest for people that do cool things with a Kinect. See the details below.</p>
<p><center><img src="http://www.mattcutts.com/images/open-kinect.jpg" alt="Open Kinect Logo" /></center></p>
<p>Before I joined Google, I was a grad student interested in topics like computer vision, motion self-tracking, laser scanners&#8211;basically any neat or unusual sensing device. That&#8217;s why I was so excited to hear about the <a href="http://en.wikipedia.org/wiki/Kinect">Kinect</a>, which is a low-cost ($150) peripheral for the <a href="http://www.xbox.com/">Xbox</a>. The output from a Kinect includes:<br />
- a 640&#215;480 color video stream.<br />
- a 320&#215;240 <strong>depth</strong> stream. Depth is recovered by projecting invisible infrared (IR) dots into a room. You should watch this <a href="http://www.youtube.com/watch?v=nvvQJxgykcU">cool video to see how the Kinect projects IR dots across a room</a>. Here&#8217;s a single frame from the video:<br />
<center><img src="http://www.mattcutts.com/images/ir-projection.jpg" alt="IR Projection" /></center><br />
but you should really watch the whole video to get a feel for what the Kinect is doing.<br />
- the Kinect has a 3-axis accelerometer.<br />
- the Kinect also has a controllable motor to tilt up and down plus four microphones.</p>
<p>What&#8217;s even better is that people have figured out how to access data from the Kinect without requiring an Xbox to go with it. In fact, <a href="http://www.adafruit.com/blog/2010/11/10/we-have-a-winner-open-kinect-drivers-released-winner-will-use-3k-for-more-hacking-plus-an-additional-2k-goes-to-the-eff/">open drivers for the Kinect have now been released</a>. The always-cool <a href="http://www.adafruit.com/">Adafruit Industries</a>, which offers all sorts of excellent do-it-yourself electronics kits, sponsored a <a href="http://www.adafruit.com/blog/2010/11/04/the-open-kinect-project-the-ok-prize-get-1000-bounty-for-kinect-for-xbox-360-open-source-drivers/">contest to produce open-source drivers for the Kinect</a>:</p>
<blockquote><p>First person / group to get RGB out with distance values being used wins, you’re smart – you know what would be useful for the community out there. All the code needs to be open source and/or public domain.</p></blockquote>
<p>Sure enough, within a few days, the contest was won by <a href="http://marcansoft.com/blog/">Héctor Martín Cantero</a>, who is actually rolling his reward into tools and devices for fellow white-hat hackers and reverse engineers that he works with, which is a great gesture. Okay, so where are we now? If I were still in grad school, I&#8217;d be incredibly excited&#8211;there&#8217;s now a $150 off-the-shelf device that provides depth + stereo and a lot more.</p>
<p><strong>It&#8217;s time for a new contest</strong></p>
<p>I want to kickstart neat projects, so I&#8217;m starting my own contest with $2000 in prizes. There are two $1000 prizes. The first $1000 prize goes to the person or team that writes the coolest open-source app, demo, or program using the Kinect. The second prize goes to the person or team that does the most to make it easy to write programs that use the Kinect on Linux.</p>
<p>Enter the contests by leaving a comment on this blog post with a link to your project, along with a very-short description of what your project does or your contribution to Kinect hacking. The contest runs until the end of the year: that&#8217;s Dec. 31st, 2010 at midnight Pacific time. I may ask for outside input on who should be the winner, but I&#8217;ll make the final call on who wins.</p>
<p>To get your ideas flowing, I&#8217;ll offer a few suggestions. Let&#8217;s start with the second contest: making the Kinect more accessible. In my ideal world, would-be hackers would type a single command-line, e.g. &#8220;sudo apt-get install openkinect&#8221; and after that command finishes, several tools for the Kinect would be installed. Maybe a &#8220;Kinect snapshot&#8221; program that dumps a picture, a depth map, and the accelerometer values to a few files. Probably some sort of openkinect library plus header files so that people can write their own Kinect programs. I would *love* some bindings to a high-level language like Python so that would-be hobbyists can write 3-4 lines of python (&#8220;import openkinect&#8221;) and start trying ideas with minimal fuss. To win the second contest, you could write any of these libraries, utilities, bindings or simplify installing them on recent versions of Linux/Ubuntu (let&#8217;s say 10.04 or greater).</p>
<p>Okay, how about some ideas for cool things to do with a Kinect? I&#8217;ll throw out a few to get you thinking.</p>
<p><strong>Idea 1</strong>: A <a href="http://images.google.com/images?q=minority+report+ui">Minority Report-style user interface</a> where you can open, move, and close windows with your movements.</p>
<p><strong>Idea 2</strong>: What if you move the Kinect around or mount it to something that moves? The Kinect has an accelerometer plus depth sensing plus video. That might be enough to reconstruct the position and pose of the Kinect as you move it around. As a side benefit, you might end up reconstructing a 3D model of your surroundings as a byproduct. The folks at UNC-Chapel Hill where I went to grad school built a <a href="http://www.cs.unc.edu/~tracker/">wide-area self-tracker</a> that relied on a <a href="http://www.cs.unc.edu/~welch/kalman/">Kalman filter</a> to estimate a person&#8217;s position and pose. See this <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.46.5550&#038;rep=rep1&#038;type=pdf">PDF paper</a> for example.</p>
<p><strong>Idea 3</strong>: Augmented reality. Given a video stream plus depth, look for discontinuities in depth to get a sort of 2.5 dimensional representation of a scene with layers. Then add new features into the video stream, e.g. a bouncing ball that goes between you and the couch, or behind the couch. The pictures at the end of <a href="http://research.microsoft.com/pubs/75684/Szeliski-Multimedia99.pdf">this PDF paper</a> should get you thinking.</p>
<p><strong>Idea 4</strong>: Space carver. Like the previous idea, but instead of learning the 2.5D layers of a scene from a singe depth map, use the depth map over time. For example, think about a person walking behind a couch. When you can see the whole person, you can estimate how big they are. When they walk behind the couch, they&#8217;re still just as big, so you can guess that the couch is occluding that person and therefore the couch is in front of the person. Over time, you could build up much more accurate discontinuities and layers for a scene by watching who walks behind or in front of what.</p>
<p><strong>Idea 5</strong>: A 3D Hough transform. A vanilla Hough transform takes a 2D image, looks for edges in the image, and then runs some computation to <a href="http://www.google.com/images?q=hough+transform+lines">determine lines in the image</a>. A <a href="http://en.wikipedia.org/wiki/Hough_transform#Detection_of_3D_objects_.28Planes_and_cylinders.29">3D Hough transform</a> finds planes in range data. I&#8217;ve done this with laser rangefinder data and it works. So you could take a depth data from a Kinect and reconstruct planes for the ground or walls in a room.</p>
<p><strong>Idea 6</strong>: What if you had two or more Kinects? You&#8217;d have depth or range data from the viewpoint of each Kinect and you could combine or intersect that data. If you put two Kinects at right angles (or three or four Kinects around a room, all pointing into the room), could you reconstruct a true 3D scene or 3D object from intersecting the range data from each Kinect?</p>
<p>I hope a few of these ideas get you thinking about all the fun things you could do with a Kinect. I&#8217;m looking forward to seeing what cool ideas, applications, and projects people come up with!</p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/open-kinect-contest/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/open-kinect-contest/feed/</wfw:commentRss>
		<slash:comments>88</slash:comments>
		</item>
		<item>
		<title>Switching between dev and beta Chrome channels on Linux</title>
		<link>http://www.mattcutts.com/blog/switch-dev-and-beta-chrome-channels-on-linux/</link>
		<comments>http://www.mattcutts.com/blog/switch-dev-and-beta-chrome-channels-on-linux/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 18:30:30 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Linux/Ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=4219</guid>
		<description><![CDATA[If you&#8217;re on Linux (say Ubuntu 10.04, also known as Lucid Lynx), you can switch between the developer (dev) and beta channels of Chrome like this: Switch from Beta to Dev: sudo apt-get install google-chrome-unstable Switch from Dev to Beta: sudo apt-get install google-chrome-beta That&#8217;s easier for me than going back for the .deb file [...]]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;re on Linux (say Ubuntu 10.04, also known as Lucid Lynx), you can switch between the developer (dev) and beta channels of Chrome like this:</p>
<p><strong>Switch from Beta to Dev</strong>:<br />
<code>sudo apt-get install google-chrome-unstable</code></p>
<p><strong>Switch from Dev to Beta</strong>:<br />
<code>sudo apt-get install google-chrome-beta</code></p>
<p>That&#8217;s easier for me than <a href="http://www.chromium.org/getting-involved/dev-channel">going back for the .deb file</a> and doing something with it.</p>
<p>Also, if you want to check whether a new dev version of Chrome is out, you can just repeat the same command:<br />
<code>sudo apt-get install google-chrome-unstable</code></p>
<p>and if there&#8217;s no new version, you&#8217;ll get something like this back:</p>
<blockquote><p>Reading package lists&#8230; Done<br />
Building dependency tree<br />
Reading state information&#8230; Done<br />
google-chrome-unstable is already the newest version.<br />
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.</p></blockquote>
<p>I figured I&#8217;d document this in case I needed to remember how to do it in the future. <img src='http://www.mattcutts.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/switch-dev-and-beta-chrome-channels-on-linux/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/switch-dev-and-beta-chrome-channels-on-linux/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Installing Android development environment on Ubuntu 9.04</title>
		<link>http://www.mattcutts.com/blog/install-android-on-ubuntu/</link>
		<comments>http://www.mattcutts.com/blog/install-android-on-ubuntu/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 02:18:25 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Linux/Ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=3565</guid>
		<description><![CDATA[I wanted to play with writing Android apps on my home Linux computer, which is currently running Ubuntu 9.04 (Jaunty Jackalope). These are mostly notes for myself, so don&#8217;t feel guilty if you skip this post. - Make sure your system is up-to-date: sudo apt-get update &#038;&#038; sudo apt-get upgrade - Install Java sudo apt-get [...]]]></description>
				<content:encoded><![CDATA[<p>I wanted to play with writing Android apps on my home Linux computer, which is currently running Ubuntu 9.04 (Jaunty Jackalope). These are mostly notes for myself, so don&#8217;t feel guilty if you skip this post. <img src='http://www.mattcutts.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>- Make sure your system is up-to-date:<br />
<code><br />
sudo apt-get update &#038;&#038; sudo apt-get upgrade<br />
</code></p>
<p>- Install Java<br />
<code><br />
sudo apt-get install sun-java6-jdk<br />
</code></p>
<p>- Switch Sun to be the default version of Java. It&#8217;s much faster than the built-in version, at least when I tried it.<br />
<code><br />
sudo update-java-alternatives -s java-6-sun<br />
</code></p>
<p>- Make a directory, e.g. <code>mkdir ~/android</code></p>
<p>- Download Eclipse from <a href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a> (I chose the &#8220;Eclipse Classic 3.5.1&#8243; version). Move the code into that directory, then unpack it. Unpacking is enough&#8211;the software runs in place and doesn&#8217;t have to be installed onto the system other than unpacking it.<br />
<code><br />
mv eclipse-SDK-3.5.1-linux-gtk.tar.gz ~/android<br />
cd ~/android<br />
tar xzvf eclipse-SDK-3.5.1-linux-gtk.tar.gz<br />
</code></p>
<p>- Download the latest Android SDK from <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a> and move it into that directory, then unpack it. I believe unpacking is enough&#8211;the software runs in place and doesn&#8217;t have to be installed onto the system other than unpacking it.<br />
<code><br />
mv android-sdk_r04-linux_86.tgz ~/android/<br />
cd ~/android/<br />
tar xzvf android-sdk_r04-linux_86.tgz<br />
</code></p>
<p>- Edit your ~/.bashrc file and add a line to the bottom:<br />
<code><br />
export PATH=${PATH}:/home/matt/android/android-sdk-linux_86/tools<br />
</code></p>
<p>Okay, now Java, Eclipse, and the Android SDK are installed. Now you need to install the Android Development Tools (ADT) for Eclipse.</p>
<p>- Run Eclipse. If you installed Eclipse in ~/android/eclipse then you can cd to that directory and run ./eclipse to start the program.</p>
<p>- Install the Android Development Tools (ADT) for Eclipse. Follow the excellent instructions at <a href="http://developer.android.com/sdk/eclipse-adt.html">http://developer.android.com/sdk/eclipse-adt.html</a> to get and install the ADT. Don&#8217;t forget the &#8220;Window > Preferences&#8221; step to tell Eclipse where the Android SDK is, so when you click &#8220;Browse&#8230;&#8221; you might navigate to /home/matt/android/android-sdk-linux_86 for example.</p>
<p>- Next, I installed a bunch of packages. In Eclipse, click &#8220;Window->Android SDK and AVD Manager.&#8221; In the resulting window, on the left-hand side will be an &#8220;Available Packages&#8221; option. I clicked on that, then clicked the checkbox beside the &#8220;repository.xml&#8221; package to select all available packages and then clicked &#8220;Install Selected.&#8221; 12 out of the 14 packages installed for me.</p>
<p>- Now you&#8217;re ready to <a href="http://developer.android.com/guide/tutorials/hello-world.html">create your first Android program</a> . You&#8217;ll discover how to make an Android virtual device (AVD) along the way.</p>
<p>- If you want, you can get custom skins, e.g. a <a href="http://timhoeck.com/2010/01/16/nexus-one-emulator-skin/">Nexus One skin for Android</a>. You can unpack the .zip file in &lt;your-sdk-directory&gt;/platforms/android-x.y/skins/nexusone for example. Then create a new Android virtual device (AVD) and select the Nexus One as the skin.</p>
<p>- If you want to run your Android program on your own Android device, you&#8217;re pretty close. Follow <a href="http://www.futuredesktop.org/developing_android_apps_on_ubuntu.html">step 10 of this walkthrough</a>. When you&#8217;re done and the phone is disconnected from your Ubuntu machine, you&#8217;ll still have the executable, called an &#8220;android package&#8221; or .apk file on your phone. So you can show your friends your &#8220;Hello, World!&#8221; program. <img src='http://www.mattcutts.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Some resources that I found helpful (other than the <a href="http://developer.android.com/">official Android developer site</a>) are below:<br />
- <a href="http://www.futuredesktop.org/developing_android_apps_on_ubuntu.html">http://www.futuredesktop.org/developing_android_apps_on_ubuntu.html</a><br />
- <a href="http://www.softwarepassion.com/setting-up-android-development-platform-on-ubuntu-linux-904/">http://www.softwarepassion.com/setting-up-android-development-platform-on-ubuntu-linux-904/</a><br />
- <a href="http://www.howtoforge.com/installing-google-android-sdk1.0-on-ubuntu8.04-desktop">http://www.howtoforge.com/installing-google-android-sdk1.0-on-ubuntu8.04-desktop</a><br />
- <a href="http://androidforums.com/developer-101/2321-installing-eclipse-android-sdk-ubuntu-8-04-8-10-a.html">http://androidforums.com/developer-101/2321-installing-eclipse-android-sdk-ubuntu-8-04-8-10-a.html</a><br />
- You might also want to watch this <a href="http://training.oreilly.com/androidapps/">O&#8217;Reilly video</a> or some of the <a href="http://developer.android.com/videos/index.html#v=opZ69P-0Jbc">official videos</a>.</p>
<p>If you found this post at all interesting, you might also be interested in <a href="http://code.google.com/events/io/2010/">Google I/O</a> too. Google I/O happens on May 19-20, 2010 in San Francisco.</p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/install-android-on-ubuntu/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/install-android-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Doing the &#8220;Digital Cleanse&#8221;: no Twitter for a week</title>
		<link>http://www.mattcutts.com/blog/breaking-twitter-addiction/</link>
		<comments>http://www.mattcutts.com/blog/breaking-twitter-addiction/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 05:09:55 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[30 days]]></category>
		<category><![CDATA[Linux/Ubuntu]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=3367</guid>
		<description><![CDATA[John Mayer had a good post about a &#8220;digital cleanse.&#8221; The idea is to step away from the busy, buzzy world for a week. John mentioned four ideas, but I&#8217;m going to try just one: &#8220;no use of Twitter or any other social networking site&#8221;. That&#8217;s right, I&#8217;m going Twitter-free for a week. I don&#8217;t [...]]]></description>
				<content:encoded><![CDATA[<p>John Mayer had a good post about a &#8220;<a href="http://jhnmyr.tumblr.com/post/308807536/the-one-week-digital-cleanse">digital cleanse</a>.&#8221; The idea is to step away from the busy, buzzy world for a week. John mentioned four ideas, but I&#8217;m going to try just one: &#8220;no use of Twitter or any other social networking site&#8221;.</p>
<p>That&#8217;s right, I&#8217;m going Twitter-free for a week. I don&#8217;t really use Facebook, so that&#8217;s not a problem. The only other social networking website I use is FriendFeed, so I&#8217;m cutting that out too. To keep me on track this week, here&#8217;s what I did:</p>
<ul>
<li>Tweeted that I was doing the digital cleanse and changed my Bio line to mention that I was doing the digital cleanse.</li>
<li>Removed all Twitter apps from my mobile phone.</li>
<li>Removed the Twitter and FriendFeed shortcuts from Chrome&#8217;s new tab page.</li>
<li>Hard-coded a bunch of websites so that I can&#8217;t even access them. In Linux, you can type &#8220;sudo vi /etc/hosts&#8221; and add the following lines:<br />
<code><br />
127.0.0.1 twitter.com<br />
127.0.0.1 www.twitter.com<br />
127.0.0.1 facebook.com<br />
127.0.0.1 www.facebook.com<br />
127.0.0.1 friendfeed.com<br />
127.0.0.1 www.friendfeed.com<br />
</code></p>
<p>What these lines say is &#8220;Computer, when you try to use the domain name system (DNS) to resolve twitter.com to an IP address, hard-code the IP address to be 127.0.0.1.&#8221; Note that 127.0.0.1 is a special IP address that corresponds to your own computer. In essence, these entries make it impossible to browse to Twitter, Facebook, or FriendFeed. You might need to reboot your computer too for the settings to take effect.</li>
</ul>
<p>I&#8217;m thinking that I might blog a little more now that I&#8217;ve stopped tweeting for a week, so I&#8217;m doing one extra step&#8211;I&#8217;m linking my blog in Feedburner so that when I publish a blog post, it will <a href="http://adsenseforfeeds.blogspot.com/2009/12/socializing-your-feed-with-twitter.html">tweet a link to that blog post</a>. Here&#8217;s how to do it:<br />
1. Log in to <a href="http://feedburner.google.com/">http://feedburner.google.com/</a> and click on your blog&#8217;s feed.<br />
2. Click on the &#8220;Publicize&#8221; tab and then the &#8220;Socialize&#8221; service on the left.<br />
3. Add your Twitter account and select the options you want. Here&#8217;s how it looks:</p>
<p><center><img src="http://www.mattcutts.com/images/feedburner-tweet.png" alt="Tweeting from FeedBurner" /></center></p>
<p>Then click &#8220;Save&#8221; and that&#8217;s all you need to do.</p>
<p>So far, I&#8217;ve been Twitter-free for twelve hours. In that time, I&#8217;ve<br />
- worked out<br />
- taken down our Christmas tree, chopped it into sections and put it out on the street<br />
- typed in three months&#8217; worth of data for a project that I&#8217;m working on<br />
- taken down our Christmas lights and packed them away<br />
- stored all our various Christmas decorations<br />
- run a couple loads of laundry<br />
- put out the trash<br />
- gone shopping and had a couple meals with my wife<br />
Oh, and written a blog post. We&#8217;ll see how the digital cleanse works for the rest of the week. <img src='http://www.mattcutts.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/breaking-twitter-addiction/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/breaking-twitter-addiction/feed/</wfw:commentRss>
		<slash:comments>61</slash:comments>
		</item>
		<item>
		<title>30 day challenge for October: No Microsoft Software</title>
		<link>http://www.mattcutts.com/blog/30-days-no-microsoft-software/</link>
		<comments>http://www.mattcutts.com/blog/30-days-no-microsoft-software/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 19:26:35 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[30 days]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Linux/Ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=3130</guid>
		<description><![CDATA[In September I didn&#8217;t do a 30 day challenge because, frankly, I had a lot of work that I really needed to crunch through at the Googleplex and I didn&#8217;t have much spare time. But October is a new month, and so it&#8217;s time for a new 30 day challenge. For October, I&#8217;m not going [...]]]></description>
				<content:encoded><![CDATA[<p>In September I didn&#8217;t do a <a href="http://www.mattcutts.com/blog/30-day-reports/">30 day challenge</a> because, frankly, I had a lot of work that I really needed to crunch through at the Googleplex and I didn&#8217;t have much spare time. But October is a new month, and so it&#8217;s time for a new 30 day challenge.</p>
<p>For October, I&#8217;m not going to use any Microsoft software. No Microsoft operating systems (WinXP, Vista, or Windows 7) and no Microsoft Office allowed. I will continue to use their keyboards, because they make <a href="http://www.microsoft.com/hardware/mouseandkeyboard/ProductDetails.aspx?pid=043">very nice keyboards</a>, and I will allow myself to use their websites&#8211;sometimes I need to do a query on Bing to test how well they do, for example.</p>
<p>I don&#8217;t plan to switch to Apple, although I might try a Mac for a week. Apple products are polished and usable, so why not switch to Apple? That would be a much longer blog post. Apple makes great design decisions for the majority of people, but if you don&#8217;t like a particular decision, it can be very difficult to change it. Have you ever wanted to see the exact time (including seconds) on an iPhone? It&#8217;s hard to do, and <a href="http://www.mattcutts.com/blog/top-5-signs-you-are-anal-retentive/">I&#8217;m that kind of guy</a>. Another big reason is just that I&#8217;m huge believe in free and open-source software, and I want to support that sort of software.</p>
<p>So on Friday I installed Ubuntu on my Windows XP laptop. On Saturday, I downloaded all the data from my <a href="http://www.mattcutts.com/blog/my-favorite-pedometer-omron-hj-720itc/">pedometer</a> (the software only runs in Windows) and shut down my home Windows XP machine. I already had a machine running Ubuntu at home, but I managed to get it driving two out of my three monitors:</p>
<p><center><img src="http://www.mattcutts.com/images/ubuntu-desktop.jpg" alt="Ubuntu Desktop" /></center></p>
<p>What have I learned so far? The current version of <a href="http://www.ubuntu.com/">Ubuntu</a> (called &#8220;Jaunty Jackalope&#8221;) is really quite nice. There&#8217;s a lot of polish to the UI and the day-to-day tasks work very smoothly. At the same time, it&#8217;s possible to tinker around with something so much (I&#8217;m thinking about fonts right now) that you mess things up. But the <a href="http://dev.chromium.org/getting-involved/dev-channel">dev version of Chrome for Linux</a> has been really fast and stable, even though Chrome for Linux isn&#8217;t <a href="http://www.google.com/chrome/intl/en/linux.html">officially supported yet</a>. I spend a large chunk of each day in a web browser, so having Chrome as an option was critical.</p>
<p>I&#8217;ll let you know how the 30 days turns out, but right now I&#8217;m optimistic. <img src='http://www.mattcutts.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/30-days-no-microsoft-software/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/30-days-no-microsoft-software/feed/</wfw:commentRss>
		<slash:comments>110</slash:comments>
		</item>
		<item>
		<title>Ubuntu 9.04 boots in 7.83 seconds!</title>
		<link>http://www.mattcutts.com/blog/ubuntu-904-boots-in-175-seconds/</link>
		<comments>http://www.mattcutts.com/blog/ubuntu-904-boots-in-175-seconds/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 06:22:22 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[Gadgets/Hack]]></category>
		<category><![CDATA[Linux/Ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=2340</guid>
		<description><![CDATA[Recently I treated myself to a solid-state drive (SSD). That&#8217;s essentially a hard-drive made out of memory chips. I bought the Intel X25-E Extreme, which uses faster single-level cell (SLC) memory chips instead of slower multi-level cell (MLC) memory chips. I wanted to put the drive through its paces, so I decided to see how [...]]]></description>
				<content:encoded><![CDATA[<p>Recently I treated myself to a solid-state drive (SSD). That&#8217;s essentially a hard-drive made out of memory chips. I bought the <a href="http://www.intel.com/design/flash/nand/extreme/index.htm">Intel X25-E Extreme</a>, which uses faster single-level cell (SLC) memory chips instead of slower multi-level cell (MLC) memory chips.</p>
<p>I wanted to put the drive through its paces, so I decided to see how fast I could boot Ubuntu and start Firefox. It turns out that Ubuntu 9.04, code-named Jaunty Jackalope, is <a href="http://www.ubuntu.com/testing/jaunty/beta">just a few days away</a>, and one of the features listed is &#8220;significantly improved boot performance.&#8221; Perfect! I installed Ubuntu 8.10 from a CD and then followed the <a href="http://www.ubuntu.com/testing/jaunty/beta#Upgrading%20from%20Ubuntu%208.10">incredibly easy instructions</a> to upgrade to the beta of 9.04.</p>
<p>So how fast did Ubuntu 9.04 boot with a solid-state drive? <strong>Really freaking fast</strong>. Like, &#8220;I can&#8217;t believe it&#8217;s already done&#8221; fast. Well, here, watch for yourself:</p>
<p><center><object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/5GKohxZHNg4&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/5GKohxZHNg4&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object></center></p>
<p>Total boot time from pressing power to Firefox loaded was about 22.5 seconds, with about 5 seconds of BIOS display on a Thinkpad. Subtracting out the Thinkpad BIOS display time, that means that Ubuntu 9.04 booted into Firefox in about 17.5 seconds. I think I&#8217;m going to have a lot of fun with this hard drive. Oh, and Ubuntu 9.04 looks really interesting too. <img src='http://www.mattcutts.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>For the folks that are curious, I <a href="http://www.howtogeek.com/howto/ubuntu/change-the-grub-menu-timeout-on-ubuntu/">changed the GRUB boot loader time out</a> from three seconds to zero, <a href="http://thirderror.com/article/enable-auto-login-for-ubuntu/">enabled automatic login</a> to my account, then I added Firefox to default list of startup services.</p>
<p><strong>Added</strong>: I collected a couple <a href="http://www.mattcutts.com/images/ubuntu-ssd-jaunty-20090413-1.png">boot</a> <a href="http://www.mattcutts.com/images/ubuntu-ssd-jaunty-20090413-2.png">charts</a> by using <a href="http://www.bootchart.org/">bootchart</a>. As Ryan said in a comment, I ran sudo apt-get install pybootchartgui bootchart , then rebooted, then collected the image in /var/log/bootchart . If I&#8217;m reading the images correctly, it&#8217;s claiming 8.67 seconds for one boot-up and 8.69 seconds for the other boot-up.</p>
<p><strong>Added</strong>: Okay, I reinstalled Ubuntu 9.04 so I could use ext4 and it shaved almost a second off the boot time! Check out <a href="http://www.mattcutts.com/images/ubuntu-ssd-jaunty-jaunty-20090413-3.png">this image</a> which shows a 7.83 second boot time. <img src='http://www.mattcutts.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/ubuntu-904-boots-in-175-seconds/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/ubuntu-904-boots-in-175-seconds/feed/</wfw:commentRss>
		<slash:comments>80</slash:comments>
		</item>
		<item>
		<title>Trying (and failing) to get Ubuntu to work</title>
		<link>http://www.mattcutts.com/blog/intrepid-ibex-failing/</link>
		<comments>http://www.mattcutts.com/blog/intrepid-ibex-failing/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 05:20:19 +0000</pubDate>
		<dc:creator>Matt Cutts</dc:creator>
				<category><![CDATA[Linux/Ubuntu]]></category>

		<guid isPermaLink="false">http://www.mattcutts.com/blog/?p=1521</guid>
		<description><![CDATA[I really want to run Ubuntu, but it shouldn&#8217;t be this hard. Plugging in an SD card reader that I picked up from Best Buy shouldn&#8217;t cause a hard freeze of my system (on both Gutsy Gibbon and Intrepid Ibex): The card reader works fine in Windows. At this point, I&#8217;m honestly thinking about crashing [...]]]></description>
				<content:encoded><![CDATA[<p>I really want to run Ubuntu, but it shouldn&#8217;t be this hard. Plugging in an SD card reader that I picked up from Best Buy shouldn&#8217;t cause a hard freeze of my system (on both Gutsy Gibbon and Intrepid Ibex):</p>
<p><center><img src="http://www.mattcutts.com/images/sd-card-reader.jpg" alt="SD Card Reader" /></center></p>
<p>The card reader works fine in Windows. At this point, I&#8217;m honestly thinking about crashing the <a href="http://osdir.com/ml/linux.ubuntu.devel.announce/2008-07/msg00004.html">Ubuntu Developer Summit</a> that will be held in December at the Googleplex in Mountain View, CA to pick peoples&#8217; brains.</p>
<p>Okay, so Ubuntu freezes hard when you plug in the card reader (sometimes). Unless you report that bug, no one will know to fix it. So I&#8217;m trying to follow these <a href="https://wiki.ubuntu.com/DebuggingRemovableDevices">instructions for debugging removable devices</a> to do a good Ubuntu bug report, and finding that the instructions are pretty out-of-date.</p>
<p>For example, you&#8217;re supposed to kill, then start gnome-volume-manager in a foreground mode to see debugging messages. Except that the latest version of Ubuntu (Intrepid Ibex) doesn&#8217;t even install gnome-volume-manager. Oh, you can install it (and you&#8217;ll get the sound-juicer package with it). But when you try to run it, you&#8217;ll get this helpful message:</p>
<blockquote><p>
$ /usr/lib/gnome-volume-manager/gnome-volume-manager -n<br />
manager.c/685: setting[0]: string: filemanager = nautilus -n &#8211;no-desktop %m<br />
manager.c/690: setting[1]: bool: autophoto = 0<br />
manager.c/685: setting[2]: string: autophoto_command = f-spot-import<br />
manager.c/690: setting[3]: bool: autovideocam = 0<br />
manager.c/685: setting[4]: string: autovideocam_command =<br />
manager.c/690: setting[5]: bool: autowebcam = 0<br />
manager.c/685: setting[6]: string: autowebcam_command = cheese &#8211;hal-device=%h<br />
manager.c/690: setting[7]: bool: autopalmsync = 0<br />
manager.c/685: setting[8]: string: autopalmsync_command = gpilotd-control-applet<br />
manager.c/690: setting[9]: bool: autopocketpc = 0<br />
manager.c/685: setting[10]: string: autopocketpc_command = multisync<br />
manager.c/690: setting[11]: bool: autoprinter = 0<br />
manager.c/685: setting[12]: string: autoprinter_command =<br />
manager.c/690: setting[13]: bool: autoscanner = 0<br />
manager.c/685: setting[14]: string: autoscanner_command = xsane<br />
manager.c/690: setting[15]: bool: autokeyboard = 0<br />
manager.c/685: setting[16]: string: autokeyboard_command =<br />
manager.c/690: setting[17]: bool: automouse = 0<br />
manager.c/685: setting[18]: string: automouse_command =<br />
manager.c/690: setting[19]: bool: autotablet = 0<br />
manager.c/685: setting[20]: string: autotablet_command =<br />
manager.c/699: settings[21]: float: percent_threshold = 0.050000<br />
manager.c/699: settings[22]: float: percent_used = 0.010000<br />
manager.c/664: daemon exit: live and let die
</p></blockquote>
<p>It&#8217;s easy to find the <a href="http://gnome-volume-manager.sourcearchive.com/documentation/2.24.0-0ubuntu1/manager_8c-source.html">source code of gnome-volume-manager</a> online, but the relevant function is more cute than informative. Searching for ["live and let die" gnome-volume-manager] finds <a href="http://imc.livejournal.com/183672.html?thread=491640">this post</a> where someone tries to guess what the message means:</p>
<blockquote><p>Fedora no longer uses gnome-volume-manager to auto-mount removable media — it&#8217;s now built into Nautilus. I am guessing that &#8220;live and let die&#8221; means &#8220;hey, someone else is already managing this&#8221; but that is pure speculation on my part. So if you get that error message it just means that you shouldn&#8217;t have been running it in the first place.</p></blockquote>
<p>With that clue, you can go back and find <a href="http://ubuntuforums.org/showthread.php?p=5925651">this thread</a> where Ubuntu developer wgrant helpfully lets someone know &#8220;gnome-volume-manager is no longer necessary either &#8211; nautilus does the mounting now.&#8221; It is good to find an Ubuntu developer posting answers online. But now I&#8217;m not sure how to generate Nautilus debugging logs akin to the gnome-volume-manager logs that fellow Ubuntu folks could use to debug the hard freeze. At least I do know how to generate <a href="http://www.mattcutts.com/blog/udevadm-udevmonitor/">udevmonitor logs using the new udevadm program</a>.</p>
<p>Please pardon the melancholy tone. It&#8217;s just frustrating that plugging in an SD card reader can cause sporadic freezes on my Ubuntu computer. And if you plug in the SD card reader often enough, you may <a href="http://www.mattcutts.com/blog/ubuntu-freeze-no-resume-image/">corrupt your system</a>. I do see progress from Hardy Heron to Intrepid Ibex with <a href="http://www.mattcutts.com/blog/six-annoyances-in-hardy-heron-ubuntu/">several annoyances</a> fixed, but there&#8217;s still a way to go.</p>
<p><strong>Update</strong>: If any Linux/Ubuntu folks want to dig into it, I put all the log files I could think of at <a href="http://www.mattcutts.com/files/sandisk/">http://www.mattcutts.com/files/sandisk/</a> for folks that want to check it out.</p>
<div class="plusone"><g:plusone href="http://www.mattcutts.com/blog/intrepid-ibex-failing/"></g:plusone></div>]]></content:encoded>
			<wfw:commentRss>http://www.mattcutts.com/blog/intrepid-ibex-failing/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using n/a

 Served from: www.mattcutts.com @ 2013-05-18 19:52:39 by W3 Total Cache -->