<?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>Etherplex</title>
	<atom:link href="http://etherplex.org/feed" rel="self" type="application/rss+xml" />
	<link>http://etherplex.org</link>
	<description>Rick Dillon&#039;s home on the net...</description>
	<lastBuildDate>Mon, 12 Jul 2010 05:31:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Org-Mode Powered Literate Programming</title>
		<link>http://etherplex.org/archives/183</link>
		<comments>http://etherplex.org/archives/183#comments</comments>
		<pubDate>Mon, 12 Jul 2010 05:27:39 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://etherplex.org/?p=183</guid>
		<description><![CDATA[One of my first projects to push to GitHub was my Emacs initialization files. Emacs is precisely as powerful as Neal Stephenson suggests, but I find that people are unwilling to use it because they find it difficult to configure to do what they want. I thought that I might help by not only making [...]]]></description>
			<content:encoded><![CDATA[<p>One of my first projects to push to GitHub was my Emacs initialization files.  Emacs is precisely as powerful as <a href="http://www.emacswiki.org/emacs/NealStephenson">Neal Stephenson suggests</a>, but I find that people are unwilling to use it because they find it difficult to configure to do what they want.  I thought that I might help by not only making my Emacs configuration public, but by using Org-Mode and Org-Babel to make my Emacs initialization a literate program &#8212; one that doesn&#8217;t just have comments, but that is itself an executable document meant to be read by humans.</p>
<p>I completed the port this weekend, posted it to <a href="http://github.com/rpdillon/emacs-config">GitHub</a>, and am making a <a href="http://manpages.ubuntu.com/manpages/lucid/man1/notangle.1.html">weave</a> of the file available as a static page here on <a href="http://etherplex.org/static/emacs.html">Etherplex</a>.  I&#8217;ll be updating it as it changes, and hope someone finds it to be useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/183/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Moving to GitHub</title>
		<link>http://etherplex.org/archives/180</link>
		<comments>http://etherplex.org/archives/180#comments</comments>
		<pubDate>Mon, 12 Jul 2010 05:15:33 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://etherplex.org/?p=180</guid>
		<description><![CDATA[I&#8217;m a big fan of distributed version control for a lot of reasons, but sites like GitHub and BitBucket really strike at the heart of the issue: real coding should be a social phenomenon, if for no other reason than code is really about sharing ideas, and code should be addressed to human beings rather [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a big fan of distributed version control for a lot of reasons, but sites like <a href="http://github.com/">GitHub</a> and <a href="http://bitbucket.org/">BitBucket</a> really strike at the heart of the issue: real coding should be a social phenomenon, if for no other reason than code is really about sharing ideas, and code should be <a href="http://www-cs-faculty.stanford.edu/~uno/lp.html">addressed to human beings rather than to a computer</a>.</p>
<p>The self-hosted Mercurial repositories I used to host at http://code.etherplex.org are now gone, and the subdomain is now a redirect to my GitHub profile, where I&#8217;ll be migrating all my active and psuedo-active coding efforts.  While I tend to prefer Mercurial, the community at large has spoken, and I&#8217;m happy to use Git for the majority of my work if it helps engage the community.  So, head on over to <a href="http://code.etherplex.org">Code Etherplex</a> and check out what I&#8217;ve posted.  Not much yet, but I&#8217;ll be pushing a lot of my in-progress work to GitHub in the next couple of weeks.</p>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/180/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Importance of Decentralized Services</title>
		<link>http://etherplex.org/archives/156</link>
		<comments>http://etherplex.org/archives/156#comments</comments>
		<pubDate>Sun, 20 Jun 2010 17:20:01 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://etherplex.org/archives/156</guid>
		<description><![CDATA[The majority of this post was written before all the Facebook privacy concerns of May 2010 occurred, but those events make the whole issue much more relevant.I commented on a story about a user who loved AIM shortly after Buzz was launched, and, as I have in the past, I got reactions of confusion from [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>The majority of this post was written before all the Facebook privacy concerns of May 2010 occurred, but those events make the whole issue much more relevant.I <a href="http://www.google.com/buzz/rpdillon/QF3At1wi2NN/Centralized-messageing-a-la-AIM-ICQ-or-Facebook" target="_blank">commented on a story</a> about a user who loved AIM shortly after Buzz was launched, and, as I have in the past, I got reactions of confusion from some of my followers.</p>
</div>
<div>So I wanted to take a moment and outline some of the principles that guided the design of the internet, and identify some recent trends that violate those principles.</div>
<h3>Computers and Connections Are Unreliable</h3>
<div>When it was first designed, the internet was not a commercial enterprise.  It was designed around the concept that many computers all over the country/world that could talk to one another.  Because the computers are spread out geographically, in order to allow them to talk, they had to be connected by wires.  This led to a situation where wires were strung out across vast distances, and an obvious concern arose that the wires could be cut or otherwise damaged.  Another concern was that sometimes computers crashed, making them unavailable.  This was particularly damaging in the case where computers would send messages to each other through other computers.  For example, if a computer in New York wanted to send a message to a computer in San Diego, it might first hand the message to a computer in Chicago, and that computer would then hand the message to the destination in San Diego.  But what if the computer in Chicago lost power?  That would be a situation very much like a wire getting cut.</div>
<div>So, there was a realization that the network was vulnerable to attack and/or failure.  This led to an attitude being adopted that we couldn&#8217;t really count on any particular machine being reachable at any given time.  But, the designers still thought they could make use of the network to accomplish useful things, even with the uncertainty about how the computers were connected.  To do this, they designed the services on the web to be <em>federated</em>.</div>
<h3>Solution: Federated Services</h3>
<div>A federated service is designed the same way as states are under a federal government.  The United States are a collection of states, but they are joined together as a federation by a federal government.  If California has a budget crisis, the damage is somewhat contained to California; North Dakota can still have a budget surplus and a healthy economy (maybe).  So, the idea was to make services on the internet like that: if one service provider failed, the other service providers would be mostly unaffected.</div>
<div>The most successful example of a federated service is email.  Many different companies, organizations and individuals run mail servers, and those servers form a federation with each other to route mail through the entire system.  Yahoo might lose connectivity to the federation one day, and Yahoo&#8217;s users won&#8217;t be able to send mail anymore, but everyone else, like my mail server on <a href="http://etherplex.org" target="_blank">http://etherplex.org</a>, will still work.</div>
<div>So, federated services avoid having a single point of failure.  That means that in order to shut down email worldwide, there&#8217;s no single place that you could destroy; instead, you&#8217;d have to destroy thousands of places to make a real dent in the global email system.  There are lots of internet services that implement this model, and almost all of them were designed in the early days of the internet.  Internet Relay Chat (IRC), Usenet (newsgroups), email, and HTTP (web browsing!) are all federated, in that the crash of one computer in the network won&#8217;t prevent all the users of the service from accessing it.  This is good!  Imagine an internet where a crash on Microsoft&#8217;s web site would prevent users from accessing Amazon&#8217;s web site.  Because they are independent sites, this doesn&#8217;t happen.</div>
<div>How do you design a federated service?  Well, you get everyone to agree on how the servers should talk to one another.  This is called a specification.  Then, programmers can take the specification and program a computer to do what the specification says.  When they connect that computer to the network, it can now be part of the federation.  So, the specification for the service is openly available.  Because anyone can implement it, another property of federated services is that software that allows a computer to join the federation is often open source, giving even people with limited technical knowledge and resources the ability to join the federation.  There are open source web servers, IRC servers, newsgroup servers and email servers.</div>
<h3>The Trend Away From Federation</h3>
<div>The idea of federation gained favor before the internet was commercial.  In recent years, the commercialization of the internet has fueled an interest in create reliable servers with reliable connections.  This allows companies that want to make money to create services that no one else has by putting their offerings on reliable servers and not sharing the specification for them with anyone.  Lots of services follow this model: Google (in its search business), Twitter, MySpace, Facebook, Yahoo, AOL instant messenger, Skype, Ventrilo, TeamSpeak, and Apple&#8217;s MobileMe are all examples.  Another reason centralization is so attractive to companies is that it allows them to <a href="http://www.readwriteweb.com/archives/facebook_data_mining_truth_in_association.php" target="_blank">compile information about their users</a>, which provides credible backing for the internet&#8217;s biggest money-maker: advertising.  The theory goes that if you know your users well, then you can advertise to them more effectively.</div>
<div>But it&#8217;s not just that new services tend not be federated.  Companies have also found a way to &#8220;unfederate&#8221; the old services, like web sites and email.  Huge email providers, like Hotmail, Yahoo Mail and GMail have so many users that the loss of any one of those services really would cripple the email infrastructure.  Running a web server is fairly easy, but many online startups need to grow their business quickly, and buying computers and hiring an administrator to run hundreds of web servers is harder.  So, Amazon makes their &#8220;cloud&#8221; of computers available for rent.  As online startups need more computers, they just rent compute power from Amazon, which is cheaper and easier than trying to manage their own servers.  The problem with this is that when Amazon&#8217;s <a href="http://techcrunch.com/2008/02/15/amazon-web-services-goes-down-takes-many-startup-sites-with-it/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+Techcrunch+%28TechCrunch%29" target="_blank">collection of computers goes offline</a>, all those companies that relied on them go offline as well.  So, what was once federated is now centralized.</div>
<h3>What We&#8217;ve Lost, And How We Can Get It Back</h3>
<div>What&#8217;s the problem with centralization?  Well, it leads to systems that are prone to failure in way federated systems are not.  It makes users dependent on a single company for a service they might have come to depend on.  It allows one entity to collect information in one place about users.  Because centralized services don&#8217;t have to play nicely with the rest of the internet, it makes it possible for users to put data into that service, but not be able to get that data back out.  What does it mean to get your data &#8220;out&#8221; of a service?  With email, it means being able to download it to your computer.  With Twitter, it means downloading an archive of all your posts.  With Facebook, you should be able to get an archive with all your notes, wall posts, photos and chat history.  With Google Docs, it means I should be able to download, in bulk, my documents in a format that can be edited on my own computer.  With a contact list, you should be able to export your contacts to vCard or CSV format.  Some services offer this kind of data extraction, but many do not.  That means that users will spend time uploading and organizing their data with a service, but if they want to take that data elsewhere, they have to start over.  This gives the company a sort of &#8220;lock-in&#8221; competitive advantage, but is bad for users, since it makes it hard to choose the best service since they&#8217;ll tend to stick with the service they are already using because the switching cost is so high.</div>
<h3>The Three Critical Questions</h3>
<div>So, when you choose to use various services on the web, it is important to evaluate them in terms of both what it costs to join them, and what it would cost to switch away from them.  To crystallize your thinking, it is useful to have some questions already outlined that help you determine whether a service is at risk of locking you in.</div>
<div>
<ol>
<li><strong>Does this service operate with other services of its type?</strong><br />
If it is a messaging service, social network or chat service, does it allow you to chat with other providers?  If not, then be aware that you&#8217;ll have to choose your service based on where your friends are.  This is bad for the consumer, but good for the business: it leads to an avalanche effect in which one service tends to definitively &#8220;win&#8221;, at least for a while.  See &#8220;Facebook&#8221;.  Compare the situation with social networks with that of email providers.</li>
<li><strong>Can I only access the service in a web browser, or does it provide a way for other programs to interact with it?</strong><br />
This is related to the notion that the service provides a way for programmers to access its functionality (this is known to programmers as an &#8220;API&#8221;, or application programming interface.  It is a form of openness, but by no means guarantees federation: Twitter, for example, has an API, but is not federated.  Still, it&#8217;s nice to be able to update Twitter with the tool of your choice, whether it be the browser, a desktop client, or on your mobile.</li>
<li><strong>If I need (or want) to leave this service, can I get my data out of it?</strong><br />
If it is a service whose value lies in storing your data, how easy is it to get you data out of it, into a standard format that you could import into a new service or program?  For email, usually you can extract your data over POP or IMAP and store it however you like.  For social networks, this topic is still largely unexplored.  For photos, there are services, like Picasa, that allow entire albums to be downloaded at full resolution.  Other services, like Facebook, permanently degrade the quality of the photos uploaded, and provide no mechanism to even get those back to your computer.</li>
</ol>
</div>
<div>AIM supports instant messaging, but so does <a href="http://www.jabber.org/" target="_blank">Jabber</a> (which is what powers GTalk), and Jabber can interact with many chat providers.  A federated version of Twitter exists called <a href="http://identi.ca" target="_blank">identi.ca</a>, which supports <a href="http://openmicroblogging.org/" target="_blank">OpenMicroBlogging</a>, a standard specification for Twitter-like services (that Twitter itself doesn&#8217;t implement!)  One of the reasons I support Google more often than its competitors is that they stand out as a company that supports federated services more than any other major internet player.  From <a href="https://wave.google.com/wave/" target="_blank">Google Wave</a> to <a href="http://code.google.com/p/webfinger/" target="_blank">WebFinger</a>, Google integrates federated services into their architecture whenever possible.  When they deployed a competitor to AIM and ICQ, it was Jabber-based.  When they deployed a successor to email, it was open and federated.  It&#8217;s good to be on the look-out for companies that understand the network and understand that the health of the internet fundamentally relies on federated services.</div>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/156/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on Apple’s Hypocricy</title>
		<link>http://etherplex.org/archives/155</link>
		<comments>http://etherplex.org/archives/155#comments</comments>
		<pubDate>Fri, 04 Jun 2010 14:48:02 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://etherplex.org/archives/155</guid>
		<description><![CDATA[This one is going to be as short as I can make it, and to the point.  Apple is getting more and more ridiculous in their anti-Flash arguments.  Anyone who knows me knows I hate Flash (because it breaks the web&#8230;especially keyboard-based control of my browser), but it should be my choice whether to use [...]]]></description>
			<content:encoded><![CDATA[<div class='posterous_autopost'>This one is going to be as short as I can make it, and to the point.  Apple is getting more and more ridiculous in their anti-Flash arguments.  Anyone who knows me knows I <i>hate</i> Flash (because it breaks the web&#8230;especially keyboard-based control of my browser), but it should be <i>my</i> choice whether to use it, not Apple&#39;s.
<p />
<div>So, I brought this up a few weeks ago when Steve Jobs posted his <a href="http://www.apple.com/hotnews/thoughts-on-flash/">Thoughts On Flash</a>.  Taken out of context:</div>
<p />
<div><span style="font-family: arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); font-style: italic; line-height: 14px;">&quot;Adobe’s Flash products are 100% proprietary. They are only available from Adobe, and Adobe has sole authority as to their future enhancement, pricing, etc. While Adobe’s Flash products are widely available, this does not mean they are open, since they are controlled entirely by Adobe and available only from Adobe. By almost any definition, Flash is a closed system.&quot;
<p /> <span style="font-style: normal;">Everyone that reads the post will know I pulled this out of context&#8230;but his passing reference to Apple&#39;s proprietary products doesn&#39;t even begin to scratch the surface of how absurdly closed the whole iPhoneOS ecosystem is.  Apple is guilty of all that and more.</span></span></div>
<p />
<div><span style="font-family: arial, sans-serif; font-size: 13px; color: rgb(51, 51, 51); font-style: italic; line-height: 14px;"><span style="font-style: normal;">But Jobs has a plan.  And that plan is HTML5.  Apple&#39;s hypocrisy has reached new heights with the release of the <a href="http://www.apple.com/html5/">HTML5 Showcase</a>, a source for applications that don&#39;t use Adobe&#39;s proprietary add-ons to the web.  No, these apps are based on &quot;</span></span>web standards [that] are open, reliable, highly secure, and efficient. They allow web designers and developers to create advanced graphics, typography, animations, and transitions. Standards aren’t add-ons to the web. They are the web. And you can start using them today.&quot;</div>
<p />
<div>Awesome, let&#39;s get started!  Oh wait:</div>
<p />
<div style="text-align: center;"><a href='http://posterous.com/getfile/files.posterous.com/rpdillon/OS9OhspzLzbz0rudcE3FCrR9Vc84NfdkUrEHiRMNH8jLhNE6u1Am5mL9rw3y/safari.png'><img src="http://posterous.com/getfile/files.posterous.com/rpdillon/DfmpqaVTILHIhatq65mlVsPeODVdFmSDZPquxnFz2I5srd4iwaP0nFyFXtDI/safari.png.scaled.500.jpg" width="500" height="371"/></a> </div>
<p />
<div>So&#8230;let&#39;s get this straight &#8212; Apple doesn&#39;t want you to download anything from Adobe, but they&#39;ll be happy to have you install a new browser.  At least Flash is available on my Ubuntu laptop that I&#39;m typing this on.</div>
<p />
<div>All this is to say: it seems as though Apple is becoming less and less reasonable in its positions as it gains market share.  I recently ditched my Macbook for a Ubuntu-powered Dell Latitude 13n (which I&#39;m typing this on).  I have to say, I haven&#39;t been disappointed.  I&#39;ll be replacing my Mac desktop as well if Apple can&#39;t convince me that this is all some sort of fever-dream aberration on their part.</div>
<p style="font-size: 10px;">  <a href="http://rpdillon.posterous.com/thoughts-on-apples-hypocricy">via Rick&#8217;s Posterous</a>   </p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/155/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Larry Lessig on Remixing (2007)</title>
		<link>http://etherplex.org/archives/154</link>
		<comments>http://etherplex.org/archives/154#comments</comments>
		<pubDate>Thu, 13 May 2010 15:46:01 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Intellectual Property]]></category>

		<guid isPermaLink="false">http://etherplex.org/archives/154</guid>
		<description><![CDATA[I feel like I&#39;m cheapening the &#34;Favorite this video&#34; action on Youtube because I want to do it for every TED Talk I watch.  Actually, I&#39;m probably cheapening the TED Talks; they are some of the most insightful, relevant and intelligent material I&#39;ve ever watched. Larry Lessig did a talk in 2007 on the shear [...]]]></description>
			<content:encoded><![CDATA[<div class='posterous_autopost'>I feel like I&#39;m cheapening the &quot;Favorite this video&quot; action on Youtube because I want to do it for every TED Talk I watch.  Actually, I&#39;m probably cheapening the TED Talks; they are some of the most insightful, relevant and intelligent material I&#39;ve ever watched.
<p />
<div><a href="http://en.wikipedia.org/wiki/Lawrence_Lessig">Larry Lessig</a> did a talk in 2007 on the shear between the process by which people exercise creativity and current laws that restrict those very creative instincts.</div>
<p />
<div><object height="417" width="500"><param name="movie" value="http://www.youtube.com/v/7Q25-S7jzgs&#038;hl=en&#038;fs=1" /></param><param name="wmode" value="window" /><param name="allowFullScreen" value="true" /></param><param name="allowscriptaccess" value="always" /></param><embed src="http://www.youtube.com/v/7Q25-S7jzgs&#038;hl=en&#038;fs=1" allowfullscreen="true" type="application/x-shockwave-flash" allowscriptaccess="always" wmode="window" height="417" width="500"></embed></object></div>
<p />
<div>Lessig asserts that the language that &quot;our kids&quot; speak is different than ours, in that we have been raised as a generation of content consumers, but our kids, largely because of the internet, have grown up with the instinct that they are able to both read and write content.  The fact that, in most cases, the participatory nature of of the &quot;write&quot; aspect is perceived to be in violation of copyright laws, is incidental, and effectively serves only to create an entire generation of criminals.</div>
<p />
<div>Jonathon Schwartz, when he was CEO of Sun Microsystems, one said that we had moved beyond the information age, and were entering the <a href="http://blogs.sun.com/jonathan/entry/inevitability">Participation Age</a>.  As he said, &quot;If the Information Age was passive, the Participation Age is active.&quot;</div>
<p />
<div>As insightful and well presented talk as it was, Lessig does not really address the fact that people who were born before the United States Civil War began only just (in 2010) had their works <a href="http://www.publicdomainworks.net/stats/year/2010">move into the public domain</a>.  This issue is tangential to his core closing point, in that elements that deeply define our culture, and that were written before any person on the planet was born, somehow are still under copyright.  Lessig talks of laws violating common sense, and I think our current copyright terms clearly are among them.  It&#39;s too bad he didn&#39;t broach the topic in his talk.</div>
<p style="font-size: 10px;">  <a href="http://rpdillon.posterous.com/larry-lessig-on-remixing-2007">via Rick&#8217;s Posterous</a>   </p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/154/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Low Learning Curve</title>
		<link>http://etherplex.org/archives/153</link>
		<comments>http://etherplex.org/archives/153#comments</comments>
		<pubDate>Sun, 25 Apr 2010 13:23:18 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://etherplex.org/archives/153</guid>
		<description><![CDATA[In computers, why is &#34;easy to use&#34; the metric everyone cares about?  I was listening to some Linux-inspired electro-industrial today at 5:50 AM on Jamendo (long story), and the vocal track started off with &#34;I&#39;ve found it a very very easy to use system.&#34; Forget easy to use.  No one gets into a Corvette or a [...]]]></description>
			<content:encoded><![CDATA[<div class='posterous_autopost'>In computers, why is &quot;easy to use&quot; the metric everyone cares about?  I was listening to some <a href="http://www.jamendo.com/get2/stream/track/m3u/?track_id=503683&amp;order=trackno_asc">Linux-inspired electro-industrial</a> today at 5:50 AM on Jamendo (long story), and the vocal track started off with &quot;I&#39;ve found it a very very easy to use system.&quot;
<p />
<div>Forget easy to use.  No one gets into a Corvette or a Porsche and says &quot;Oh yeah, this is so so easy to drive.&quot;  Heck no.  Those are cars that would shred a beginning driver.  Good, because those cars are optimized to be awesome, not to conform to some idealized notion of &quot;easy&quot;.  But enough about cars.</div>
<p />
<div>Linux is optimized for power.  As the man page for eshell says:</div>
<p />
<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div>
<div>The role of a command shell is to give you more control over what</div>
</p></div>
<div>
<div>your computer does for you.  Not everyone needs this amount of control,</div>
</div>
<div>
<div>and it does come at a cost: Learning the necessary script commands to</div>
</div>
<div>
<div>express what you want done&#8230; But if you find yourself using your</div>
</p></div>
<div>
<div>computer frequently enough, it is more than worthwhile in the long run.</div>
</div>
<div>
<div><b>Any tool you use often deserves the time spent learning to master it.</b></div>
</div>
<p /></blockquote>
<p> Emphasis mine.  Optimizing for a beginner is a huge mistake, in my opinion.  Sure, if you want to make a lot of money in this early stage of computer development, when adoption isn&#39;t very high yet, then it makes sense to optimize the entire experience for beginners.  But in the long haul, we will develop a population of experienced users, not beginners.  And once the average users has not years, but decades of experience with computers, shouldn&#39;t we admit that any tool you use that much deserves the time spent learning to master it?  And, given that you are going to master a tool, it makes sense to choose a tool worthy of your time.  That should be the analysis new users should be making, rather than seeing how much they can get done in the first 15 seconds using the system.
<p />
<div>As the <a href="http://en.wikipedia.org/wiki/Ion_(window_manager)#Controversy">ironically defunct</a> Ion Window Manager&#39;s author, <span style="font-family: sans-serif; font-size: 13px; line-height: 19px;">Tuomo Valkonen,<span style="font-family: arial; line-height: normal; font-size: small;"> said (before leaving Linux and developing solely for Windows):</span></span></div>
<p />
<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><span style="font-family: Times New Roman;">So-called “modern desktop environments” converge on total unusability, and present-day mainstream graphical user interfaces in general are far less usable than they are praised to be.</span><span style="font-family: Times New Roman;"> <i>Usability</i></span><span style="font-family: Times New Roman;"><em> simply does not equal low learning curve</em></span><span style="font-family: Times New Roman;">, and hiding system details from the user, as the Official Truth seems to be these days.</span></div>
<p /></blockquote>
<p>He was right.  It&#39;s too bad he left Linux to develop closed software for Windows.
<p style="font-size: 10px;">  <a href="http://rpdillon.posterous.com/low-learning-curve">via Rick&#8217;s Posterous</a>   </p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/153/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.jamendo.com/get2/stream/track/m3u/?track_id=503683&amp;amp" length="0" type="audio/x-mpegurl;" />
		</item>
		<item>
		<title>Speed Problems: C vs. Gambit Scheme</title>
		<link>http://etherplex.org/archives/150</link>
		<comments>http://etherplex.org/archives/150#comments</comments>
		<pubDate>Mon, 15 Mar 2010 04:36:53 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://etherplex.org/archives/150</guid>
		<description><![CDATA[My Gambit Scheme code is taking 500 times longer than the equivalent C program, and I don&#8217;t know why. So, there&#8217;s a really horrible way to spend processor time to calculate pi that involves taking the unit square and inscribing a circle inside it with radius 1/2.  You then partition the square into N partitions [...]]]></description>
			<content:encoded><![CDATA[<p>My Gambit Scheme code is taking 500 times longer than the equivalent C  program, and I don&#8217;t know why.</p>
<p>So, there&#8217;s a really horrible way  to spend processor time to calculate pi that involves taking the unit  square and inscribing a circle inside it with radius 1/2.  You then  partition the square into N partitions on each axis (the code below uses  12,000).  This gives you a unit square and places it on a grid with  12,000 on each side, for a total number of grid squares of 12,000^2 =  144,000,000.  The algorithm then iterates through the center of each  square and checks to see if it is inside of the circle.  It sums the  number of points inside the circle, divides it my the total number of  points, and multiplies by 4, which produces an approximation of pi.</p>
<p>For those already initiated, this is like a deterministic Monte  Carlo approach.</p>
<p>Here&#8217;s the C implementation (from the professor of my Architecture  of Parallel Computers course):</p>
<pre><span style="color: #0000cd;">#include</span> <span style="color: #008b00;">&lt;stdio.h&gt;</span>

<span style="color: #0000ff;"><strong>int</strong></span> <span style="color: #ff0000;"><strong>main</strong></span>(<span style="color: #0000ff;"><strong>int</strong></span> <span style="color: #000000;">argc</span>, <span style="color: #0000ff;"><strong>char</strong></span>*<span style="color: #000000;">argv</span>[])

{
  <span style="color: #0000ff;"><strong>int</strong></span> <span style="color: #000000;">numPartitions</span> = 12000;
  <span style="color: #0000ff;"><strong>int</strong></span> <span style="color: #000000;">circleCount</span> = 0;
  <span style="color: #0000ff;"><strong>double</strong></span> <span style="color: #000000;">interval</span> = 0, <span style="color: #000000;">pi</span> = 0;

  <span style="color: #0000ff;"><strong>int</strong></span> <span style="color: #000000;">i</span> = 0, <span style="color: #000000;">j</span> = 0;

  interval = 1.0/(<span style="color: #0000ff;"><strong>double</strong></span>)numPartitions;
  <span style="color: #4682b4;"><strong>for</strong></span> (i = 0; i &lt; numPartitions; i++) {

    <span style="color: #0000ff;"><strong>double</strong></span> <span style="color: #000000;">a</span> = (i + .5)*interval;
    <span style="color: #4682b4;"><strong>for</strong></span> (j = 0; j &lt; numPartitions; j++) {
      <span style="color: #0000ff;"><strong>double</strong></span> <span style="color: #000000;">b</span> = (j + .5)*interval;

      <span style="color: #4682b4;"><strong>if</strong></span> ((a*a + b*b) &lt;= 1) circleCount++;
    }
  }

  pi = (<span style="color: #0000ff;"><strong>double</strong></span>)(4*circleCount)/(numPartitions * numPartitions);

  printf(<span style="color: #008b00;">"Estimate of pi is: %10.8lf\n"</span>, pi);

  <span style="color: #4682b4;"><strong>return</strong></span> 0;
}
</pre>
<p>Here&#8217;s the (mostly equivalent, I hope) Scheme  implementation:</p>
<pre>(<span style="color: #4682b4;"><strong>define</strong></span> (<span style="color: #ff0000;"><strong>main</strong></span> args)
  (<span style="color: #4682b4;"><strong>let*</strong></span> ((partitions 12000)
         (increment (expt partitions -1))
         (count 0))

    (<span style="color: #4682b4;"><strong>do</strong></span> ((y 0 (+ 1 y)))
        ((= partitions y) (* 4 (/ count (* partitions partitions))))
      (<span style="color: #4682b4;"><strong>let</strong></span> ((b (* increment (+ y .5))))
        (<span style="color: #4682b4;"><strong>do</strong></span> ((x 0 (+ 1 x)))

            ((= partitions x))
          (<span style="color: #4682b4;"><strong>let</strong></span> ((a (* increment (+ x .5))))
            (<span style="color: #4682b4;"><strong>if</strong></span> (&lt; (+ (* a a) (* b b)) 1)
                (set! count (+ 1 count)))))))))

(display (string-append (number-&gt;string (exact-&gt;inexact (main '()))) <span style="color: #008b00;">"\n"</span>))
</pre>
<p>OK, so, running these on my three-year-old Intel Core 2 Duo  T7200 (under Linux 2.6.31), the C version takes 1.03 seconds,  consistently.  The Scheme version, compiled with Gambit Scheme 4.6.0,  takes about 8 minutes 19 seconds.  I am using a complied binary of the  Scheme code, and Gambit was built for the machine I&#8217;m running it on,  i.e. &#8211;enable-single-host  was supplied to the configure  script.</p>
<p>So, the point of this post is not really that Scheme is slow &#8212; in  fact, I vastly prefer it.  Rather, I&#8217;m looking for some input from  people more knowledgeable in Scheme as to what I&#8217;m doing wrong here.  I  assume do is  well optimized, but I&#8217;m I suffering because of the let* or nested lets?  What&#8217;s killing  my performance?</p>
<p>I&#8217;ll try to profile it, but I&#8217;m not sure how to do that in a way  that traces back to the Scheme source after it&#8217;s been compiled and  linked.  The is the first time I&#8217;ve used Gambit (I used PLT in the past,  and I&#8217;ve done quite a bit of work in Clojure on the JVM), so I could  use advice from anyone that knows the C or Gambit environments.</p>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/150/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>RSI Woes, Finally Solved</title>
		<link>http://etherplex.org/archives/149</link>
		<comments>http://etherplex.org/archives/149#comments</comments>
		<pubDate>Thu, 11 Feb 2010 04:06:17 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://etherplex.org/archives/149</guid>
		<description><![CDATA[I&#39;ve had RSI/carpal tunnel syndrome for about ten years now, and last week, I finally found a solution that didn&#39;t involve surgery. A Tiny Bit of History My freshman year I enjoyed my new-found freedom in a few different ways, but one way playing computer games whenever I felt like it. I played a lot of Quake [...]]]></description>
			<content:encoded><![CDATA[<div class='posterous_autopost'>
<div style="font-family: Times, serif; font-size: 16px;">
<p>I&#39;ve had RSI/carpal tunnel syndrome for about ten years now, and last week, I finally found a solution that <i>didn&#39;t</i> involve surgery.</p>
<div class="outline-2">
<h2>A Tiny Bit of History</h2>
<div>
<p>My freshman year I enjoyed my new-found freedom in a few different ways, but one way playing computer games whenever I felt like it. I played a lot of Quake online. Then Quake 2 and Quake 3. Half-life and Counterstrike held my attention for a few months. By the time I got into Everquest, my wrist had already accumalated probably close to five thousand hours of mousing time, and my main character in Everquest accumulated close to 120 <i>days</i> of play time before I finally quit. During that time, I didn&#39;t think much about my wrists, but my bad habits caught up with me shortly after graduation (in 2000), and my desktop gaming really declined because of persistent wrist pain in my mousing hand.</p>
</p></div>
</div>
<div class="outline-2">
<h2>Possible Solutions</h2>
<div>
<p>I didn&#39;t give up without a fight, mind you. I tried more ergonomic mice, switched to trackballs to minimized wrist movement, added various wrist braces, consulted with ergonomics professionals on the height of my desk and chair, and used various wrist rests. As a professional programmer, I&#39;ve optimized all my programming (and other computer use) around extensive use of the keyboard. This ended up being a good thing simply because it sped everything up so much, but the wrist problems remained; even after just a few minutes of using a mouse (rather than a trackball), my wrist would start to flare up with pain that could last hours or even a whole day.</p>
</p></div>
</div>
<div class="outline-2">
<h2>VerticalMouse to the Rescue</h2>
<div>
<p>In addition to surgery, I had looked at another possible soluion: the Evoluent VerticalMouse 3. It feel neatly into the it-might-work-but-it-will-cost-$100-plus-shipping-to-find-out category. There are lots of products that didn&#39;t quite work, and there was no reason to believe the VerticalMouse would be the solution.</p>
<p>Last week, however, I got to talking to some of my friends about my ongoing problems, which they&#39;d all heard me complain about for the past 5 or so years. We discussed making some kind of homegrown solution, and as we were engrossed in that discussion, one of my friends slid his phone over to me to show me an email reciept for the VerticalMouse he&#39;d just purchased as we had been talking, as if to say &quot;Screw it, if you&#39;re not going to give this thing a shot, I&#39;ll force you to by buying you one!&quot;.</p>
<p>Two days later, it arrived, and I swapped out my Logitech Cordless Optical Trackman (awesome trackball, by the way) for the VerticalMouse, and after more than 20 hours mousing with it this past week, in both games and on the desktop, I can safely say it has resolved 95% of my problems. It&#39;s actually a pretty nice device. It has native 1200dpi resolution, and the wireless version is very responsive, since it never shuts the optical sensor off. Despite always being on, it still has about a three month battery life when running on a fresh pair of AA alkalines.</p>
<p>I can&#39;t say exactly how the VerticalMouse works for others, but it has really helped me. I have no vested interest in pushing the VerticalMouse, but maybe someone who has had similar problems might find my experience to be an interesting data point in their searches for a solution.</p>
</p></div>
</div>
</div>
<p style="font-size: 10px;">  <a href="http://rpdillon.posterous.com/rsi-woes-finally-solved">via Rick&#8217;s Posterous</a>   </p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/149/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on Google Nexus One</title>
		<link>http://etherplex.org/archives/147</link>
		<comments>http://etherplex.org/archives/147#comments</comments>
		<pubDate>Tue, 09 Feb 2010 08:20:34 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://etherplex.org/archives/147</guid>
		<description><![CDATA[I Love Gadgets Anyone who knows me can tell you that I&#8217;m that &#8220;gadget guy&#8221;. I have tons of little devices of all sorts lying around, from digital audio players to full fledged portable media players. Some I thought would be wonderful but never quite worked out as well as I hoped (Cowon O2), while [...]]]></description>
			<content:encoded><![CDATA[<div class="posterous_autopost">
<div style="font-family: Times, serif; font-size: 16px;">
<div class="outline-2">
<div id="outline-container-1">
<h2 id="sec-1">I Love Gadgets</h2>
<div id="text-1">
<p>Anyone who knows me can tell you that I&#8217;m that &#8220;gadget guy&#8221;. I have tons of little devices of all sorts lying around, from digital audio players to full fledged portable media players. Some I thought would be wonderful but never quite worked out as well as I hoped (Cowon O2), while others should have been a waste of money, but I ended up using a ton and loving (PSP Go).</p>
<p>As such, it makes sense that I have bought and used a fair number of cell phones. In the past year, I have tracked Android&#8217;s development quite closely, having never really been satisfied with the offerings of the elephant-in-the-room iPhone. I bought a &#8220;dev phone&#8221; Google G1 in December 2008, and in August 2009 decided to switch to TMobile and get a &#8220;MyTouch 3G&#8221; (HTC Magic), since TMobile seemed to have embraced Android more than other carriers. Despite the having just purchased the MyTouch, I was compelled to buy a Nexus One the day it was released. But, before I get to that, let me digress a moment into the problems Android solves.</p>
</div>
</div>
<div id="outline-container-2">
<h2 id="sec-2">The Problem With The iPhone</h2>
<div id="text-2">
<p>As I alluded to above, I&#8217;m less than pleased with the iPhone. Why, you may wonder, would I be dissatisfied with the phone that has obviously enchanted so many? The reasons are few and simple.</p>
<p>First, it is a closed platform, insofar as Apple has final (opaque) say over what applications can run on it. I don&#8217;t tolerate that in my computers, and there&#8217;s no reason I should tolerate it in my cell phones. How does this affect me? Well, I use Google Voice, for example, and Apple has consistently worked to <a href="http://news.cnet.com/8301-13579_3-10297618-37.html">block Google Voice</a> from ever making its way to the iPhone. There are lots of examples like this. In the end of 2008, Apple <a href="http://arstechnica.com/apple/news/2008/09/apple-denies-iphone-podcast-app-for-duplicating-itunes.ars">blocked a podcasting application</a> because it &#8220;duplicated the functionality of iTunes&#8221;, when it was clear to everyone involved that the app added quite a bit functionality absent from iTunes. Most recently it has come to light that Apple will outright <a href="http://apple.slashdot.org/story/10/02/05/163253/Mentioning-Android-Is-a-No-No-In-iPhone-App-Store?from=rss">reject any app</a> that mentions Android. They are also now <a href="http://www.eweek.com/c/a/Mobile-and-Wireless/Apple-Blocks-iPhone-Developers-From-Using-GPS-For-Targeted-Ads-160565/">forbidding apps</a> that use the iPhone&#8217;s location service to serve geographically relevant ads. The point is, Apple has declared that they <em>own</em> not only all the apps that will ever appear on the device, but that they reserve the right to prevent any app from ever reaching the device, even for reasons that were <em>previously unannounced</em>. As a developer, I find this oppressive. It can cost tens of thousands of dollars (or more!) to develop an app and submit it, and only then do you find that, despite your best efforts, Apple rejects it, resulting in a total loss for the developers.</p>
<p>What else does a closed platform prevent? Well, Free Software, of course. Because Apple charges an end-user $100 to allow them to compile code for their phone and install it, it effectively prevents regular users from getting the source to an app, compiling it, and installing it for their own use. This restriction is in addition to the distribution restrictions outlined above.</p>
<p>At this point, if you&#8217;re still reading, I&#8217;m sure you&#8217;re thinking &#8220;Yeah, I get it Rick. It&#8217;s closed…but that doesn&#8217;t really affect me <em>that</em> much. What&#8217;s the real problem?&#8221;</p>
<p>Well, the second problem is that Apple prioritized <em>battery life</em> over <em>utility</em>. It&#8217;s a straight trade-off, and in the end, it&#8217;s a judgement call. I just think Apple made the wrong decision. The iPhone doesn&#8217;t multitask. That means it literally can&#8217;t do two things at once. And once you&#8217;ve had a phone that does, you can&#8217;t imagine life without it. Which leads me neatly into my review of the Nexus One.</p>
</div>
</div>
<div id="outline-container-3">
<h2 id="sec-3">The Virtues of Android</h2>
<div id="text-3">
<p>For a device so obviously inspired by the iPhone, Google made so many decisions differently, and it&#8217;s kind of surprising the Nexus One appears to be so similar to the iPhone.</p>
<p>Whereas the iPhone OS is closed, Android is open, and used by dozens of companies around the globe.</p>
<p>Android&#8217;s market allows apps openly, and even if you can&#8217;t distribute your app through the market for some reason, you can still host it on your own site and have users install it directly. Kind of like how computers work.</p>
<p>Android has multitasking. This means you can stream Internet radio in your car while having your phone navigate you to your destination. The phone will pause the music to speak the directions to you, and then resume where it left off. It will notify you of incoming email or instant messages all the while, and update weather and news in the background to make sure that when you do glance at it, everything is up-to-date.</p>
</div>
</div>
<div id="outline-container-4">
<h2 id="sec-4">The Nexus One</h2>
<div id="text-4">
<p>But so far, all I&#8217;ve mentioned are the benefits of Android. Why is the Nexus One special?</p>
<p>Polish. The phone is a pleasure to use. The screen is bright and large, with high resolution (800&#215;480). The chip powering the phone is the fastest phone chip in the world, running at 1 GHz. This means that where previous generations of Android ran sluggishly on their hardware, the Nexus One is as smooth as butter.</p>
<p>The Nexus One makes use of that power. It integrates 3D in subtle and stylish ways (like in the gallery application). It offers &#8220;live wallpapers&#8221; that add a bit of shine to the user experience that makes you feel like you&#8217;re holding a special piece of technology. The speed of everything makes the phone extremely usable; you don&#8217;t end up waiting for the phone to do something. This makes the apps much more useful, so much so that I often just check email, Twitter and Facebook on my phone, rather that messing with my laptop.</p>
<p>It also integrates voice recognition in an unprecedented way. Anything from &#8220;Directions to In-N-Out&#8221; to &#8220;Call Dad&#8221; are understood clearly, even in noisy situations. If an explicit command is not given, a Google search is executed. But other than just launching activities, voice is integrated into the keyboard. Got a text or instant message? Instead of typing my response, I usually just say it. That saves time, and allows me to respond to short texts quickly as I walk into the store, rather than stopping and taking the time to type them out.</p>
</div>
</div>
<div id="outline-container-5">
<h2 id="sec-5">Recommended Apps?</h2>
<div id="text-5">
<p>So, in my 13+ months of Android use, what do <em>I</em> use? Seesmic for Twitter access. Facebook to check what&#8217;s up with my friends on the go. NewsRob is incredible for reading Google Reader on the go. I use Advanced Task Manager to manage the processes on the phone (remember, it multitasks!). Aldiko is a superb little ebook reader application that offers seamless download of classic books. I use TuneWiki for music, and I&#8217;ve even bought music using the AmazonMP3 app and played it immediately. I like QR Codes, so I use ZXing&#8217;s Barcode Scanner more frequently that you&#8217;d imagine.</p>
<p>In the realm of games, I have to hand it to Vexed Pro, a version of my favorite puzzle game of all time I used to play on the Palm Pilot. I also play CrystalLight Defense, Robo Defense, Radiant and Jewellust, all of which are well worth the couple of bucks I paid for them.</p>
</div>
</div>
<div id="outline-container-6">
<h2 id="sec-6">Concluding Thoughts</h2>
<div id="text-6">
<p>To be really successful, a gadget has to have great combination of hardware and software. The Nexus One really shines in the hardware department, and brings a new level of polish to the Android operating system. As though the default software experience using Android 2.1 weren&#8217;t enough, the raft of Android phones hitting the market (including Verizon&#8217;s Motorola Droid) have really jump started the app development for Android, and the quality of the apps overall is really incredible. Combined with the open nature of both the market and the platform, Google has a real winner on their hands. Despite the expected <a href="http://www.wired.com/gadgetlab/2010/01/nexus-one-sales/">slow sales</a> partially due to its unorthodox sales channels and advertising strategy, if you&#8217;re going to get a new phone in 2010, you should give the <a href="http://www.google.com/phone">Nexus One</a> a very close look.  Of all the gadgets I&#8217;ve ever owned, it is by far my favorite.</p>
</div>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/147/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;AAA Indie&#8221; Game Development</title>
		<link>http://etherplex.org/archives/145</link>
		<comments>http://etherplex.org/archives/145#comments</comments>
		<pubDate>Fri, 29 Jan 2010 17:17:03 +0000</pubDate>
		<dc:creator>Rick</dc:creator>
				<category><![CDATA[MicroBlog]]></category>

		<guid isPermaLink="false">http://etherplex.org/?p=145</guid>
		<description><![CDATA[Notice that an independent game development studio, Zero Point, is working with the community fairly closely to produce a space shooter called Interstellar Marines.  They are funded largely by pre-sales of the game, and to maintain credibility, they release video and game demo material so the community can see their progress.  Their &#8220;Bullseye&#8221; training area [...]]]></description>
			<content:encoded><![CDATA[<p>Notice that an independent game development studio, <a href="http://www.zeropointsoft.com/">Zero Point</a>, is working with the community fairly closely to produce a space shooter called <a href="http://www.interstellarmarines.com/">Interstellar Marines</a>.  They are funded largely by pre-sales of the game, and to maintain credibility, they release video and game demo material so the community can see their progress.  Their &#8220;<a href="http://www.interstellarmarines.com/game/bullseye/">Bullseye</a>&#8221; training area demo is playable on Mac and PC on the web because they are developing the game using the <a href="http://unity3d.com/">Unity</a> engine, which is cross-platform and runs in a browser.  They don&#8217;t currently have, and don&#8217;t plan to have, a &#8220;publisher&#8221; in the traditional sense, which is kind of exciting; the people working to make the game are the ones who will distribute and profit from it.  There&#8217;s something pure about the simplicity of it.  And, true to Zero Point&#8217;s claims of Interstellar Marines being an &#8220;AAA&#8221; title, it actually looks pretty good!</p>
<p><a href="http://www.interstellarmarines.com/media-section/images/"><img class="aligncenter" title="Bullseye Demo Screenshot" src="http://www.interstellarmarines.com/media/uploads/screenshots/ss0065_1280x720_zps_interstellarmarines_realtime_bullseye_001_jpg_versions/medium_ss0065_1280x720_zps_interstellarmarines_realtime_bullseye_001.jpg" alt="Bullseye Demo Screenshot" width="565" height="317" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://etherplex.org/archives/145/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
