<?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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>crashsystems.net</title>
	<atom:link href="http://crashsystems.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://crashsystems.net</link>
	<description>Home of Crashsystems LLC, and a blog about miscellaneous things</description>
	<lastBuildDate>Sun, 20 Jun 2010 19:28:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
	<!-- podcast_generator="podPress/8.8" - maintenance_release="8.8.5.3" -->
	<copyright>2006-2007 </copyright>
	<managingEditor>crashsystems@gmail.com (Douglass Clem)</managingEditor>
	<webMaster>crashsystems@gmail.com (Douglass Clem)</webMaster>
	<category>posts</category>
	<ttl>1440</ttl>
	<image>
		<url>http://crashsystems.net/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>crashsystems.net</title>
		<link>http://crashsystems.net</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>A blog about technology, world travel, spirituality, and random combinations of these themes.</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &amp; Culture" />
	<itunes:author>Douglass Clem</itunes:author>
	<itunes:owner>
		<itunes:name>Douglass Clem</itunes:name>
		<itunes:email>crashsystems@gmail.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://crashsystems.net/wp-content/plugins/podpress/images/powered_by_podpress.jpg" />
		<item>
		<title>Telling Students Linux != Windows with pyinotify and pynotify</title>
		<link>http://crashsystems.net/2010/05/pyinotify_and_pynotify/</link>
		<comments>http://crashsystems.net/2010/05/pyinotify_and_pynotify/#comments</comments>
		<pubDate>Thu, 13 May 2010 19:44:04 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=348</guid>
		<description><![CDATA[While doing pro bono Ubuntu system administration for a local private school, something that has always annoyed me is that students frequently download installer files for Windows programs (games, iTunes etc). The computers obviously don&#8217;t look like they run Windows, and they&#8217;ve been told on many occasions that Linux != Windows. So today, I decided [...]]]></description>
			<content:encoded><![CDATA[<p>While doing pro bono Ubuntu system administration for a local private school, something that has always annoyed me is that students frequently download installer files for Windows programs (games, iTunes etc). The computers obviously don&#8217;t <em>look</em> like they run Windows, and they&#8217;ve been told on many occasions that Linux != Windows. So today, I decided to automate this explanation:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> pyinotify, pynotify
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">subprocess</span> <span style="color: #ff7700;font-weight:bold;">import</span> Popen
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span> <span style="color: #ff7700;font-weight:bold;">import</span> expanduser
&nbsp;
pynotify.<span style="color: black;">init</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Windows program notifier'</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># Not sure what this does</span>
&nbsp;
PATH = expanduser<span style="color: black;">&#40;</span><span style="color: #483d8b;">'~'</span><span style="color: black;">&#41;</span>
NAUGHTY_EXTENSIONS = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'exe'</span>,<span style="color: #483d8b;">'bat'</span>, <span style="color: #483d8b;">'com'</span>, <span style="color: #483d8b;">'dll'</span>, <span style="color: #483d8b;">'msi'</span>, <span style="color: #483d8b;">'ocx'</span>, <span style="color: #483d8b;">'reg'</span>, <span style="color: #483d8b;">'scr'</span><span style="color: black;">&#93;</span>
MESSAGE = <span style="color: #483d8b;">&quot;You just tried to download a Windows program. This is Linux. Bugger off!&quot;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> notifyAndDelete<span style="color: black;">&#40;</span>path, showNotification<span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;Delete any file with the forbben extensions.&quot;&quot;&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> path.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'.'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>-<span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">in</span> NAUGHTY_EXTENSIONS:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Deleting '</span> + path
        Popen<span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'rm'</span>, path<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> showNotification == <span style="color: #008000;">True</span>:
            n = pynotify.<span style="color: black;">Notification</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Windows Program Fail&quot;</span>, MESSAGE<span style="color: black;">&#41;</span>
            n.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> HandleEvents<span style="color: black;">&#40;</span>pyinotify.<span style="color: black;">ProcessEvent</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> process_IN_CREATE<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, event<span style="color: black;">&#41;</span>:
        notifyAndDelete<span style="color: black;">&#40;</span>event.<span style="color: black;">pathname</span>, <span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">def</span> process_IN_MOVED_TO<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, event<span style="color: black;">&#41;</span>:
        notifyAndDelete<span style="color: black;">&#40;</span>event.<span style="color: black;">pathname</span>, <span style="color: #008000;">False</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    wm = pyinotify.<span style="color: black;">WatchManager</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>  <span style="color: #808080; font-style: italic;"># Watch Manager</span>
    mask = pyinotify.<span style="color: black;">IN_CREATE</span> | pyinotify.<span style="color: black;">IN_MOVED_TO</span>  <span style="color: #808080; font-style: italic;"># watched events</span>
&nbsp;
    p = HandleEvents<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    notifier = pyinotify.<span style="color: black;">Notifier</span><span style="color: black;">&#40;</span>wm, p<span style="color: black;">&#41;</span>
    wdd = wm.<span style="color: black;">add_watch</span><span style="color: black;">&#40;</span>PATH, mask, rec=<span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
&nbsp;
    notifier.<span style="color: black;">loop</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>When a user tries to download a program with an extension found in NAUGHTY_EXTENSIONS, They will get a Notify OSD popup informing them that they are not using Windows, and Windows programs won&#8217;t work on school computers. Of course, when I go to deploy this code, MESSAGE will be a little more appropriately worded.</p>
<p>This program is a combination of code I found from <a href="http://trac.dbzteam.org/pyinotify/wiki/Tutorial" target="_blank">this pyinotify tutorial</a> and a Notify OSD snippet I found in <a href="http://aciresnippets.wordpress.com" target="_blank">Acire</a>.</p>
<p><strong>Edit June 8 2010</strong></p>
<p><em>Thanks to the anonymous commenter that pointed out the bug that allowed arbitrary code execution, and to </em><a href="https://wiki.ubuntu.com/mhall119" target="_blank"><em>Michael Hall</em></a><em> for explaining it in more detail. The problem has been fixed.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2010/05/pyinotify_and_pynotify/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Changing Plymouth Themes In Ubuntu 10.04</title>
		<link>http://crashsystems.net/2010/04/changing-plymouth-themes/</link>
		<comments>http://crashsystems.net/2010/04/changing-plymouth-themes/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 00:28:04 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=332</guid>
		<description><![CDATA[One of the major changes in Ubuntu 10.04 is that Plymouth is now managing the fancy boot graphics, instead of xsplash. While the default Plymouth theme is decent, I wanted something different. Fortunately, changing the Plymouth theme only takes a few lines on the CLI. If you run apt-cache search plymouth-theme, you&#8217;ll see which themes [...]]]></description>
			<content:encoded><![CDATA[<p>One of the major changes in Ubuntu 10.04 is that Plymouth is now managing the fancy boot graphics, instead of xsplash. While the default Plymouth theme is decent, I wanted something different. Fortunately, changing the Plymouth theme only takes a few lines on the CLI.</p>
<p>If you run <em>apt-cache search plymouth-theme</em>, you&#8217;ll see which themes are available in the default repositories. This <a href="http://www.youtube.com/results?search_query=ubuntu+plymouth&amp;aq=0" target="_blank">Youtube search</a> has some videos of what is available. I chose the <em>plymouth-theme-solar</em> package, which has a nice solar flare animation. Next, run the following code, which I found <a href="http://ubuntuforums.org/showpost.php?p=9034192&amp;postcount=510" target="_blank">here</a>. Keep in mind that you need to change it to point to the plymouth theme you want to use.</p>
<pre>sudo update-alternatives --install \
/lib/plymouth/themes/default.plymouth default.plymouth \
/lib/plymouth/themes/solar/solar.plymouth 100</pre>
<p>(note: Line warping was only used to make it look pretty on a blog post.)</p>
<p>Next run <em>sudo update-alternatives &#8211;config default.plymouth</em>. You&#8217;ll see a numbered menu of the themes currently installed. Type the number for the one you want and hit enter. Finally, use <em>sudo update-initramfs -u</em> to apply your changes.</p>
<p>Here is the result:</p>
<p><a href="http://www.youtube.com/watch?v=GUY_wvpBtHY"><img src="http://img.youtube.com/vi/GUY_wvpBtHY/default.jpg" width="130" height="97" border=0></a></p>
<p>There are not many themes available currently. However, once 10.04 is released and has been out for a little while, I think there will be many more options.</p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2010/04/changing-plymouth-themes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Practicality Of Freedom</title>
		<link>http://crashsystems.net/2010/04/practicality-of-freedom/</link>
		<comments>http://crashsystems.net/2010/04/practicality-of-freedom/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 22:03:05 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[censorship]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[proprietary]]></category>
		<category><![CDATA[restrictions]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=327</guid>
		<description><![CDATA[The various philosophies behind how software is developed is a popular topic among geeks. However, the vast majority of non-geeks have absolutely no interest in the topic, if they have even heard of the issue at all. I think that the reason for this is that these users see no practical connection between these issues [...]]]></description>
			<content:encoded><![CDATA[<p>The various philosophies behind how software is developed is a popular topic among geeks. However, the vast majority of non-geeks have absolutely no interest in the topic, if they have even heard of the issue at all. I think that the reason for this is that these users see no practical connection between these issues and their daily life. However, there certainly is a practical connection, even if most people never think of it in these terms. The goal of this post is to use a less technical analogy to illustrate why ordinary computer users should care about these issues.</p>
<h2>Comparing computer software to cars</h2>
<p>Most people own and operate their own car. Even if they are not mechanics, car owners understand the advantage of being able to decide who is allowed to repair or modify their vehicle. This analogy will use three different types of cars (two of which are thankfully fictional) to illustrate the types of software users can have on their own computer.</p>
<h3>The normal, open car</h3>
<p>The first kind of car is the type that exists today. When someone buys a car, the car comes with a hood that can be easily opened. The technically savvy owner can save lots of money by performing routine maintenance and repairs themselves. When they open the hood, they find an easily accessible engine, with parts (more or less) that are easy to reach. These parts usually follow certain types of standards, so they can often be replaced by parts from other manufacturers.</p>
<p>A vehicle owner benefits from owning this type of car, even if they don&#8217;t know enough to change their own oil, much less replace an engine. Since the inner workings of this car are accessible, there is a thriving market of mechanics, from mechanically savvy family members to professional operations, who compete on price to make repairs.</p>
<h3>The car with a secret engine</h3>
<p>Now imagine a new type of car. This car has a hood that can be opened, but it cannot be opened by the owner or a person of their choosing. A key is required to open this hood, and the only person with the key is the company that sold the car. They are the only company with permission to work on that engine. Of course, all locks can be picked with enough effort. If the user were to pick the lock on this hood, they would find an engine that is incredibly difficult to work with for anyone without special knowledge (the original manufacturer). Few of the parts are standardized and interchangeable, and all of the parts are placed in positions that make them hard to access.</p>
<p>There might still be third parties that actually work on this kind of car. Routine maintenance and repairs would be more costly, both because of the added effort it takes to work on the engine and because of the lack of people capable or willing to work on it. Many repairs would be impossible for anyone but the original manufacturer. This manufacturer would have close to a de facto monopoly on the vehicle&#8217;s maintenance, therefore driving up costs.</p>
<h3>The car controlled by the manufacturer</h3>
<p>The third kind of car looks a lot like the previous kind with the locked hood, but takes it to it&#8217;s logical conclusion. This car has technology designed to try to detect if it&#8217;s owner has tampered with the lock. If the car detects any unauthorized tampering, it destroys the engine. Furthermore, if the manufacturer discovers a mechanic telling others how to pick the lock without the car noticing, the manufacturer takes that mechanic to court. Lastly, this car will only drive to business and restaurants that it&#8217;s manufacturer puts on the approved list. If the &#8220;owner&#8221; of this car wants to go somewhere not on the list, they must ether borrow a friend&#8217;s car, or pick the lock and hope that their car does not self destruct. Fans and owners of this type of car defend these restrictions by saying that the establishments on the approved list are really high quality places, and that the restrictions are for the driver&#8217;s safety. In the end however, the only logical conclusion is that the restrictions are there to protect the manufacturer&#8217;s business model by preventing a truly free market.</p>
<h2>The different types of software</h2>
<p>Thankfully the second two types of cars do not exist today. Unfortunately, something similar does exist in the world of computer software, and most customers do not know that they are being effected by it.</p>
<p>The normal and open car, the one with the open and accessible engine, is similar to a type of software known by the names <a href="http://www.opensource.org/docs/definition.php" target="_blank">Open Source</a> and <a href="http://www.gnu.org/philosophy/free-sw.html" target="_blank">Free Software</a> (think free as in freedom, not free as in without price). Open Source software  is created both by large companies such as IBM and individual enthusiasts working in their spare time. This software gives users the freedom to use the software however they want, to understand how it works, to make any changes they want and to share those changes with anyone. Users with knowledge of computer programing can fix any bugs they want or add any features they want, just like mechanics can with cars. Users who are not technologically savvy can pay the original developer for support and maintenance, or can pay anyone else who offers a competing price.</p>
<p>The car with the secret engine is very similar to the commonly used operating systems Windows and OSX. The inner workings of those systems are secrets, and while third parties have been able to figure out how to fix many smaller problems, only their creators can make more substantial changes.</p>
<p>The car controlled by the manfacturer represents a disturbing new trend in computer software. With the Apple iPhone, and now the iPad, not only are the &#8220;owners&#8221; not allowed to know how these computers work, but if you try to tamper with them and don&#8217;t do it correctly, your device will be &#8220;bricked,&#8221; and become the world&#8217;s most expensive paperweight. &#8220;Why would I want to mess with a device that works so well&#8221; many people ask. As with the third car in the analogy, there are things the user is <a href="http://gizmodo.com/5325539/apples-chickenshit-approval-process-has-gone-too-far" target="_blank">not allowed to do</a> with an iPhone or iPad. They can only install applications on Apple&#8217;s approved list, and many wonderful and innovative applications are forbidden. Also, Apple does it&#8217;s best to <a href="http://www.eff.org/deeplinks/2009/02/apple-says-jailbreaking-illegal" target="_blank&quot;">use the legal system</a> to prevent others from learning how to gain control over their devices.</p>
<p>Many &#8220;owners&#8221; of the iPhone and iPad argue that it does not matter, as they can &#8220;jailbreak&#8221; their devices, aka gain access to forbidden apps. However, as explained above, these restrictions still have a very practical effect on the people who posses these devices. Also, if the person who sold the user the phone has more control over it than the user themselves, who truly owns the device in the first place?</p>
<p>Another objection that many owners of these devices use is that it is &#8220;just a phone&#8221; or &#8220;just a tablet,&#8221; and so the existence of these restrictions are not important. Is this really the case? The new iPad has a processor, storage and memory, just like any other computer does. It is also much more capable than my first computer was. Finally, what do users use it for? They watch movies and videos, listen to music, read articles and books, browse the web, communicate via email and instant message and use social media. That is the majority of things that most people use their traditional computers for. First these restrictions were on a phone. With the introduction of the iPad, which was advertised as something being &#8220;somewhere in between a smartphone and a laptop,&#8221; it has moved closer to what people traditionally think of as a computer. The App Store has proven to be a very popular and successful way for people to discover new apps. The logical conclusion is to use a similar model on Apple desktops and laptops, and of course Microsoft will try to compete with a similar system inside Windows. What sort of restrictions on our personal computers will then be demanded, in the name of copyright protection and quality assurance?</p>
<h2>Closing thoughts: What about free speech?</h2>
<p>So far this post has discussed the practical implications that these types of control have on the users of computer software. However, the discussion would not be complete without mentioning the free speech implications of this type of technology. Computers and the Internet are now the primary way people express their thoughts and opinions. We have already seen that Apple is willing to censor free speech on the iPhone. Last December, <a href="http://www.niemanlab.org/2010/04/mark-fiore-can-win-a-pulitzer-prize-but-he-cant-get-his-iphone-cartoon-app-past-apples-satire-police/" target="_blank">Apple decided</a> to reject an application from Pulitzer prize winning political cartoonist Mark Fiore, because Apple deemed some of his work was not politically correct. Apple <a href="http://www.macworld.com/article/150679/2010/04/pulitzer_rejection.html" target="_blank">relented</a> after it&#8217;s decision turned into a PR nightmare, but most publishers do not have enough notoriety to cause that kind of reaction.</p>
<p>I&#8217;m not saying that Apple is the corporate equivalent to Hitler or Stalin. However, large companies are very susceptible to pressure from national governments. Imagine if the iPad had been the primary communication platform in Iran during it&#8217;s recent <a href="http://en.wikipedia.org/wiki/2009%E2%80%932010_Iranian_election_protests" target="_blank">election</a> and subsequent <a href="http://en.wikipedia.org/wiki/2009%E2%80%932010_Iranian_election_protests#Internet_censorship" target="_blank">protests</a> and oppression. Would people outside of Iran have even heard about it?</p>
<p>Control used for the best of intentions can also be used for the worst of intentions.</p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2010/04/practicality-of-freedom/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Creating DIY mobile reception with Google Voice and VOIP</title>
		<link>http://crashsystems.net/2010/04/google-voice-gizmo5-sipdroid/</link>
		<comments>http://crashsystems.net/2010/04/google-voice-gizmo5-sipdroid/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 19:03:33 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Gizmo5]]></category>
		<category><![CDATA[Google Voice]]></category>
		<category><![CDATA[Nexus One]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[VOIP]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=323</guid>
		<description><![CDATA[Like many people in the USA who live in rural communities, I have no cellular reception at home. My mobile provider, T-Mobile, does not have enough economic incentive to build a tower close to my home. Also, they have not yet seen fit to give me the privilege of paying to compensate for their lack [...]]]></description>
			<content:encoded><![CDATA[<p>Like many people in the USA who live in rural communities, I have no cellular reception at home. My mobile provider, T-Mobile, does not have enough economic incentive to build a tower close to my home. Also, they have not yet seen fit to give me the privilege of paying to compensate for their lack of service via a <a href="http://en.wikipedia.org/wiki/Femtocell" target="_blank">Femtocell</a>.</p>
<p>Fortunately I have found a solution: <a href="http://google.com/voice">Google Voice</a> + <a href="http://www.google.com/gizmo5/" target="_blank">Gizmo5</a> + <a href="http://sipdroid.org/" target="_blank">Sipdroid</a>. Google Voice is a free service which lets it&#8217;s users unify all their phones under one number. Simply give friends, family and coworkers that one number, and calls will ring through to whatever phones the user chooses, based upon rules they define. Gizmo5 is a <a href="http://en.wikipedia.org/wiki/Session_Initiation_Protocol" target="_blank">SIP</a> provider that can connect to Google Voice and allow users to make phone calls over the Internet. Gizmo5 has been bought by Google, so registration is currently closed. However, everyone expects that it will eventually be integrated with Google Voice. Finally, Sipdroid is a nice, Open Source SIP client for <a href="http://www.android.com/">Android</a> that can connect to services like Gizmo5.</p>
<p>I&#8217;ve played with this combination before, when I was using a G1 Android phone from <a href="http://www.htc.com/us/" target="_blank">HTC</a>. The reasons I did not stick with it then were because the G1&#8242;s battery life was pretty bad, and the G1 struggled enough with performance that it was not feasible to keep Sipdroid running in the background.</p>
<p>Now that I have the amazing <a href="http://www.google.com/phone" target="_blank">Nexus One</a> though, all this has changed. The battery life on the N1 is pretty good by smart phone standards, and it&#8217;s performance is high enough that I can easily run Sipdroid in the background all the time without any noticeable performance impact.</p>
<p>I&#8217;m using my home WiFi for Sipdroid. I have always been told that WiFi eats battery life rather quickly. However, I&#8217;ve been surprised at how much this has not been the case. After a full day of being connected to wireless almost all the time, WiFi only used up about 2% of my phone&#8217;s battery (this is with moderate use of the connection). I&#8217;ve come to the conclusion that simply having wireless connected does not use much power, but actually transferring data does.</p>
<p>This solution has been working great, but has not been completely without problems. When I receive calls, both parties (the person I talk with and I) have excellent sound quality. However, when I initiate the call via my phone, the person on the receiving end gets tons of latency and a lot of static. I have worked around this issue by initiating the calls via the Google Voice web interface. This hack is slightly annoying, but it is not too bad since I almost always have my laptop on.</p>
<p>After a few days of use, I am quite happy with this solution, and am looking forward to hopefully seeing <a href="http://en.wikipedia.org/wiki/VOIP" target="_blank">VOIP</a> kill off traditional telephone providers in the future. AT&amp;T, T-Mobile and others should be very afraid, especially if municipal WiFi becomes more common.</p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2010/04/google-voice-gizmo5-sipdroid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress for Android</title>
		<link>http://crashsystems.net/2010/02/wordpress-for-android/</link>
		<comments>http://crashsystems.net/2010/02/wordpress-for-android/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 19:58:19 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://crashsystems.net/2010/02/wordpress-for-android/</guid>
		<description><![CDATA[WordPress for Android just released 1.0. This is a test post, but so far it is quite nice! You can download it here.]]></description>
			<content:encoded><![CDATA[<p>WordPress for Android just released 1.0. This is a test post, but so far it is quite nice! You can download it <a href="http://android.wordpress.org/2010/02/02/wordpress-for-android-1-0/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2010/02/wordpress-for-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using the Streamzap IR remote in Boxee on Ubuntu</title>
		<link>http://crashsystems.net/2010/01/streamzap-boxee-ubuntu/</link>
		<comments>http://crashsystems.net/2010/01/streamzap-boxee-ubuntu/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 03:53:18 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=308</guid>
		<description><![CDATA[As I mentioned last post, I am setting up a Linux multimedia system. This system will be running Boxee, a wonderful media center program that went into beta today. Though I will be able to use a laptop&#8217;s mouse and keyboard on it, I still wanted to be able to use a regular remote control. [...]]]></description>
			<content:encoded><![CDATA[<p>As I mentioned <a href="http://crashsystems.net/2010/01/x2x/">last post</a>, I am setting up a Linux multimedia system. This system will be running <a href="http://boxee.tv" target="_blank">Boxee</a>, a wonderful media center program that went into beta today. Though I will be able to use a laptop&#8217;s mouse and keyboard on it, I still wanted to be able to use a regular remote control. Though the computer is taking forever to ship, the remote came in today. After doing some research and asking around, I went with the <a href="http://www.thinkgeek.com/computing/accessories/5a20/" target="_blank">Streamzap</a> IR remote.</p>
<p>Getting this remote to work with Boxee was rather simple. First step, use a package manager to install the package <em>lirc</em>. During the package configuration, you will be prompted to select an IR device to use. Select <em>Streamzap PC Remote</em>. After the device has been selected, package configuration will ask about a transmitter device. Just select <em>None</em>. To test that the package is configured correctly, run the command <em>irw</em> in a terminal, then press buttons on the remote. If everything worked, you should see output consisting of a bunch of numbers, the button pressed on the remote, and the name of the remote.</p>
<p style="text-align: center;"><a href="http://crashsystems.net/wp-content/uploads/2010/01/lirc-configure.png"><img class="size-full wp-image-314  aligncenter" title="lirc-configure" src="http://crashsystems.net/wp-content/uploads/2010/01/lirc-configure.png" alt="" width="444" height="307" /></a></p>
<p>Next Boxee needs a config file for the remote. Copy <em>/opt/boxee/system/Lircmap.xml</em> to <em>$HOME/.boxee/Lircmap.xml</em>. Now open the <em>Lircmap.xml</em> copy that is in the UserData folder, and add the code from <a href="http://ubuntuforums.org/showpost.php?p=6441867&amp;postcount=2" target="_blank">this forum post</a> just before the ending <em>&lt;/lircmap&gt;</em> tag.</p>
<p>Save the file and open Boxee, and the Streamzap remote should now work.</p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2010/01/streamzap-boxee-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using x2x on Linux for KVM like goodness</title>
		<link>http://crashsystems.net/2010/01/x2x/</link>
		<comments>http://crashsystems.net/2010/01/x2x/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 00:57:00 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=303</guid>
		<description><![CDATA[Recently I purchased one of those little &#8220;nettop&#8221; computers to plug into my HDTV and act as my multimedia center (more on that when it arrives). I also purchased a IR remote, but I wanted a way to be able to use a keyboard and mouse on it as well, as it is more than [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I purchased one of those little &#8220;nettop&#8221; computers to plug into my HDTV and act as my multimedia center (more on that when it arrives). I also purchased a IR remote, but I wanted a way to be able to use a keyboard and mouse on it as well, as it is more than just a movie player. However, I didn&#8217;t want a physical keyboard/mouse, as that would look out of place.</p>
<p>After reading up on the subject, I decided to give <a href="http://synergy2.sourceforge.net/" target="_blank">Synergy</a> a try. Synergy lets you use use your keyboard and mouse on another computer over a network, just as if it was a second screen attached. Synergy looked promising, but several things about it did not work out for me.</p>
<p>Being a network application, Synergy consists of both a client app and a server app. It turns out that with Synergy the &#8220;server&#8221; is the computer with the keyboard and mouse you want to use on multiple machines. I&#8217;m sure this works fine for most people, but it does not make sense for my multimedia system. This computer will be on most of the time, being controlled by several different machines For my setup, the logical place for the &#8220;server&#8221; would be the multimedia system. I probably could have hacked it to make the client (running on my server) act more like a server, except each time the client app fails to connect to the server (running on my laptops), the time it waits for another connection increments.</p>
<p>When looking for Synergy alternatives, I found <a href="http://x2x.dottedmag.net/" target="_blank">x2x</a>. x2x is only designed for Linux, so it would not be usable for someone who needs to use a keyboard and mouse on multiple operating systems. I only use Ubuntu Linux at home, so this was not a problem for me. An advantage of x2x is that setup is very simple. First, install the x2x package (&#8220;x2x&#8221; in Ubuntu) on both machines, and openssh-server on the computer you want to control remotely. Then, from the computer with the keyboard and mouse you want to use on another system, run:</p>
<pre>ssh -X user@server x2x -south -to :0</pre>
<p>With this, you can now move your cursor beyond the bottom of your screen, onto the remote system. If you want to use a different edge of your screen, replace -south with -north, -east or -west. If you have key based authentication set up for ssh, you could stick this into the applications menu.</p>
<h3>Updated 08 January 2010</h3>
<p>It seems there is a bit of an <a href="https://bugs.edge.launchpad.net/ubuntu/+bug/471726" target="_blank">issue</a> with x2x in Ubuntu 9.10. Some people are seeing the following error when they try to run x2x:</p>
<pre>No protocol specified</pre>
<pre>x2x - error: can not open display :0</pre>
<p>To work around this issue until it is fixed, SSH into the box you want to remotely control, then run the following command:</p>
<pre>xauth merge /var/run/gdm/auth-for-$USER-*/database</pre>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2010/01/x2x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android Screenshots</title>
		<link>http://crashsystems.net/2009/07/android-screenshots/</link>
		<comments>http://crashsystems.net/2009/07/android-screenshots/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 01:07:29 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[multmedia]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=267</guid>
		<description><![CDATA[I just got done taking some screenshots of my snazzy Android phone. I ran into a bit of difficulty getting the DDMS (Dalvik Debug Monitor Service) tool running in Ubuntu 9.04 64 bit, but post #2 on this thread helped. To summarize: Use the package manager of your choice to install ia32-sun-java6-bin. Download the Android [...]]]></description>
			<content:encoded><![CDATA[<p>I just got done taking some screenshots of my snazzy Android phone. I ran into a bit of difficulty getting the DDMS (Dalvik Debug Monitor Service) tool running in Ubuntu 9.04 64 bit, but post #2 on <a href="http://groups.google.com/group/android-developers/browse_thread/thread/2077f2d8b385f54b/c855391abf432aee?pli=1" target="_blank">this thread</a> helped. To summarize:</p>
<ol>
<li>Use the package manager of your choice to install ia32-sun-java6-bin.</li>
<li><a href="http://developer.android.com/index.html" target="_blank">Download</a> the Android SDK for Linux, then extract the zip file.</li>
<li>In the SDK tools folder, open up the ddms file in your favorite text editor.</li>
<li>Modify line #72 to the following: java_cmd=&#8221;/usr/lib/jvm/ia32-java-6-sun/bin/java&#8221;</li>
</ol>
<p>Here are the screenshots I took:</p>

<div class="ngg-galleryoverview" id="ngg-gallery-10-267">


	
	<!-- Thumbnails -->
		
	<div id="ngg-image-158" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://crashsystems.net/wp-content/gallery/android-screenshots/1.png" title=" " class="thickbox" rel="set_10" >
								<img title="Home screen - Portrait" alt="Home screen - Portrait" src="http://crashsystems.net/wp-content/gallery/android-screenshots/thumbs/thumbs_1.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-159" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://crashsystems.net/wp-content/gallery/android-screenshots/2.png" title=" " class="thickbox" rel="set_10" >
								<img title="Home screen- Landscape" alt="Home screen- Landscape" src="http://crashsystems.net/wp-content/gallery/android-screenshots/thumbs/thumbs_2.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-160" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://crashsystems.net/wp-content/gallery/android-screenshots/3.png" title=" " class="thickbox" rel="set_10" >
								<img title="Application list on the move" alt="Application list on the move" src="http://crashsystems.net/wp-content/gallery/android-screenshots/thumbs/thumbs_3.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-161" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://crashsystems.net/wp-content/gallery/android-screenshots/4.png" title=" " class="thickbox" rel="set_10" >
								<img title="Application list. Gmote is awesome!" alt="Application list. Gmote is awesome!" src="http://crashsystems.net/wp-content/gallery/android-screenshots/thumbs/thumbs_4.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-162" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://crashsystems.net/wp-content/gallery/android-screenshots/5.png" title=" " class="thickbox" rel="set_10" >
								<img title="usic app. Unlike iPhone, I can use whatever music app I want." alt="usic app. Unlike iPhone, I can use whatever music app I want." src="http://crashsystems.net/wp-content/gallery/android-screenshots/thumbs/thumbs_5.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-163" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://crashsystems.net/wp-content/gallery/android-screenshots/6.png" title=" " class="thickbox" rel="set_10" >
								<img title="Full web browser." alt="Full web browser." src="http://crashsystems.net/wp-content/gallery/android-screenshots/thumbs/thumbs_6.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>As you can see, I&#8217;m running a clone of the theme on <a href="http://www.htc.com/www/product/hero/overview.html" target="_blank">HTC&#8217;s Hero</a> Android phone. This theme can be downloaded <a href="http://forum.xda-developers.com/showthread.php?t=520629">here</a>. All the install took was downloading the theme, putting it on my phone&#8217;s SD card as update.zip, booting into recovery mode and flashing the update. Of course, you&#8217;ll need a rooted G1 for this to work. I&#8217;m running JesusFreke&#8217;s wonderful 1.5 build. Read <a href="http://androidandme.com/2009/05/guides/beginners-guide-for-rooting-your-android-g1-to-install-cupcake/" target="_blank">this guide</a> for instructions for rooting your G1.</p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2009/07/android-screenshots/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Bing&#8217;s Ballmer Bias (in search of monkey boy)</title>
		<link>http://crashsystems.net/2009/06/bings-ballmer-bias-in-search-of-monkey-boy/</link>
		<comments>http://crashsystems.net/2009/06/bings-ballmer-bias-in-search-of-monkey-boy/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 22:21:06 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=261</guid>
		<description><![CDATA[Much has already been said about the fact that Microsoft&#8217;s shiny &#8220;new&#8221; search engine, Bing.com, happens to have a little bias. I think I just discovered a new example of this bias. Try finding the Monkey Boy video on both Google and Bing, and see which one&#8217;s auto-complete is the most helpful.]]></description>
			<content:encoded><![CDATA[<p><a href="http://crashsystems.net/wp-content/uploads/2009/06/monkey-boy-bing.png"><img class="aligncenter size-full wp-image-262" title="Searching for Monkey Boy" src="http://crashsystems.net/wp-content/uploads/2009/06/monkey-boy-bing.png" alt="Searching for Monkey Boy" /></a>Much has already <a href="http://linux.com/community/blogs/Bing-is-not-Google-but-it-is-a-spin-engine.-14904.html" target="_blank">been said</a> about the fact that Microsoft&#8217;s shiny &#8220;new&#8221; search engine, Bing.com, happens to have a little bias. I think I just discovered a new example of this bias. Try finding the <a href="http://www.youtube.com/watch?v=wvsboPUjrGc" target="_blank">Monkey Boy video</a> on both Google and Bing, and see which one&#8217;s auto-complete is the most helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2009/06/bings-ballmer-bias-in-search-of-monkey-boy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fighting Juno&#8217;s address book lock-in with Python</title>
		<link>http://crashsystems.net/2009/06/juno-address-book-converter/</link>
		<comments>http://crashsystems.net/2009/06/juno-address-book-converter/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 01:23:25 +0000</pubDate>
		<dc:creator>Douglass Clem</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://crashsystems.net/?p=254</guid>
		<description><![CDATA[This week I helped a friend with an OS re-install (XP unfortunately). He used Juno for his email service, which refused to work properly when re-installed. I helped him switch to Gmail, but it turns out that Juno refused to implement an export feature for their contacts. After a little hunting around, I discovered the [...]]]></description>
			<content:encoded><![CDATA[<p>This week I helped a friend with an OS re-install (XP unfortunately). He used Juno for his email service, which refused to work properly when re-installed. I helped him switch to Gmail, but it turns out that Juno refused to implement an export feature for their contacts. After a little hunting around, I discovered the text file the software used to store contacts, somewhere in it&#8217;s Program Files folder. What follows is a quick bit of code I wrote to convert the contacts into a CSV file. Hopefully it will be useful to someone else in their efforts to fight lock-in.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/python</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># import libraries</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">csv</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> entry<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;A simple data structure for each contact.&quot;&quot;&quot;</span>
    Name = <span style="color: #483d8b;">''</span>
    Phone = <span style="color: #483d8b;">''</span>
    Birthday = <span style="color: #483d8b;">''</span>
    Address = <span style="color: #483d8b;">''</span>
&nbsp;
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> contacts<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;This class will contain pure input from the Juno contacts file.&quot;&quot;&quot;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, <span style="color: #008000;">input</span><span style="color: black;">&#41;</span>:
        <span style="color: #808080; font-style: italic;"># Open the input file</span>
        readFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #008000;">input</span>, <span style="color: #483d8b;">'r'</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Put the header into list</span>
        header = entry<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        header.<span style="color: black;">Name</span> = <span style="color: #483d8b;">&quot;Name&quot;</span>
        header.<span style="color: black;">Email</span> = <span style="color: #483d8b;">'Email'</span>
        header.<span style="color: black;">Phone</span> = <span style="color: #483d8b;">&quot;Phone Number&quot;</span>
        header.<span style="color: black;">Address</span> = <span style="color: #483d8b;">&quot;Address&quot;</span>
&nbsp;
        <span style="color: #008000;">self</span>.<span style="color: #008000;">list</span> = <span style="color: black;">&#91;</span>header<span style="color: black;">&#93;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Put the input file into a list and close file</span>
        <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span> = readFile.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        readFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> parse<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Parse everything and put it in the list&quot;&quot;&quot;</span>
&nbsp;
        count = <span style="color: #ff4500;">0</span>
        <span style="color: #ff7700;font-weight:bold;">while</span><span style="color: black;">&#40;</span>count <span style="color: #66cc66;">&lt;</span> = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#41;</span> -<span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>:
            person = entry<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            count += <span style="color: #ff4500;">1</span> <span style="color: #808080; font-style: italic;"># Skips over the field specifying the contact as an entry            </span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Get email address</span>
            item = <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#91;</span>count<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">6</span>:-<span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>item == <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>:
                person.<span style="color: black;">Email</span> = <span style="color: #483d8b;">''</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                person.<span style="color: black;">Email</span> = item
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Throw alias into bit-bucket</span>
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Get first and last name</span>
            item = <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#91;</span>count<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">5</span>:-<span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>item == <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>:
                person.<span style="color: black;">Name</span> = <span style="color: #483d8b;">''</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                person.<span style="color: black;">Name</span> = item
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Get the phone number</span>
            item = <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#91;</span>count<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">14</span>:-<span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>item == <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>:
                person.<span style="color: black;">Phone</span> = <span style="color: #483d8b;">''</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                person.<span style="color: black;">Phone</span> = item
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Throw birthday into bit-bucket</span>
            count += <span style="color: #ff4500;">1</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># Get the address</span>
            item = <span style="color: #008000;">self</span>.<span style="color: black;">rawContent</span><span style="color: black;">&#91;</span>count<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">8</span>:-<span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: black;">&#40;</span>item == <span style="color: #483d8b;">''</span><span style="color: black;">&#41;</span>:
                person.<span style="color: black;">Address</span> = <span style="color: #483d8b;">''</span>
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                person.<span style="color: black;">Address</span> = item
&nbsp;
            <span style="color: #808080; font-style: italic;"># incriment count by four to get to the beginning of next entry</span>
            count += <span style="color: #ff4500;">4</span>
&nbsp;
            <span style="color: #808080; font-style: italic;"># add person to the list</span>
            <span style="color: #008000;">self</span>.<span style="color: #008000;">list</span> += <span style="color: black;">&#91;</span>person<span style="color: black;">&#93;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> output<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #483d8b;">&quot;&quot;&quot;Make a CSV file&quot;&quot;&quot;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Set up the output file</span>
        outFile = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'output.txt'</span>, <span style="color: #483d8b;">'w'</span><span style="color: black;">&#41;</span>
        output = <span style="color: #dc143c;">csv</span>.<span style="color: black;">writer</span><span style="color: black;">&#40;</span>outFile, delimiter=<span style="color: #483d8b;">','</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Iterate through self.list and write stuff</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> person <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">self</span>.<span style="color: #008000;">list</span>:
            output.<span style="color: black;">writerow</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>person.<span style="color: black;">Name</span>, person.<span style="color: black;">Email</span>, person.<span style="color: black;">Phone</span>, person.<span style="color: black;">Address</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
&nbsp;
        <span style="color: #808080; font-style: italic;"># Close the file</span>
        outFile.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

</pre>
]]></content:encoded>
			<wfw:commentRss>http://crashsystems.net/2009/06/juno-address-book-converter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
