<?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>Standard Deviations</title>
	<atom:link href="http://parand.com/say/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://parand.com/say</link>
	<description>Parand Tony Darugar: A Cruel and Petty Dictator</description>
	<lastBuildDate>Sun, 25 Jul 2010 02:36:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Installing OSQA on OS X and Linux</title>
		<link>http://parand.com/say/index.php/2010/07/24/installing-osqa-on-os-x-and-linux/</link>
		<comments>http://parand.com/say/index.php/2010/07/24/installing-osqa-on-os-x-and-linux/#comments</comments>
		<pubDate>Sun, 25 Jul 2010 02:36:04 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1074</guid>
		<description><![CDATA[OSQA is a python/django based StackOverflow clone with a lot of nice capabilities. You might&#8217;ve seen me mention it on twitter. 
Hernâni and Rick were tremendously helpful on IRC to help get past some of the things not covered in the installation documentation. Here are my notes on how to get OSQA working on OS X [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://osqa.net/">OSQA</a> is a python/django based StackOverflow clone with a lot of nice capabilities. You might&#8217;ve seen me mention it on twitter. </p>
<p>Hernâni and Rick were tremendously helpful on IRC to help get past some of the things not covered in the installation documentation. Here are my notes on how to get OSQA working on OS X with SQLite (something very similar should work for Linux and mysql):</p>
<p>My OS X setup is: OS X 10.6.3, Python 2.6.4, Django 1.1.1.</p>
<p>First, install the pre-requisites:</p>
<pre><code lang="sh">
sudo easy_install south
sudo easy_install markdown
sudo easy_install html5lib
</code>
</pre>
<p>Now create your local settings file:</p>
<pre><code lang="sh">
cp settings_local.py.dist settings_local.py
vi settings_local.py
</code>
</pre>
<p>Setup your database settings in settings_local.py. Here are mine with sqlite:</p>
<pre><code lang="python">
DATABASE_NAME = '/Users/darugar/Packages/OSQA/db/osqa.sqlite3'
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_ENGINE = 'sqlite3'
DATABASE_HOST = ''
DATABASE_PORT = ''
</code>
</pre>
<p>Now it&#8217;s time to create the database:</p>
<pre><code lang="python">
python manage.py syncdb --all
python manage.py south --fake
</code>
</pre>
<p>That should do it, now you can run your server:</p>
<pre><code lang="python">
py manage.py runserver 0.0.0.0:9876
</code>
</pre>
<p>Once you&#8217;re up and running you should be able to go to http://localhost:9876/ and see OSQA in action.</p>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/07/24/installing-osqa-on-os-x-and-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Art</title>
		<link>http://parand.com/say/index.php/2010/07/23/art/</link>
		<comments>http://parand.com/say/index.php/2010/07/23/art/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 18:32:54 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[Family]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1070</guid>
		<description><![CDATA[I don&#8217;t know why but I&#8217;m seriously in love with this drawing from the six year old; it seems to have a real style. Better than anything I could draw, methinks.

]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t know why but I&#8217;m seriously in love with this drawing from the six year old; it seems to have a real style. Better than anything I could draw, methinks.<br />
<img class="alignnone" style="margin: 10px; border: 5px solid black;" title="Desert Scene by Kamran" src="http://farm5.static.flickr.com/4078/4797873058_2cbb738eb5.jpg" alt="Desert Scene by Kamran" width="375" height="500" /></p>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/07/23/art/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Python-Oauth2 To Access OAuth Protected Resources</title>
		<link>http://parand.com/say/index.php/2010/06/13/using-python-oauth2-to-access-oauth-protected-resources/</link>
		<comments>http://parand.com/say/index.php/2010/06/13/using-python-oauth2-to-access-oauth-protected-resources/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 23:06:15 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1058</guid>
		<description><![CDATA[Most of the examples I found for python-oauth2 show how to use the library to request and approve tokens, but not how to use the access token to access a protected resource (ie. how to actually make a call to the service you&#8217;re trying to access). Here&#8217;s an example:

import oauth2 as oauth
consumer = oauth.Consumer('consumer-key-here','consumer-secret-here')
token = [...]]]></description>
			<content:encoded><![CDATA[<p>Most of the examples I found for <a href="http://github.com/simplegeo/python-oauth2">python-oauth2</a> show how to use the library to request and approve tokens, but not how to use the access token to access a protected resource (ie. how to actually make a call to the service you&#8217;re trying to access). Here&#8217;s an example:</p>
<pre><code lang="python">
import oauth2 as oauth
consumer = oauth.Consumer('consumer-key-here','consumer-secret-here')
token = oauth.Token('access-key-here','access-key-secret-here')
client = oauth.Client(consumer, token)
response = client.request('http://someservice.com/api/something/')
</code></pre>
<p>And here&#8217;s how you make a POST call:</p>
<pre><code lang="python">
import urllib
response, content = myclient.request("http://someservice.com/api/something/", \
    method="POST", body=urllib.urlencode({'name': 'value', 'another_name': 'another value'}) )
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/06/13/using-python-oauth2-to-access-oauth-protected-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AndBot: The Best Android App Catalog</title>
		<link>http://parand.com/say/index.php/2010/06/05/andbot-the-best-android-app-catalog/</link>
		<comments>http://parand.com/say/index.php/2010/06/05/andbot-the-best-android-app-catalog/#comments</comments>
		<pubDate>Sun, 06 Jun 2010 05:45:06 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[Etc]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1056</guid>
		<description><![CDATA[AndBot, recently featured in Mashable, is about the best source for Android news and reviews out there. If you do anything Android you definitely need to check it out.
To boot, its creator Courtney is a good buddy of mine, a fantastically smart and good guy. 
I had a good laugh when I saw Mashable describe [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://andbot.com">AndBot</a>, recently <a href="http://mashable.com/2010/06/05/android-app-discovery/">featured in Mashable</a>, is about the <a href="http://andbot.com">best source for Android news and reviews</a> out there. If you do anything Android you definitely need to check it out.</p>
<p>To boot, its creator Courtney is a good buddy of mine, a fantastically smart and good guy. </p>
<p>I had a good laugh when I saw Mashable describe it as &#8220;one of the best-looking sites when it comes to researching Android apps&#8221; though, as I was recently giving Courtney a hard time about the design. Turns out it&#8217;s plenty good I guess <img src='http://parand.com/say/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/06/05/andbot-the-best-android-app-catalog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding OAuth: An Overview</title>
		<link>http://parand.com/say/index.php/2010/05/17/understanding-oauth-an-overview/</link>
		<comments>http://parand.com/say/index.php/2010/05/17/understanding-oauth-an-overview/#comments</comments>
		<pubDate>Tue, 18 May 2010 04:43:53 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[oauth]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1040</guid>
		<description><![CDATA[The scenario: user Alice wants to allow SimpleService to access Twitter on her behalf.
Before OAuth this would be done by having Alice give SimpleService her login credentials for Twitter. She would type in her Twitter username and password into SimpleService, and SimpleService would use those credentials to access Twitter on her behalf. This was bad [...]]]></description>
			<content:encoded><![CDATA[<p>The scenario: user Alice wants to allow SimpleService to access Twitter on her behalf.</p>
<p>Before OAuth this would be done by having Alice give SimpleService her login credentials for Twitter. She would type in her Twitter username and password into SimpleService, and SimpleService would use those credentials to access Twitter on her behalf. This was bad because SimpleService now knew Alice&#8217;s credentials, and could do malicious things or carelessly leak her credentials to malicious people.</p>
<p>With OAuth Alice doesn&#8217;t have to give SimpleService her Twitter credentials. Instead she goes through a process wherein she tells Twitter that SimpleService is allowed to act on her behalf.</p>
<p>The flow is:</p>
<p>First, before Alice is involved, Twitter and SimpleService exchange secret information: SimpleService requests Twitter to provide it with a consumer token and a secret. The consumer token will be used to identify SimpleService to Twitter, and the secret will be used to secure the communications to prevent others from pretending to be SimpleService.</p>
<p>This is setup once, allowing SimpleService and Twitter to communicate in general.</p>
<p>Once setup, for each user that wants to allow SimpleService to access Twitter on their behalf, the following happens:</p>
<ul>
<li>The user Alice goes to the SimpleService website and requests SimpleService to access her Twitter account.</li>
<li>SimpleService calls Twitter with a <code>request_token</code> call. This tells Twitter SimpleService is about to have a conversation with it regarding authorization.</li>
<li>Twitter responds with a <code>request_token</code>.</li>
<li>SimpleService, having received the token from Twitter, redirects the user&#8217;s browser to a Twitter <code>authorize</code> page, passing the along the <code>request_token</code> as part of the url.</li>
<li>Twitter grabs the token (along with various signatures and timestamps to verify the request is not forged).</li>
<li>Twitter displays a page to the user asking her if she wants to give SimpleService access to her Twitter account.</li>
<li>If the user says no the game is over, and the token is not authorized.</li>
<li>If the user says yes, Twitter redirects the user back to SimpleService, passing along an authorization token, letting SimpleService know the user authorized access.</li>
<li>SimpleService now exchanges the authorization token for an access token: it calls Twitter with the authorization token, and requests Twitter to give it an access token.</li>
<li>Twitter examines the token SimpleService sent it, verifies that it&#8217;s not forged and that the user Alice had earlier authorized that token for access. It now believes that Alice wants to grant SimpleService access to her Twitter account. Twitter responds to SimpleService with an Access token.</li>
<li>SimpleService grabs the access token and stores it, associating it with the user Alice.</li>
</ul>
<p>Now the initial authorization dance is done: SimpleService has an access token that allows it to access Twitter on behalf of Alice.</p>
<p>To actually access Twitter on behalf of Alice, SimpleService includes the access token with each call it makes to Twitter on behalf of Alice. Twitter checks the token, verifies that is valid, and allows SimpleService to access Alice&#8217;s resources.</p>
<p>To be an OAuth service provider (that is, play the part of Twitter), you need to:</p>
<ul>
<li>Have a way to exchange consumer tokens and secret keys with third parties (eg. SimpleService) that want to access your APIs.</li>
<li>Provide a request_token service that provides tokens that start the conversation for each authorization.</li>
<li>Provide an authorization page that tells the user that a third party (eg. SimpleService) is requesting access to her resources, and allows her to accept or reject the request.</li>
<li>Make a callback to the service (eg. SimpleService), informing it that the request has been authorized.</li>
<li>Provide an access_token service that accepts a request token that&#8217;s been authorized and provides an access token to the third party (eg. SimpleService).</li>
<li>Store the access token for the user that authorized it.</li>
<li>Accept access tokens as an authentication mechanism for API calls, verifying the token&#8217;s validity and authenticating the user associated with that token.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/05/17/understanding-oauth-an-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Replace Lexus RX 300 140A (or other inline) Fuse</title>
		<link>http://parand.com/say/index.php/2010/04/27/how-to-replace-lexus-rx-300-140a-or-other-inline-fuse/</link>
		<comments>http://parand.com/say/index.php/2010/04/27/how-to-replace-lexus-rx-300-140a-or-other-inline-fuse/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 02:51:45 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[car]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1036</guid>
		<description><![CDATA[Having managed to blow the 140A fuse in my Lexus RX 300 by hooking up the wrong battery (thanks Kragen!), I wrestled with how to replace it for quite a while. It&#8217;s complicated and I didn&#8217;t find any good explanations on the web, so I&#8217;m writing it up here:
The 140A fuse is bolted into the [...]]]></description>
			<content:encoded><![CDATA[<p>Having managed to blow the 140A fuse in my Lexus RX 300 by hooking up the wrong battery (thanks Kragen!), I wrestled with how to replace it for quite a while. It&#8217;s complicated and I didn&#8217;t find any good explanations on the web, so I&#8217;m writing it up here:</p>
<p>The 140A fuse is bolted into the fuse box, so no matter how hard you try to pull it from the top it won&#8217;t come off. You&#8217;ll need to disassemble the fuse box, remove the bolts, and then replace it.</p>
<p>First disconnect your battery to prevent any accidental shorts or sparks.</p>
<p>The fuse box is attached to the body of the car with 2 bolts, and there are multiple latches connecting the top portion of the fuse box to the bottom portion. Remove the bolts, then insert a flat screw driver head into each latch, pushing it apart to let the latch release. The top of the fuse box lifts up, so you&#8217;ll see each latch get free and be able to move up. There are 4 or 5 latches all around, including one semi-hidden one where the fuse box lays against the body of the car. You&#8217;ll only be able to see it when you remove the bolts.</p>
<p>Once the latches are open, pull the top half of fuse box up and move it around to give yourself some room to maneuver. You&#8217;ll see lots of wires connected to it. You may want to open up the air filter to open up more.</p>
<p>Now you need to remove the top panel in the top half of the fuse box. This is where I wasted a lot of time &#8211; it just didn&#8217;t seem to want to come out.</p>
<p>The trick is to push it down and get it out from the bottom of the top part of the fuse box, not to try to pull it up. Look for the latches around the top of the panel where the 140A fuse is &#8211; there&#8217;ll be little openings that a flat screw driver head can fit through. Put the screw driver in and free up the latch so the top panel can slide <strong>down</strong> towards the bottom of the fuse box. Once you have all the latches freed the top panel comes out fairly easily.</p>
<p>Now all you have to do is to remove the blots that hold the fuse in place. Replace the fuse and put everything back as you found it. The trickiest part is getting the hidden latch back in place, but once you have that you&#8217;ll be set.</p>
<p>Good luck. It&#8217;s tricky, so hang in there. I spoke with several mechanics, including a couple of mechanics from the dealership, and none of them could give a good explanation &#8211; in particular, 2 of them told me the top piece of the panel would come out from the top, and that the housing would probably break when removing it. Not true &#8211; it comes out from the bottom, and there&#8217;s no need to break anything.</p>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/04/27/how-to-replace-lexus-rx-300-140a-or-other-inline-fuse/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Please Join: Let&#8217;s Ban All But One Framework For Web Development</title>
		<link>http://parand.com/say/index.php/2010/04/09/please-join-lets-ban-all-but-one-framework-for-web-development/</link>
		<comments>http://parand.com/say/index.php/2010/04/09/please-join-lets-ban-all-but-one-framework-for-web-development/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 03:03:31 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[Complain]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1033</guid>
		<description><![CDATA[At first I thought the arguments justifying Apple&#8217;s ban of non objective-c development by claiming that resulting apps would be lower quality were absolutely moronic (and hence the people making the arguments either blinded by religion or morons). After all, it&#8217;s not like there isn&#8217;t a review process already in place. But the more I [...]]]></description>
			<content:encoded><![CDATA[<p>At first I thought the arguments justifying Apple&#8217;s ban of non objective-c development by claiming that resulting apps would be lower quality were absolutely moronic (and hence the people making the arguments either blinded by religion or morons). After all, it&#8217;s not like there isn&#8217;t a review process already in place. But the more I think about it the more I see where they&#8217;re coming from.</p>
<p>I think we should apply the same model to the Web . Imagine if we all had to use the same development environment and tools, and that there was a single entity who could decide, arbitrarily, if the thing we just spent months building should see the light of day or not. Wouldn&#8217;t that be awesome?</p>
<p>If the internet has proved anything, it is that a closed, tightly controlled environment based on uniformity of tools and development environment, and a benevolent master overseeing everything is the right way to go.</p>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/04/09/please-join-lets-ban-all-but-one-framework-for-web-development/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Effective Remote Collaboration with Wave and iChat</title>
		<link>http://parand.com/say/index.php/2010/04/09/effective-remote-collaboration-with-wave-and-ichat/</link>
		<comments>http://parand.com/say/index.php/2010/04/09/effective-remote-collaboration-with-wave-and-ichat/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 01:14:45 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[HowTo]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1031</guid>
		<description><![CDATA[I&#8217;d tried to use Google Wave on several occasions as a tool for remote collaboration. All attempts had ended in various degrees of disaster, so I didn&#8217;t have high hopes for this round. In fact we tried Google Docs, Zoho Docs, and even Etherpad as alternatives first, with Etherpad being the most effective solution. That [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d tried to use Google Wave on several occasions as a tool for remote collaboration. All attempts had ended in various degrees of disaster, so I didn&#8217;t have high hopes for this round. In fact we tried Google Docs, Zoho Docs, and even Etherpad as alternatives first, with Etherpad being the most effective solution. That is, until we tried Wave again.</p>
<p>It turns out effective remote collaboration for document authoring requires two distinct things:</p>
<ul>
<li>A <strong>shared document</strong> with:
<ul>
<li>near real-time updates for everyone</li>
<li>an indicator of who&#8217;s editing what and what&#8217;s recently changed</li>
<li>the ability to view and restore earlier versions</li>
</ul>
</li>
<li>A <strong>separate communications side channel</strong></li>
</ul>
<p>Wave provides strong shared document capabilities, as well as very nice communication capabilities via chat.</p>
<p>The problem, however, is that the &#8220;chat&#8221; can and often does take place within the document. The &#8220;chat&#8221; quickly becomes graffiti all over your nicely formatted document, and you have expend serious effort cleaning it up .</p>
<p>The solution is to separate out the discussion or chat mechanism from the document completely. In this case we used iChat with voice and video for all participants. I&#8217;m no fan of video conferencing, but I have to admit even the video was useful &#8211; particularly to gauge the level of engagement of each person at any point in time.</p>
<p>It is also very useful, by the way, to have multiple screens available. The document can live on one screen while the talking heads occupy the other.</p>
<p>I was surprised at how effective the setup was. We will definitely be using this again in lieu of travel.</p>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/04/09/effective-remote-collaboration-with-wave-and-ichat/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>To Win, We Have To Do A Really Good Job</title>
		<link>http://parand.com/say/index.php/2010/04/03/to-win-we-have-to-do-a-really-good-job/</link>
		<comments>http://parand.com/say/index.php/2010/04/03/to-win-we-have-to-do-a-really-good-job/#comments</comments>
		<pubDate>Sun, 04 Apr 2010 05:32:27 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1027</guid>
		<description><![CDATA[Quote from Steve Jobs, via Miguel de Icaza:
We have to let go of this notion that for [us] to win, [our purported competitor] has to lose. We have to embrace the notion that for [us] to win, [we] have to do a really good job. And if others are going to help us, that&#8217;s great. [...]]]></description>
			<content:encoded><![CDATA[<p>Quote from Steve Jobs, <a href="http://tirania.org/blog/archive/2010/Apr-03.html">via Miguel de Icaza</a>:</p>
<p><strong>We have to let go of this notion that for [us] to win, [our purported competitor] has to lose. We have to embrace the notion that for [us] to win, [we] have to do a really good job. And if others are going to help us, that&#8217;s great. Because we need all the help we can get. And if we screw up and do not do a good job, it is not somebody else&#8217;s fault, it is our fault.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/04/03/to-win-we-have-to-do-a-really-good-job/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Request for Android, Tim Bray, and Google</title>
		<link>http://parand.com/say/index.php/2010/03/19/a-request-for-android-tim-bray-and-google/</link>
		<comments>http://parand.com/say/index.php/2010/03/19/a-request-for-android-tim-bray-and-google/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 06:20:01 +0000</pubDate>
		<dc:creator>Parand</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://parand.com/say/?p=1023</guid>
		<description><![CDATA[Mr. Bray has joined the empire of no evil, the Android group no less, and has been writing useful things about Android and Nexus One. He also has deep roots in the world of scripting, has been an advocate, and has been fearless in his experiments with languages new fangled and old.
So I&#8217;d like to [...]]]></description>
			<content:encoded><![CDATA[<p>Mr. Bray has <a href="http://www.tbray.org/ongoing/When/201x/2010/03/15/Joining-Google" target="_blank">joined the empire of no evil</a>, the Android group no less, and has been writing <a href="http://www.tbray.org/ongoing/When/201x/2010/03/17/Nexus-One" target="_blank">useful things about Android and Nexus One</a>. He also has deep roots in the world of scripting, has been <a href="http://www.tbray.org/ongoing/When/200x/2006/09/07/JRuby-guys" target="_blank">an advocate</a>, and has been fearless in his <a href="http://www.tbray.org/ongoing/When/200x/2008/05/01/Wide-Finder-2" target="_blank">experiments with languages new fangled and old</a>.</p>
<p>So I&#8217;d like to make a request of Tim, one that I think would make a tremendous impact. Tim: please help bring scripting to Android development.</p>
<p>I know that a lot of people like Java and find the current development environment just dandy. Which is great. But many other reasonable people would prefer to keep their hands clean of Java and feel a greater degree of productivity using higher level languages.</p>
<p>Imagine a scenario where you could write a Python, Ruby, or Javascript script, get it onto the phone using a simple interface (eg. just upload it to a url), and have a native app. Imagine how many more people would be developing apps, and how much more quickly.</p>
<p>I&#8217;m looking for something like this: supported and documented as a standard part of the Android SDK, all reasonable APIs needed to develop native apps exposed as Javascript (and/or Python or Ruby, but Javascript is likely the widest reaching bet). And a reasonable packaging process that is only slight more complex than tar.</p>
<p>There is absolutely no reason this can&#8217;t be achieved. In fact projects like <a href="http://www.appcelerator.com/" target="_blank">Appcelerator</a> and <a href="http://phonegap.com/" target="_blank">PhoneGap</a> have already made tremendous strides in this direction. All it takes is a believer to take the initiative and make it happen.</p>
<p>I feel Tim is that believer. And so I humbly submit, Mr. Bray, that the most important impact you could have on Android is to embed a love and support of scripting languages into the SDK. Pretty please.</p>
]]></content:encoded>
			<wfw:commentRss>http://parand.com/say/index.php/2010/03/19/a-request-for-android-tim-bray-and-google/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
