<?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>FirstClown &#187; Technical</title>
	<atom:link href="http://www.firstclown.us/category/technical/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.firstclown.us</link>
	<description>firstclown at firstclown.us</description>
	<lastBuildDate>Wed, 07 Jul 2010 16:01:37 +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>Lightning Talk at PyOhio: Open Community Support</title>
		<link>http://www.firstclown.us/2009/07/27/lightening-talk-at-pyohio-open-community-support/</link>
		<comments>http://www.firstclown.us/2009/07/27/lightening-talk-at-pyohio-open-community-support/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 20:44:03 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[nonprofit]]></category>
		<category><![CDATA[pyohio]]></category>

		<guid isPermaLink="false">http://www.firstclown.us/?p=422</guid>
		<description><![CDATA[I went out to the PyOhio conference over the weekend down in Columbus, OH and an idea's been eating at me since a conversation with a couple of the organizers on Saturday night. We were talking about the GiveCamp that had happened the weekend before and how great efforts like that are, but there's a [...]


<strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2009/08/14/obstacles-to-the-open-community-support-idea/' rel='bookmark' title='Permanent Link: Obstacles to the Open Community Support Idea'>Obstacles to the Open Community Support Idea</a> <small>There are different levels of support that a community built...</small></li>
<li><a href='http://www.firstclown.us/2004/12/11/open-letter-to-feedster/' rel='bookmark' title='Permanent Link: Open Letter to Feedster'>Open Letter to Feedster</a> <small>Your Crawler has been hitting my site, http://www.firstclown.us, every two...</small></li>
<li><a href='http://www.firstclown.us/2006/08/13/lessons-learned-in-corporate-america/' rel='bookmark' title='Permanent Link: Lessons Learned in Corporate America'>Lessons Learned in Corporate America</a> <small>I've talked before about how I don't like corporate jobs....</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I went out to the <a href="http://www.pyohio.org/">PyOhio</a> conference over the weekend down in Columbus, OH and an idea's been eating at me since a conversation with a couple of the organizers on Saturday night. We were talking about the <a href="http://www.columbusgivecamp.org/GiveCamp">GiveCamp</a> that had happened the weekend before and how great efforts like that are, but there's a problem with that model: Who will support it? </p>
<p>In reality, the initial development of a software solution is the least expensive part of the cost of the software life cycle while maintenance of bugs and future enhancements to keep up with a changing business is the most expensive, <a href="http://users.jyu.fi/~koskinen/smcosts.htm">possibly up to 90% of the cost</a>.  If a non-profit doesn't have the resources to create and implement the software, they most certainly don't have the resources to maintain it.</p>
<p>All the non-profit work I've ever done has needed support eventually and with just one person working on a volunteer basis, I can't keep up with that over the long term.  Also, non-profits have a very high turnover rate and that means almost constant training on any solutions that are put in place. That isn't cheap either and just adds to the cost of custom software for their business.  It doesn't matter how much those solutions might be helping them, if they lose the expertise to use them, all those wonderful solutions are worthless.</p>
<p>So on the last day of the PyOhio event I gave lightning talk about these ideas. It wasn't anything too definite, I just wanted to see if it might call people to action and just get a general feel for what everyone thought.  The talk centered around the fact that I think we need to study this problem a little closer and see if there isn't an online community that could be built up to handle these problems.  Just as open source software needs documentors and testers, they also need implementers and supporters.</p>
<p>One of the big surprises for me was, when I asked the audience how many of them had done volunteer work for non-profits, about half the crowd raised their hands. I figured it would be a high number, but I didn't expect that high.  It's great to see and I certainly don't think people should stop doing that, but in order to support the long term viability of these solutions, we need to be able to support them and keep them running after they've been implemented.</p>
<p>One thing that came out of this that I didn't know was that there was a group in Portland called <a href="http://dayon.org/">DayOn.org</a> that is trying to tackle this problem too.  I'm going to look more into this.  At first glance, it looks like a service that links up non-profits with volunteers and kinds of ends it's relationship there. The idea I have in my head is almost like a volunteer-based company that is able to take clients in order to build a trust relationship with them. Then it would be able to act not only as developers but also as sys admins with access to their data and server.  This has a huge potential for problems though, some of which I hope to talk about in a future post.  But definitely check out <a href="http://dayon.org/">DayOn.org</a> if any of this interests you now.</p>


<p><strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2009/08/14/obstacles-to-the-open-community-support-idea/' rel='bookmark' title='Permanent Link: Obstacles to the Open Community Support Idea'>Obstacles to the Open Community Support Idea</a> <small>There are different levels of support that a community built...</small></li>
<li><a href='http://www.firstclown.us/2004/12/11/open-letter-to-feedster/' rel='bookmark' title='Permanent Link: Open Letter to Feedster'>Open Letter to Feedster</a> <small>Your Crawler has been hitting my site, http://www.firstclown.us, every two...</small></li>
<li><a href='http://www.firstclown.us/2006/08/13/lessons-learned-in-corporate-america/' rel='bookmark' title='Permanent Link: Lessons Learned in Corporate America'>Lessons Learned in Corporate America</a> <small>I've talked before about how I don't like corporate jobs....</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.firstclown.us/2009/07/27/lightening-talk-at-pyohio-open-community-support/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Adding Icons to Your Android Application</title>
		<link>http://www.firstclown.us/2008/12/11/adding-icons-to-your-android-application/</link>
		<comments>http://www.firstclown.us/2008/12/11/adding-icons-to-your-android-application/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 20:46:06 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://www.firstclown.us/?p=361</guid>
		<description><![CDATA[After seeing how easy it is to add an icon to a contact in my new G1 phone, I decided to try and do it in an application of my own. I've sense been asked about it a little bit, so I figured I'd post how to do it on my blog. It's surprisingly easy, [...]


<strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2008/10/01/my-hope-for-android/' rel='bookmark' title='Permanent Link: My Hope for Android'>My Hope for Android</a> <small>Over the past two weeks, I've been getting deep into...</small></li>
<li><a href='http://www.firstclown.us/2008/10/07/mapping-the-virtual-world-to-the-physical-world/' rel='bookmark' title='Permanent Link: Mapping the Virtual World to the Physical World'>Mapping the Virtual World to the Physical World</a> <small>I'm starting to see a very interesting trend lately with...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>After seeing how easy it is to add an icon to a contact in my new G1 phone, I decided to try and do it in an application of my own.  I've sense been asked about it a little bit, so I figured I'd post how to do it on my blog. It's surprisingly easy, but there's quite a few steps involved.</p>
<p>BTW, none if this is original, but I haven't seen anyone really write a up a complete post on how to do it. I reverse engineered the concept and the steps from the great open source project <a href="http://code.google.com/p/apps-for-android/">apps-for-android</a>.</p>
<h2>UI</h2>
<p>To set up the interface for adding the icon, you'll want to add an ImageButton to the edit screen for your items. You can then set the image with:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #006600; font-weight: bold;">void</span> showIconButton<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">String</span> iconUri<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000000;  font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>iconUri <span style="color: #339933;">!</span>= <span style="color: #006600; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            ImageButton iconField = <span style="color: #009900;">&#40;</span>ImageButton<span style="color: #009900;">&#41;</span> findViewById<span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">iconButton</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            iconField.<span style="color: #006633;">setImageURI</span><span style="color: #009900;">&#40;</span><span style="color: #006600; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            iconField.<span style="color: #006633;">setImageURI</span><span style="color: #009900;">&#40;</span>Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>iconUri<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            iconField.<span style="color: #006633;">invalidate</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>You'll need the extra <code>iconField.setImageURI(null);</code> call in there since Android ignores a call to setImageURI that has the same URI is it currently holds. Since I save the new icon image to the same place as the old one, that can be a problem.</p>
<p>You'll also want to have the button set up to select a new image when it's clicked.  That will be a simple call to <code>iconField.setOnClickListener(cmdIconListener);</code> in the onCreate method of the Activity.</p>
<h2>Button Listener</h2>
<p>Now we can create the action the button should take when it's clicked.</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">    <span style="color: #000000; font-weight: bold;">protected</span> OnClickListener cmdIconListener = <span style="color: #000000; font-weight: bold;">new</span> OnClickListener<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> onClick<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">View</span> arg0<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            Intent i = <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;android.intent.action.GET_CONTENT&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            i.<span style="color: #006633;">setType</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;image/*&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// We just want images.</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">//ADD_ICON is a unique integer code for the intent response.</span>
            startActivityForResult<span style="color: #009900;">&#40;</span>i, AddTea.<span style="color: #006633;">ADD_ICON</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>You can see we're firing a very simple Intent to get an image. This will allow the user to select an image from their picture gallery, just like the contact application does. It also keeps it generic enough that another application can act on this Intent, too.</p>
<h2>Crop the Image</h2>
<p>This Intent will return an image URI that we then want to crop:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;">    <span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #006600; font-weight: bold;">void</span> onActivityResult<span style="color: #009900;">&#40;</span><span style="color: #006600; font-weight: bold;">int</span> requestCode, <span style="color: #006600; font-weight: bold;">int</span> resultCode, Intent data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// See which child activity is calling us back.</span>
        <span style="color: #000000;  font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>requestCode<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000;  font-weight: bold;">case</span> AddTea.<span style="color: #006633;">ADD_ICON</span>:
            <span style="color: #666666; font-style: italic;">// This is the standard resultCode that is sent back if the</span>
            <span style="color: #666666; font-style: italic;">// activity crashed or didn't doesn't supply an explicit result.</span>
            <span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>resultCode <span style="color: #339933;">!</span>= RESULT_CANCELED<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                Intent i = <span style="color: #000000; font-weight: bold;">new</span> Intent<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;com.android.camera.action.CROP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                i.<span style="color: #006633;">setClassName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;com.android.camera&quot;</span>, <span style="color: #0000ff;">&quot;com.android.camera.CropImage&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                i.<span style="color: #006633;">setData</span><span style="color: #009900;">&#40;</span>data.<span style="color: #006633;">getData</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                Log.<span style="color: #006633;">d</span><span style="color: #009900;">&#40;</span>TAG, <span style="color: #0000ff;">&quot;path: &quot;</span> + data.<span style="color: #006633;">getData</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;noFaceDetection&quot;</span>, <span style="color: #006600; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;outputX&quot;</span>, iconWidth<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;outputY&quot;</span>, iconHeight<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;aspectX&quot;</span>, iconWidth<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;aspectY&quot;</span>, iconHeight<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;scale&quot;</span>, <span style="color: #006600; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000000;  font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>iconUri == <span style="color: #006600; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                    ContentValues values = <span style="color: #000000; font-weight: bold;">new</span> ContentValues<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    values.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>android.<span style="color: #006633;">provider</span>.<span style="color: #006633;">MediaStore</span>.<span style="color: #006633;">Images</span>.<span style="color: #003399; font-weight: bold;">Media</span>.<span style="color: #006633;">TITLE</span>, name + <span style="color: #0000ff;">&quot; Icon&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    values.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>android.<span style="color: #006633;">provider</span>.<span style="color: #006633;">MediaStore</span>.<span style="color: #006633;">Images</span>.<span style="color: #003399; font-weight: bold;">Media</span>.<span style="color: #006633;">BUCKET_ID</span>, <span style="color: #0000ff;">&quot;STeaP_Tea_Timer_Icons&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    values.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>android.<span style="color: #006633;">provider</span>.<span style="color: #006633;">MediaStore</span>.<span style="color: #006633;">Images</span>.<span style="color: #003399; font-weight: bold;">Media</span>.<span style="color: #006633;">BUCKET_DISPLAY_NAME</span>, <span style="color: #0000ff;">&quot;STeaP Tea Timer Icons&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    values.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>android.<span style="color: #006633;">provider</span>.<span style="color: #006633;">MediaStore</span>.<span style="color: #006633;">Images</span>.<span style="color: #003399; font-weight: bold;">Media</span>.<span style="color: #006633;">IS_PRIVATE</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    iconUri = getContentResolver<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">insert</span><span style="color: #009900;">&#40;</span>android.<span style="color: #006633;">provider</span>.<span style="color: #006633;">MediaStore</span>.<span style="color: #006633;">Images</span>.<span style="color: #003399; font-weight: bold;">Media</span>.<span style="color: #006633;">EXTERNAL_CONTENT_URI</span>, values<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                i.<span style="color: #006633;">putExtra</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;output&quot;</span>, Uri.<span style="color: #006633;">parse</span><span style="color: #009900;">&#40;</span>iconUri<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                startActivityForResult<span style="color: #009900;">&#40;</span>i, CROP_ICON<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span></pre></div></div>

<p>We're basically just sending another Intent after getting the first one back. Here we are sending the Intent to a specific Activity, the com.android.camera.CropImage Activity. This Activity will crop the image <em>and</em> save the image, so we need to pass all the information we want the image saved with. The important ones are:</p>
<ul>
<li><strong>noFaceDetection</strong> - Unless you're looking for people, you'll want this to be true.</li>
<li><strong>outputX</strong> - The width of the resulting image. In pixels.</li>
<li><strong>outputY</strong> - The height of the resulting image. In pixels.</li>
<li><strong>aspectX, aspectY</strong> - The aspect ratio of the crop square. Don't set these if you want the user to pick whatever size they want, otherwise set them to what you want.</li>
<li><strong>scale</strong> - Whether you want the image scaled to the dimensions you set. Almost always should be true.</li>
<li><strong>android.provider.MediaStore.Images.Media.IS_PRIVATE</strong> - Set to true if you don't want all of your little icons clogging up the Android Pictures app.</li>
</ul>
<p>The insert command on the ContentProvider will hand you back the images URI so you can store it with the rest of your item's data. In my example, if I already have a URI for the icon, I just overwrite it with the new cropped image, no need to create another one.</p>
<p>Now we just need to handle the result from the Crop Intent:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000;  font-weight: bold;">case</span> AddTea.<span style="color: #006633;">CROP_ICON</span>:
            <span style="color: #000000;  font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>resultCode <span style="color: #339933;">!</span>= RESULT_CANCELED<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                Log.<span style="color: #006633;">d</span><span style="color: #009900;">&#40;</span>TAG, <span style="color: #0000ff;">&quot;Data String: &quot;</span> + iconUri<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                showIconButton<span style="color: #009900;">&#40;</span>iconUri<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #000000;  font-weight: bold;">default</span>:
            <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span></pre></div></div>

<p>And now you've got your icon stored in the ContentProvider and the URI in your application. Easy as that!</p>


<p><strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2008/10/01/my-hope-for-android/' rel='bookmark' title='Permanent Link: My Hope for Android'>My Hope for Android</a> <small>Over the past two weeks, I've been getting deep into...</small></li>
<li><a href='http://www.firstclown.us/2008/10/07/mapping-the-virtual-world-to-the-physical-world/' rel='bookmark' title='Permanent Link: Mapping the Virtual World to the Physical World'>Mapping the Virtual World to the Physical World</a> <small>I'm starting to see a very interesting trend lately with...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.firstclown.us/2008/12/11/adding-icons-to-your-android-application/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Getting an AlphaSmart to Work Under Linux</title>
		<link>http://www.firstclown.us/2008/10/17/getting-an-alphasmart-to-work-under-linux/</link>
		<comments>http://www.firstclown.us/2008/10/17/getting-an-alphasmart-to-work-under-linux/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 12:35:59 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Writing]]></category>
		<category><![CDATA[alphasmart]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.firstclown.us/?p=322</guid>
		<description><![CDATA[I got to play with an AlphaSmart 3000 recently and am actually going to be buying one of my own. One problem I was warned about was that it didn't quite work under Linux. Since the AlphaSmart just acts like a USB keyboard to the computer when transferring files I figured there was just some [...]


<strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2008/10/19/alphasmart-3000/' rel='bookmark' title='Permanent Link: AlphaSmart 3000'>AlphaSmart 3000</a> <small>So I bought an AlphaSmart 3000 off of eBay. But...</small></li>
<li><a href='http://www.firstclown.us/2007/10/04/from-linux-geek-to-linux-user/' rel='bookmark' title='Permanent Link: From Linux Geek to Linux User?'>From Linux Geek to Linux User?</a> <small>I think I took a turn somewhere where I went...</small></li>
<li><a href='http://www.firstclown.us/2007/06/22/happy-hacking-keyboards-gone/' rel='bookmark' title='Permanent Link: Happy Hacking Keyboards &#8211; Gone!'>Happy Hacking Keyboards &#8211; Gone!</a> <small>I used to work with a Network Admin that always...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I got to play with an <a href="http://en.wikipedia.org/wiki/Alphasmart#AlphaSmart_3000">AlphaSmart 3000</a> recently and am actually going to be buying one of my own.  One problem I was warned about was that it didn't quite work under Linux.  Since the AlphaSmart just acts like a USB keyboard to the computer when transferring files I figured there was just some crazy little things that needed to be done to get it to work.</p>
<p>Well, I was right.  There is a crazy little thing you need to do.  </p>
<p>Here are the steps to get the one I was working with to work under Linux:</p>
<ol>
<li>Turn on the AlphaSmart</li>
<li>Plug it into the computer's USB port</li>
<li>Turn on the Num Lock key on the computer's keyboard. <strong>You must do this before hitting any keys on the AlphaSmart</strong></li>
<li>Try typing on the AlphaSmart keyboard to make sure it's transferring</li>
</ol>
<p>After that works, you can use the AlphaSmart to transfer your files like you normally would.</p>


<p><strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2008/10/19/alphasmart-3000/' rel='bookmark' title='Permanent Link: AlphaSmart 3000'>AlphaSmart 3000</a> <small>So I bought an AlphaSmart 3000 off of eBay. But...</small></li>
<li><a href='http://www.firstclown.us/2007/10/04/from-linux-geek-to-linux-user/' rel='bookmark' title='Permanent Link: From Linux Geek to Linux User?'>From Linux Geek to Linux User?</a> <small>I think I took a turn somewhere where I went...</small></li>
<li><a href='http://www.firstclown.us/2007/06/22/happy-hacking-keyboards-gone/' rel='bookmark' title='Permanent Link: Happy Hacking Keyboards &#8211; Gone!'>Happy Hacking Keyboards &#8211; Gone!</a> <small>I used to work with a Network Admin that always...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.firstclown.us/2008/10/17/getting-an-alphasmart-to-work-under-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mapping the Virtual World to the Physical World</title>
		<link>http://www.firstclown.us/2008/10/07/mapping-the-virtual-world-to-the-physical-world/</link>
		<comments>http://www.firstclown.us/2008/10/07/mapping-the-virtual-world-to-the-physical-world/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 16:50:32 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[location]]></category>

		<guid isPermaLink="false">http://www.firstclown.us/?p=316</guid>
		<description><![CDATA[I'm starting to see a very interesting trend lately with everyone moving to mobile internet devices like the iPhone and Android. To call those cell phones is kind of a misnomer since the cell phone part of these devices is probably the least used part. They are much more suited to being mobile internet devices [...]


<strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2005/07/20/does-google-index-hidden-divs/' rel='bookmark' title='Permanent Link: Does Google Index Hidden Divs?'>Does Google Index Hidden Divs?</a> <small>I was wondering recently if Google indexes hidden div tags....</small></li>
<li><a href='http://www.firstclown.us/2008/10/01/my-hope-for-android/' rel='bookmark' title='Permanent Link: My Hope for Android'>My Hope for Android</a> <small>Over the past two weeks, I've been getting deep into...</small></li>
<li><a href='http://www.firstclown.us/2005/02/08/google-maps-rocks/' rel='bookmark' title='Permanent Link: Google Maps Rocks'>Google Maps Rocks</a> <small>I have a new mapping site: Google Maps. Google is...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I'm starting to see a very interesting trend lately with everyone moving to mobile internet devices like the iPhone and Android.  To call those cell phones is kind of a misnomer since the cell phone part of these devices is probably the least used part.  They are much more suited to being mobile internet devices and GPS units then mere cell phones.  But they're leading to an interesting phenomenon:</p>
<h2>The Ability to Map Virtual Objects to the Physical World</h2>
<p>I think a lot of the applications coming out for these devices are focusing on "social" aspects of computers and, while they're suited to that, I think there will be another class of applications that will have more to do with mapping virtual objects to the physical place you are now.  I know there have been "location aware" applications, but I think that soon we will even be going beyond just awareness and more "location mapping" applications.</p>
<p>A great example of this that I've seen recently is <a href="http://venturebeat.com/2008/09/09/sekai-camera-tag-real-world-objects-with-this-iphone-tool-from-the-future/">Sekai Camera from tonchidot</a> that allows you to tag real world objects like you would a wiki.  Looking through the camera on a mobile device shows you, on top of the real world object, tags and objects that other users have attached to those things.  Look through the camera at a restaurant you're standing in front of and maybe a bubble pops up to show recent reviews or current menu items or even recent health inspector reports.  Choosing between three different restaurants that are right next to each other and picking a place to eat lunch at just got a lot easier.  No more searching for the restaurants and clicking through a bunch of screens to get to this information; I know where you are, where you're looking and what has been tagged in that location and I just make it available to you.</p>
<p>There's also the idea of location-based to do lists.  I'm actually building one for Android where you tag your to do items with a tag like "store" and then add GPS data to the tag to say where the store is.  The same could be done for "home" and "work" tags.  Then, when you open the to do list on your device, the proper to do items pop up depending on where you are.  You could say this is just a "location aware" application, but I think it gets more subtle than that at this level because you really have tags these items with a location and they kind of live there to a certain degree.  And nothing is stopping you from tagging them with multiple tags.  I also see "global tags" like "gas_station" that would have them pop up at a gas station, any gas station.  </p>
<p>I know there have been some location messaging (think Twitter with GPS tags, so you only see it if you're at that location. Great for scavenger hunts!) applications thought about too, but I haven't seen any of them take off.  The critical mass type apps are going to have a hard time until more people have these devices and are using them in this way.  But I think it's coming and I hope to be able to contribute something along the way.  </p>
<p>What location mapping applications would you like to see?</p>


<p><strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2005/07/20/does-google-index-hidden-divs/' rel='bookmark' title='Permanent Link: Does Google Index Hidden Divs?'>Does Google Index Hidden Divs?</a> <small>I was wondering recently if Google indexes hidden div tags....</small></li>
<li><a href='http://www.firstclown.us/2008/10/01/my-hope-for-android/' rel='bookmark' title='Permanent Link: My Hope for Android'>My Hope for Android</a> <small>Over the past two weeks, I've been getting deep into...</small></li>
<li><a href='http://www.firstclown.us/2005/02/08/google-maps-rocks/' rel='bookmark' title='Permanent Link: Google Maps Rocks'>Google Maps Rocks</a> <small>I have a new mapping site: Google Maps. Google is...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.firstclown.us/2008/10/07/mapping-the-virtual-world-to-the-physical-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Hope for Android</title>
		<link>http://www.firstclown.us/2008/10/01/my-hope-for-android/</link>
		<comments>http://www.firstclown.us/2008/10/01/my-hope-for-android/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 13:06:09 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[phone]]></category>
		<category><![CDATA[SDK]]></category>

		<guid isPermaLink="false">http://www.firstclown.us/?p=305</guid>
		<description><![CDATA[Over the past two weeks, I've been getting deep into Google Android development and I'm pretty excited about it. It'll be amazing to see a fully open source platform for mobile phones and it looks like it'll be adopted by all the major carriers (except ATT, for obvious reasons). I'm also glad to hear a [...]


<strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2008/10/07/mapping-the-virtual-world-to-the-physical-world/' rel='bookmark' title='Permanent Link: Mapping the Virtual World to the Physical World'>Mapping the Virtual World to the Physical World</a> <small>I'm starting to see a very interesting trend lately with...</small></li>
<li><a href='http://www.firstclown.us/2008/12/11/adding-icons-to-your-android-application/' rel='bookmark' title='Permanent Link: Adding Icons to Your Android Application'>Adding Icons to Your Android Application</a> <small>After seeing how easy it is to add an icon...</small></li>
<li><a href='http://www.firstclown.us/2005/05/30/virgin-mobile-and-google-sms/' rel='bookmark' title='Permanent Link: Virgin Mobile and Google SMS'>Virgin Mobile and Google SMS</a> <small>I've been a happy member of Virgin Mobile pre-paid for...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Over the past two weeks, I've been getting deep into Google Android development and I'm pretty excited about it.  It'll be amazing to see a fully open source platform for mobile phones and it looks like it'll be adopted by all the major carriers (except ATT, for obvious reasons).  I'm also glad to hear a lot of talk from the industry about how this could change everything from the standpoint of smart phones, a traditionally locked-down and stagnant area of technology that's always had a lot of potential.</p>
<p>The application APIs are also quite amazing.  They allow things like multi-threading, so an application can run in the background while other apps are running, the ability to install by download, so vendors can't lock down what apps you can run, and the handling of events, so if I don't like the default SMS app, I can write my own or install a better one that I like better.  Carriers will have to play along to keep everything open and playing friendly, but T-Mobile has already said that they will, so any other carrier will have a hard time selling a locked down version at this point.</p>
<p>With the release of the first Android based phone, the not-so-hot IMO G1, we're seeing these phones coming to market.  Here's what I'm hoping happens:</p>
<ol>
<li>The T-Mobile G1 gets released on Oct. 22nd as the first Android powered phone.  It'll only be the <em>first</em> phone for the platform, so it's by no means the end-all-be-all.  It'll also be SIM-locked to T-Mobile.</li>
<li>I'm hoping that it'll only be a few weeks after that when Google open sources the entire Android codebase.  We already know that they will and I'm hoping it's sooner rather than later.</li>
<li>Once Android is open sourced, it'll start getting ported to other phones, either via the manufacturers of those phones or by open source developers.  I'm really hoping it gets to the <a href="http://www.nokiausa.com/A41146207">Nokia phones</a> and other <a href="http://www.htc.com/www/product.aspx?id=49518">HTC phones</a> sooner rather than later.</li>
<li>Once that happens, you'll be free to use whatever phone you want with whatever carrier you want and still get all the great features of Android; the OS itself, the one API needed for all Android phones and all the apps to be written, and already written, for the platform.</li>
</ol>
<p>If those things do happen like I hope they will, I think we'll really start to see the power of an open platform for mobile.  If it was just going to be the G1 and that was it, it really wouldn't be all that exciting, but I think everything is set up to have this take off <em>if</em> it ends up being as open as Google seems to be leading on about.</p>


<p><strong>Related posts:</strong><ol><li><a href='http://www.firstclown.us/2008/10/07/mapping-the-virtual-world-to-the-physical-world/' rel='bookmark' title='Permanent Link: Mapping the Virtual World to the Physical World'>Mapping the Virtual World to the Physical World</a> <small>I'm starting to see a very interesting trend lately with...</small></li>
<li><a href='http://www.firstclown.us/2008/12/11/adding-icons-to-your-android-application/' rel='bookmark' title='Permanent Link: Adding Icons to Your Android Application'>Adding Icons to Your Android Application</a> <small>After seeing how easy it is to add an icon...</small></li>
<li><a href='http://www.firstclown.us/2005/05/30/virgin-mobile-and-google-sms/' rel='bookmark' title='Permanent Link: Virgin Mobile and Google SMS'>Virgin Mobile and Google SMS</a> <small>I've been a happy member of Virgin Mobile pre-paid for...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.firstclown.us/2008/10/01/my-hope-for-android/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
