<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0">
			<channel>
			<title>SamSpeak - Technology</title>
			<link>http://sam.curren.ws/index.cfm</link>
			<description>What I Gotta Say</description>
			<language>en-us</language>
			<pubDate>Thu, 09 Sep 2010 02:48:40-0700</pubDate>
			<lastBuildDate>Wed, 17 Mar 2010 08:36:00-0700</lastBuildDate>
			<generator>BlogCFC</generator>
			<docs>http://blogs.law.harvard.edu/tech/rss</docs>
			<managingEditor>telegramsam@byu.edu</managingEditor>
			<webMaster>telegramsam@byu.edu</webMaster>
			
			<item>
				<title>Amazing Things happening at Kynetx - Come to Impact</title>
				<link>http://sam.curren.ws/index.cfm/2010/3/17/Amazing-Things-happening-at-Kynetx--Come-to-Impact</link>
				<description>
				
				Over sushi a few nights ago, I had the opportunity to bring Drummond Reid up to speed with what Kynetx has been doing. After several months in the trenches, it was a revealing experience to climb a tower and see just how far we&apos;ve come. As I unfolded item after item, I was surpised to find another thing to describe.

At our last Impact Conference, we unfolded the Kynetx Engine, and demonstrated some ways to use Kynetx in your quest to do amazing things.

At this next Impact Conference, we will deliver an update on the progress with the engine, the improvement of our tools, and all of the things that have kept us busy over the last few months. If you want to hear about some of the stuff I downloaded to Drummond, you&apos;ll want to attend the conference. If you came to the last Impact, this one will be better. If you didn&apos;t, then it&apos;s time for you to understand what we are doing and what it means for the world.

Oh, and the food will be worth the price of admission alone. Seriously. Sign up for Impact.

&lt;a href=&quot;http://kynetximpactspring2010.eventbrite.com/&quot;&gt;Kynetx Impact Spring 2010&lt;/a&gt;&lt;br/&gt;
April 27-28 2010&lt;br/&gt;
Miller Free Enterprise Center (MFEC)&lt;br/&gt;
at Salt Lake Community College&lt;br/&gt;
9750 South 300 West&lt;br/&gt;
Sandy, UT 84070&lt;br/&gt;

Use Code FOK2010 for a 33% discount on the conference price. 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Development</category>				
				
				<category>Personal</category>				
				
				<category>Technology</category>				
				
				<pubDate>Wed, 17 Mar 2010 08:36:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2010/3/17/Amazing-Things-happening-at-Kynetx--Come-to-Impact</guid>
				
			</item>
			
			<item>
				<title>Changing the World at Kynetx</title>
				<link>http://sam.curren.ws/index.cfm/2009/10/20/Changing-the-World-at-Kynetx</link>
				<description>
				
				I&apos;ve been pretty quiet on my blog lately, and I have a really good excuse. Now that I&apos;ve graduated and have time to get involved in some serious endeavors, I&apos;ve joined the folks at &lt;a href=&quot;http://www.kynetx.com&quot;&gt;Kynetx&lt;/a&gt;. I&apos;ve been contributing in their efforts to change the world. Indeed, this does change everything.

&lt;img src=&quot;http://kynetx.com/images/logo.gif&quot;/&gt;

At Kynetx, we believe that experiences can be made better through better use and understanding of context. (&lt;a href=&quot;http://www.gartner.com/it/page.jsp?id=1190313&quot;&gt;Gartner agrees...&lt;/a&gt;) Context is data in time and space: who we are, what we are doing, and what our purpose is. Kynetx has what we call a Context Automation Engine, which does the heavy lifting required to produce intelligent applications. Using our engine, you can create complex applications easily, and deploy them fast.

I&apos;ll take a break now and again from my work to post more info, including examples and more information about what we are doing. If you want to learn more, attend the &lt;A href=&quot;http://kynetximpact.eventbrite.com/&quot;&gt;Kynetx Impact developer conference&lt;/a&gt; Nov 18-19. We will cover our technology and our vision. 

If you are interested in using our platform to add contextual intelligence to your applications, go &lt;a href=&quot;http://kynetximpact.eventbrite.com/&quot;&gt;sign up&lt;/a&gt;. Use code Windley50 for a 50% discount, and I&apos;ll see you there! 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Development</category>				
				
				<category>Personal</category>				
				
				<category>Technology</category>				
				
				<pubDate>Tue, 20 Oct 2009 16:00:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/10/20/Changing-the-World-at-Kynetx</guid>
				
			</item>
			
			<item>
				<title>Sam Rides 1000: Augmenting the Web</title>
				<link>http://sam.curren.ws/index.cfm/2009/6/30/Sam-Rides-1000-Augmenting-the-Web</link>
				<description>
				
				&lt;p&gt;In my previous two posts, I introduced my project and described data collection using my G1 and Google Spreadsheets. Today, I&apos;m going to show you how I used Kynetx Network Services to add my ride stats to my personal blog and to the Google homepage.&lt;/p&gt;

&lt;h2&gt;Dataset Conversion&lt;/h2&gt;

&lt;p&gt;Google Spreadsheets, where my stats are calculated, can publish data in a variety of formats. It cannot publish JSON data, so I use Yahoo&apos;s YQL to convert the data from CSV to json, with the following statement:&lt;/p&gt;
&lt;code&gt;
select * from csv where url=&apos;http://spreadsheets.google.com/pub?key=rxzHBMZyj1S-HVLy9lFEU7A&amp;single=true&amp;gid=1&amp;range=A12%3AC16&amp;output=csv&apos; and columns=&apos;period,miles,hours&apos; and period != &quot;&quot;
&lt;/code&gt;
&lt;p&gt;(See the &lt;a href=&quot;http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20csv%20where%20url%3D&apos;http%3A%2F%2Fspreadsheets.google.com%2Fpub%3Fkey%3DrxzHBMZyj1S-HVLy9lFEU7A%26single%3Dtrue%26gid%3D1%26range%3DA12%253AC16%26output%3Dcsv&apos;%20and%20columns%3D&apos;period%2Cmiles%2Chours&apos;%20and%20period%20!%3D%20%22%22&amp;format=json&amp;callback=&quot;&gt;raw JSON results&lt;/a&gt;)&lt;/p&gt;

&lt;h2&gt;Building the App&lt;/h2&gt;

&lt;p&gt;I then build my Kynetx App in &lt;a href=&quot;http://appbuilder.kynetx.com&quot;&gt;AppBuilder&lt;/a&gt;, defining the following datasource in the Global block:&lt;/p&gt;

&lt;code&gt;
dataset ridestats &lt;- &quot;http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20csv%20where%20url%3D&apos;http%3A%2F%2Fspreadsheets.google.com%2Fpub%3Fkey%3DrxzHBMZyj1S-HVLy9lFEU7A%26single%3Dtrue%26gid%3D1%26range%3DA12%253AC16%26output%3Dcsv&apos;%20and%20columns%3D&apos;period%2Cmiles%2Chours&apos;%20and%20period%20!%3D%20%22%22&amp;format=json&amp;callback=&quot; cachable for 2 hours
&lt;/code&gt;

&lt;p&gt;Since I ride in the morning and the evening, I cache the dataset for 2 hours. This keeps the data fairly current, but still keeps the service fast.&lt;/p&gt;

&lt;h2&gt;Annotating My Blog&lt;/h2&gt;

&lt;p&gt;I have two rules, the first of which adds stats to my personal blog:&lt;/p&gt;
&lt;code&gt;
select using &quot;http://sam.curren.ws/&quot; setting ()

pre {
    daymiles = ridestats.pick(&quot;$..results.row[0].miles&quot;);
    weekmiles = ridestats.pick(&quot;$..results.row[1].miles&quot;);
    monthmiles = ridestats.pick(&quot;$..results.row[2].miles&quot;);
    totalmiles = ridestats.pick(&quot;$..results.row[3].miles&quot;);
milesmessage = &lt;&lt;
&lt;h2&gt;Sam is riding 1,000 miles. Progress:
#{(daymiles &gt; 0 ? daymiles + &quot; Today, &quot; : &quot;&quot;)}
#{(weekmiles &gt; 0 &amp;&amp; weekmiles != daymiles ? weekmiles + &quot; This Week, &quot; : &quot;&quot;)}
#{(monthmiles &gt; 0 ? monthmiles + &quot; This Month, &quot; : &quot;&quot;)}
#{totalmiles} Total.&lt;/h2&gt;
&gt;&gt;

}

replace_html(&quot;#logo h2&quot;, milesmessage);
&lt;/code&gt;

&lt;p&gt;I set the rule to fire on my blog&apos;s domain, and then use the pick() method to extract different totals from the json dataset declared in the Global block. I construct a message string that varies depending on the different stat values. Finally, I replace the text at the top of my blog page with the message.&lt;/p&gt;

&lt;p&gt;To run the Kynetx application on my blog, I plant Kynetx tags on my blog. This enables everyone to see the Kynetx Application with no installs or Action Cards. The html tags are available within AppBuilder, and I simply copied them into the template for my blog.&lt;/p&gt;

&lt;h2&gt;Annotating Google&apos;s Homepage&lt;/h2&gt;

&lt;p&gt;My second rule is activated by an Action Card installed on the user&apos;s computer (instructions for installing this are in my first post). My second rule is very similar to the first rule, with some minor difference in inserted HTML and appending the message to the existing site, instead of replacing anything on the page.&lt;/p&gt;

&lt;code&gt;
select using &quot;http://www.google.com/&quot; setting ()

pre {
    daymiles = ridestats.pick(&quot;$..results.row[0].miles&quot;);
    weekmiles = ridestats.pick(&quot;$..results.row[1].miles&quot;);
    monthmiles = ridestats.pick(&quot;$..results.row[2].miles&quot;);
    totalmiles = ridestats.pick(&quot;$..results.row[3].miles&quot;);
milesmessage = &lt;&lt;
&lt;h2&gt;Sam is riding 1,000 miles.&lt;/h2&gt;&lt;p&gt; Progress:
#{(daymiles &gt; 0 ? daymiles + &quot; Today, &quot; : &quot;&quot;)}
#{(weekmiles &gt; 0 &amp;&amp; weekmiles != daymiles ? weekmiles + &quot; This Week, &quot; : &quot;&quot;)}
#{(monthmiles &gt; 0 ? monthmiles + &quot; This Month, &quot; : &quot;&quot;)}
#{totalmiles} Total.&lt;/p&gt;
&gt;&gt;

}

append(&quot;#body&gt;center&quot;, milesmessage);
&lt;/code&gt;

&lt;p&gt;Activating Kynetx Rules with an Action Card also requires an update to the Dispatch block of the rule, adding this line:&lt;/p&gt;

&lt;code&gt;
domain &quot;www.google.com&quot;
&lt;/code&gt;

&lt;p&gt;I also generate the card inside AppBuilder, providing a custom image that I created using &lt;a href=&quot;http://pixlr.com&quot;&gt;Pixlr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And there you have it. Sam rides 1000 miles, with automated stats provided by Android MyTracks, Google Spreadsheets, YQL, and Kynetx Network Services.&lt;/p&gt;

&lt;h2&gt;Shameless Plug&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kynetx.com&quot;&gt;Kynetx&lt;/a&gt; is a cloud based automation engine, capable of doing the things I&apos;ve demonstrated and much, much more. If you&apos;d like to use Kynetx Network Services, &lt;a href=&quot;http://accounts.kynetx.com&quot;&gt;sign up for an account&lt;/a&gt;, and start using &lt;a href=&quot;http://appbuilder.kynetx.com&quot;&gt;AppBuilder&lt;/a&gt;. 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Javascript</category>				
				
				<category>Android</category>				
				
				<category>Development</category>				
				
				<category>Personal</category>				
				
				<category>Technology</category>				
				
				<pubDate>Tue, 30 Jun 2009 09:19:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/6/30/Sam-Rides-1000-Augmenting-the-Web</guid>
				
			</item>
			
			<item>
				<title>Sam Rides 1000: Collecting Ride Data using the Android Powered G1</title>
				<link>http://sam.curren.ws/index.cfm/2009/6/26/Sam-Rides-1000-Collecting-Ride-Data-using-the-Android-Powered-G1</link>
				<description>
				
				&lt;p&gt;On my Android powered T-Mobile G1, I&apos;m using the free &lt;a href=&quot;http://mytracks.appspot.com/&quot;&gt;My Tracks&lt;/a&gt; application to record my rides. I start recording just before I start, then throw it in my pocket or bag. I stop recording at the end of my ride, then use the Upload to Google option in the map menu. You can upload the track to My Maps within Google Maps, but my rides are very similar, so I usually only upload to Google Spreadsheets.&lt;/p&gt;
&lt;img src=&quot;http://mytracks.appspot.com/images/phones_with_all_views.png&quot;/&gt;
&lt;p&gt;Uploading to Google Spreadsheets creates a new spreadsheet in Google Docs, with one page for ride data, and another for stats. The program creates a new spreadsheet for each activity type, so I make sure and select Cycling when I stop recording at the end of my ride.&lt;/p&gt;

&lt;h2&gt;Additional Stats&lt;/h2&gt;

&lt;p&gt;It&apos;s important not to manually change too much on the Log sheet, as the program will get confused, but everything else in the spreadsheet is open to tinkering. In addition to the total miles and total time stats, I wanted to calculate daily, weekly, and monthly totals.&lt;/p&gt;

&lt;p&gt;Before I computed those stats, I had to handle the date field uploaded by the My Tracks application. Google Spreadsheets cannot parse the provided date as a date value, so I had to help it along. I created a Dates sheet to accomplish that task. Rather then try and explain what I did, see this spreadsheet, which contains my modifications and formulas:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://spreadsheets.google.com/ccc?key=rHobEIYHkJxRwJ8_4EuSNtQ&quot;&gt;Sample Spreadsheet with modifications.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I then added some additional stats, first by calculating the start of the date range I wanted to sum, then using SumIf() to only add the mileage and time from the period I wanted.&lt;/p&gt;

&lt;p&gt;Finally, I published the Stats sheet of my spreadsheet, so I could use it as a dataset for my Kynetx Application, which I&apos;ll explain in a future post.&lt;/p&gt; 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Android</category>				
				
				<category>Development</category>				
				
				<category>Personal</category>				
				
				<category>Technology</category>				
				
				<pubDate>Fri, 26 Jun 2009 20:06:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/6/26/Sam-Rides-1000-Collecting-Ride-Data-using-the-Android-Powered-G1</guid>
				
			</item>
			
			<item>
				<title>Sam Rides 1000: An exercise in collecting data and web augmentation</title>
				<link>http://sam.curren.ws/index.cfm/2009/6/26/Sam-Rides-1000-An-exercise-in-collecting-data-and-web-augmentation</link>
				<description>
				
				&lt;p&gt;May 15, 2009 was National Ride your Bike to Work day, and I pulled out my bike and rode the 6 or so miles between my house and the Kynetx offices at Thanksgiving Point. I enjoyed it, and rode a few more times in the next week. I was musing how many miles I could ride this summer, and mentioned it to my wife. She promptly challenged me to ride 1,000 miles this summer.&lt;/p&gt;
&lt;p&gt;I better say here that I&apos;m not a cyclist. I haven&apos;t ridden 1,000 miles in the past 5 years, all combined together. While 1,000 miles might not be much for a cyclist, it is quite the challenge for me.&lt;/p&gt;

&lt;h2&gt;Tracking My Progress&lt;/h2&gt;

&lt;p&gt;In addition to making a few bike repairs and buying some commuting tires for my mountain bike, I immediately cooked up some geeky ways to track my progress and share my results with my family and friends.&lt;/p&gt;
&lt;p&gt;I&apos;m a (BIG) Android fan, and so I&apos;m using my T-Mobile G1 as a cyclometer. I&apos;m using the &lt;a href=&quot;http://mytracks.appspot.com/&quot;&gt;My Tracks&lt;/a&gt; application, which records both the route of my ride and my ride stats. After my ride, the app uploads my stats to a Google Docs Spreadsheet, where stats are calculated. I&apos;ll share more about that in a future post.&lt;/p&gt;
&lt;p&gt;To share my progress, I&apos;m using &lt;a href=&quot;www.kynetx.com&quot;&gt;Kynetx Network Services&lt;/a&gt; (KNS) to augment my personal blog with my stats. If you are reading this post on my blog, look at just under the title for my updated stats. KNS pulls my ride stats from the Google Spreadsheet and annotates my website. All I had to do was plant some javascript tags in my blog&apos;s template to activate the Kynetx Application that makes the change.&lt;/p&gt;
&lt;p&gt;My friends and family don&apos;t visit my blog EVERY day, so I&apos;ve also produced an Action Card that displays my ride stats on Google&apos;s home page. KNS allows me to augment websites for anyone that has my Action Card installed. I&apos;ll explain more about how I wrote my Kynetx Application in a future blog post, but for now, you can install my &quot;Sam Rides 1000&quot; card to track my progress on Google&apos;s home page.&lt;/p&gt;

&lt;h2&gt;Installing The Action Card&lt;/h2&gt;


&lt;img style=&quot;float:right;&quot; src=&quot;http://sam.curren.ws/images/samrides1000.jpg&quot;/&gt;
&lt;p&gt;An Action Card is a type of Information Card that allows your web experience to be augmented with a Kynetx Application. You activate the application by installing an Action Card Selector if you don&apos;t already have one, and then installing the card. You can disable or remove the card if and when you don&apos;t want to use the application.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify you have a supported browser: IE/FF on Win, FF on OSX&lt;/li&gt;
&lt;li&gt;Install &lt;a href=&quot;http://www.azigo.com/&quot;&gt;Azigo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Install the &lt;a href=&quot;http://misc.curren.ws/sam/files/SamRides1000.crd&quot;&gt;Sam Rides 1000 Action Card&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Then, browse to Google&apos;s main page to see my stats: &lt;a href=&quot;http://www.google.com&quot;&gt;http://www.google.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I finish a ride and update my stats, you&apos;ll see the new numbers. If I&apos;m falling behind, be sure and give me a nudge!&lt;/p&gt; 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Development</category>				
				
				<category>Android</category>				
				
				<category>Technology</category>				
				
				<pubDate>Fri, 26 Jun 2009 15:42:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/6/26/Sam-Rides-1000-An-exercise-in-collecting-data-and-web-augmentation</guid>
				
			</item>
			
			<item>
				<title>Non-technical friends on Twitter</title>
				<link>http://sam.curren.ws/index.cfm/2009/2/11/Nontechnical-friends-on-Twitter</link>
				<description>
				
				&lt;p&gt;When Twitter was new, the only people that followed me were early adopter, technical people. As twitter has become more mainstream, I have more and more non-technical friends that see my tweets. This is also a result of hooking my twitter feed into Facebook (to keep up appearances), where the tech-to-non ration is very low.&lt;/p&gt;

&lt;p&gt;I&apos;ll occasionally get a response to a technical tweet that reads &quot;I don&apos;t understand any of your updates!&quot; or &quot;Whatever!&quot; and I usually just ignore them. (Seriously people, you know who I am!)&lt;/p&gt;

&lt;p&gt;Yesterday, I posted a technical tweet, and the response made me chuckle. My tweet:&lt;/p&gt;

&lt;img src=&quot;http://sam.curren.ws/images/funnytweet-sam.png&quot;/&gt;

&lt;p&gt;The response, posted by my Paramedic Fireman Brother:&lt;/p&gt;

&lt;img src=&quot;http://sam.curren.ws/images/funnytweet-zach.png&quot;/&gt;

&lt;p&gt;Until Twitter (and Facebook) give us better tools to manage different circles of friends, I do enjoy a sense of humor!&lt;/p&gt; 
				</description>
				
				<category>Personal</category>				
				
				<category>Technology</category>				
				
				<pubDate>Wed, 11 Feb 2009 06:12:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/2/11/Nontechnical-friends-on-Twitter</guid>
				
			</item>
			
			<item>
				<title>Cloud Computing - The 5th Utility</title>
				<link>http://sam.curren.ws/index.cfm/2008/12/22/Cloud-Computing--The-5th-Utility</link>
				<description>
				
				&lt;div class=&quot;zemanta-img&quot; style=&quot;display: block; float: right; margin: 1em; width: 250px&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/36521958172@N01/2584907013&quot;&gt;&lt;img style=&quot;border-right: medium none; border-top: medium none; display: block; border-left: medium none; border-bottom: medium none&quot; height=&quot;180&quot; alt=&quot;Cloud Computing&quot; src=&quot;http://farm4.static.flickr.com/3117/2584907013_a43d98cec8_m.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;    &lt;p class=&quot;zemanta-img-attribution&quot; style=&quot;font-size: 0.8em&quot;&gt;Image by &lt;a href=&quot;http://www.flickr.com/photos/36521958172@N01/2584907013&quot;&gt;stan&lt;/a&gt; via Flickr&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;em&gt;This post is part of a series of posts relating to distributed system design that I&apos;m completing as part of my Computer Science MS program at BYU. &lt;/em&gt;&lt;/p&gt;  &lt;p&gt;My 6th paper was written by some good folks at The University of Melbourne, Australia. They discuss the emerging &lt;a class=&quot;zem_slink&quot; title=&quot;Cloud computing&quot; href=&quot;http://en.wikipedia.org/wiki/Cloud_computing&quot; rel=&quot;wikipedia&quot;&gt;cloud computing&lt;/a&gt; paradigm as the 5th Utility, and compare it with both clusters and grids. The paper (&lt;a href=&quot;http://www.gridbus.org/reports/CloudITPlatforms2008.pdf&quot;&gt;PDF&lt;/a&gt;) argues that clusters and grids cannot be considered a utility by themselves, but cloud computing fits the necessary requirements.&lt;/p&gt;  &lt;p&gt;Clusters are groups of machines that work together to accomplish a single task, such as serve web content. Each machine is the same, and they all perform the same task. Clusters can scale in size to handle varying loads. Grids support multiple jobs of different characteristics, typically within a required framework. Clouds can scale (like clusters), and support a wide variety of jobs simultaneously. Clouds take scaling to such an extreme that they can scale to nothing, which neither clusters or grids support. This minimal commitment, without minimum usage levels, is what makes clouds so useful. Just as water, electricity, gas, and telephony (the first 4 utilities) can scale from nothing to very high usage, clouds can scale to any reasonable load.&lt;/p&gt;  &lt;p&gt;As I&#xe2;¬"ve mentioned in several of my other paper reviews, it is very clear that cloud computing exists in a layer underneath clusters and grids. Clusters and grids can be built on top of cloud computing systems, as cloud systems utilize &lt;a class=&quot;zem_slink&quot; title=&quot;Virtual machine&quot; href=&quot;http://en.wikipedia.org/wiki/Virtual_machine&quot; rel=&quot;wikipedia&quot;&gt;virtual machines&lt;/a&gt; as a hardware abstraction. The unique piece that makes it possible is the dynamic provisioning made available through the &lt;a class=&quot;zem_slink&quot; title=&quot;Application programming interface&quot; href=&quot;http://en.wikipedia.org/wiki/Application_programming_interface&quot; rel=&quot;wikipedia&quot;&gt;API&lt;/a&gt;. While some hosting providers can provision servers in only a few hours, cloud providers provision their resources within minutes, and sometimes within seconds.&lt;/p&gt;  &lt;p&gt;At this point, there are few cloud providers, and each has their own API, terms of use, and types of services. As more providers enter the market, a consistent interface will be needed in order to tame the API chaos. While some services may end up sharing an API, consistency can also be provided via a meta-interface that can translate the users commands into whatever syntax is required by the particular provider and service being utilized. This layer can either be constructed in the cloud itself, in client based toolkits, or as a combination of the two. The concept of a metalayer is demonstrated in the paper through the creation of a meta-storage service, capable of storing data in several cloud services through a single API.&lt;/p&gt;  &lt;p&gt;Just as interfaces are not likely to completely converge, the properties of each service are also not likely to be identical between providers. Speed, price, reliability, and other factors will vary, allowing users to select the proper service to fit their particular need. Some services will provide an &lt;a class=&quot;zem_slink&quot; title=&quot;Service level agreement&quot; href=&quot;http://en.wikipedia.org/wiki/Service_level_agreement&quot; rel=&quot;wikipedia&quot;&gt;SLA&lt;/a&gt;, providing service guarantees.&lt;/p&gt;  &lt;p&gt;It is still very early in the development of cloud services, and I&#xe2;¬"m sure that we will be seeing new entries for years to come. Amazon has hinted at some of the services that will be made available in this next calendar year, including load balancing and monitoring and automation management. As we see more entries in the space, it will become easier to understand the strengths and weaknesses of cloud computing, as well as define it&#xe2;¬"s limits.&lt;/p&gt;  &lt;p&gt;I&#xe2;¬"m excited for the expansion of cloud computing, and I look forward to more studies that can help us understand better.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class=&quot;zemanta-pixie&quot; style=&quot;margin-top: 10px; height: 15px&quot;&gt;&lt;img class=&quot;zemanta-pixie-img&quot; style=&quot;border-right: medium none; border-top: medium none; float: right; border-left: medium none; border-bottom: medium none&quot; src=&quot;http://img.zemanta.com/pixy.gif?x-id=cc685bf9-ff6f-434f-bc45-e393e9e5071b&quot; /&gt;&lt;/div&gt; 
				</description>
				
				<category>Technology</category>				
				
				<category>Amazon Web Services</category>				
				
				<category>Development</category>				
				
				<category>School</category>				
				
				<pubDate>Mon, 22 Dec 2008 20:19:21-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/12/22/Cloud-Computing--The-5th-Utility</guid>
				
			</item>
			
			<item>
				<title>Really Bad reasons not to auto-scale cloud based systems</title>
				<link>http://sam.curren.ws/index.cfm/2008/12/6/Really-Bad-reasons-not-to-autoscale-cloud-based-systems</link>
				<description>
				
				&lt;p&gt;O&apos;Reilly writer George Reese posted today what I consider to be &lt;a href=&quot;http://broadcast.oreilly.com/2008/12/why-i-dont-like-cloud-auto-scaling.html&quot;&gt;a poor evaluation of the perils of auto-scaling in the cloud&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;He does mention the concept of using a governor to limit the power of the auto-scale agent to spin up servers (and spend money), but his insight ends there. Anyone following cloudy issues will have read &lt;a href=&quot;http://blogs.smugmug.com/don/2008/06/03/skynet-lives-aka-ec2-smugmug/&quot;&gt;Don MacAskill&apos;s excellent post&lt;/a&gt; this past June, where he explains their auto-scale operation, and the need to set limits.&lt;/p&gt;  &lt;p&gt;George also makes a few arguments against auto-scaling, which I&apos;ll address briefly:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;1. Amazon and other clouds cannot respond fast enough to increased capacity needs.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;George claims that a 10 minute instance spin up time cannot respond fast enough to help. This is only true if you start to spin up your service when the existing is already (or nearly) toast. Common strategies involve already having some extra capacity running, so as to not immediately fold under an increase. Solving this problem is just tuning the thresholds.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;2. Got any disgruntled employees, unhappy customers, or malicious competitors?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;George claims that auto-scaling will waste your money in the event of a denial-of-service attack. What he doesn&apos;t mention is that a &lt;a class=&quot;zem_slink&quot; title=&quot;Denial-of-service attack&quot; href=&quot;http://en.wikipedia.org/wiki/Denial-of-service_attack&quot; rel=&quot;wikipedia&quot;&gt;DoS&lt;/a&gt; on a non-auto-scaled system will likely take it down. At the very least, it will artificially inflate your usage anyway, and you will still have to spin up more resources to handle the load. I&apos;d rather spend a few extra bucks and STAY UP.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;3. So you think you&apos;ll stick some governors in place...&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;George&apos;s main claim here is that your governor is likely to be set at the wrong value. Although he doesn&apos;t explicity say, he seems to be implying that a governor can only be used to limit the total number of machines. &lt;a class=&quot;zem_slink&quot; title=&quot;SmugMug&quot; href=&quot;http://www.smugmug.com/&quot; rel=&quot;homepage&quot;&gt;SmugMug&lt;/a&gt; (in the aforelinked post) indicates that their governor limits the rate at which new machines can be started. Using this strategy, only the &lt;em&gt;rate&lt;/em&gt; of traffic growth. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;4. So what about getting slashdotted?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;The main complaint here is that an auto-scale agent cannot tell the difference between true traffic growth and a random spike. Clearly, George has never worked with noise filters, which smooth data to reveal real trends. Evaluating load data from the past few minutes will allow agents to ignore spikes easily. Again, this is reduced to tuning thresholds.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;5. Don&apos;t you lose a key value of the cloud without auto-scaling?&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Despite George&apos;s claims that no value is lost, there are clear cases where auto-scaling can save your bacon. He claims that &apos;capacity planning&apos; is the clear answer. I agree with him on the importance of capacity planning, but disagree that proper capacity planning eliminates the need to auto-scale. A good auto-scaling system can save quite a lot of money in cloud processing expenses, which will do wonders for the bottom line.&lt;/p&gt;  &lt;h4&gt;Summary&lt;/h4&gt;  &lt;p&gt;I&apos;m not bashing capacity planning here. I believe that capacity planning concepts work very well with auto-scaling, that that proper user of governors and properly set thresholds are the right way to go.&lt;/p&gt;  &lt;p&gt;I rarely respond to lousily written posts and dumb opinions, but this one irked me for some reason. At this point, I have nothing but logic and the experiences of others to rely upon. Over the next few years, I plan on gaining some extensive experience in auto-scaling cloud based systems, and perhaps then I&apos;ll be in a better position to dish a proper smack-down.&lt;/p&gt;  &lt;div class=&quot;zemanta-pixie&quot; style=&quot;margin-top: 10px; height: 15px&quot;&gt;&lt;img class=&quot;zemanta-pixie-img&quot; style=&quot;border-right: medium none; border-top: medium none; float: right; border-left: medium none; border-bottom: medium none&quot; src=&quot;http://img.zemanta.com/pixy.gif?x-id=43680409-4a62-4fc6-9626-f5ba611dcd26&quot; /&gt;&lt;/div&gt; 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Amazon Web Services</category>				
				
				<category>Development</category>				
				
				<category>Technology</category>				
				
				<pubDate>Sat, 06 Dec 2008 19:26:57-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/12/6/Really-Bad-reasons-not-to-autoscale-cloud-based-systems</guid>
				
			</item>
			
			<item>
				<title>I&apos;m enjoying my T-Mobile G1</title>
				<link>http://sam.curren.ws/index.cfm/2008/10/22/Im-enjoying-my-TMobile-G1</link>
				<description>
				
				&lt;p&gt;I was one of the folks to pre-order the first Android phone, the T-Mobile G1. The G1 launched today and is available at T-Mobile locations. I pre-ordered mine (and one for my wife) and received it yesterday afternoon. I&apos;ve had several requests for a review, so I&apos;ll post a few initial thoughts here.&lt;/p&gt;  &lt;p&gt;First, I love the phone. Early reviews called it brickish, ugly, and all sorts of horrible names. I find it to be none of those things. In fact, the phone is smaller then I was expecting.&lt;/p&gt;  &lt;p&gt;Getting the phone setup was VERY EASY. On first boot, you enter your Google account information, or set up an account if you don&apos;t already have one. Within a minute or so, my contacts were downloaded from Gmail, I had a mail alert, and my calendar was available.&lt;/p&gt;  &lt;p&gt;I bought a black phone, and my wife the bronze color so we could tell them apart. The bronze color is much nicer then I expected, but the lighter keyboard on the bronze model was slightly harder to read. The keys on the black model were very easy.&lt;/p&gt;  &lt;p&gt;I&apos;m not in a T-Mobile 3G area, and I knew that when I ordered the phone. I find the EDGE speeds to be just fine for most uses of the phone. I was able to listen to a podcast within seconds of starting the download, and I find most apps to be responsive when sending and receiving data. The mail app is particularly nice, as it caches data locally and handles sending email in the background.&lt;/p&gt;  &lt;p&gt;The capacitive screen is flush mounted, like the iPhone. It&apos;s a little smaller then the iPhone screen, but the same resolution. It doesn&apos;t feel cramped, and the color is great.&lt;/p&gt;  &lt;p&gt;The selection of apps in the &lt;a href=&quot;http://www.android.com/market.html&quot;&gt;Android Marketplace&lt;/a&gt; is a little thin at the moment, but user submission will open on Monday. There will also be an &lt;a href=&quot;http://forums.t-mobile.com/tmbl/board/message?board.id=87&amp;amp;thread.id=3212&quot;&gt;Over The Air firmware update&lt;/a&gt; in the next day or so, which contains minor updates and fixes.&lt;/p&gt;  &lt;p&gt;I&apos;m sure I&apos;ll have more to say later, but I wanted to mention these few things that I hadn&apos;t found on other websites and reviews.&lt;/p&gt; 
				</description>
				
				<category>Android</category>				
				
				<category>Personal</category>				
				
				<category>Technology</category>				
				
				<pubDate>Wed, 22 Oct 2008 14:04:18-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/10/22/Im-enjoying-my-TMobile-G1</guid>
				
			</item>
			
			<item>
				<title>Why iPhone users should love the T-Mobile G1</title>
				<link>http://sam.curren.ws/index.cfm/2008/10/13/Why-iPhone-users-should-love-the-TMobile-G1</link>
				<description>
				
				&lt;p&gt;Every group of users has a few extremists, and I have run into quite a few of the Apple iPhone variety lately. Most of the negative comments about the first Android phone come in the form of an iPhone fan trash talking the G1. I find these types of comments very interesting, because iPhone users should be pretty excited about the G1. &lt;/p&gt;  &lt;p&gt;Before I collect even more of the comments I&apos;m talking about, understand that I&apos;m not claiming that all iPhone users should be ready to convert. I&apos;m talking about the positive effects of competition, and the ultimate win for users of either device. &lt;/p&gt;  &lt;p&gt;It is clear that the iPhone has influenced the design of the G1. It will also be clear over the next year or so that the Android phones will influence the features of the iPhone. While I am sure that Apple is not about to adopt the physical design of the G1, there are other things there that Apple will be sure to emulate. &lt;/p&gt;  &lt;p&gt;The biggest issue at hand is the ability of Android phones to run background processes. Android&apos;s architecture allows for applications to perform background tasks, yet allows the operating system to suspend tasks quickly to allow for answering calls and other phone related tasks. The applications that can be built with Android will have a technical leg up on iPhone apps in this important aspect. &lt;/p&gt;  &lt;p&gt;It won&apos;t be long before Apple follows suit. They will need to allow some sort of background processes in order to match the level of application sophistication and usability of Android Apps. &lt;/p&gt;  &lt;p&gt;Also at issue is the restrictions that Apple places on developers with their restrictive NDAs and practice of denying apps that compete with Apple products in any way. Their &lt;a href=&quot;http://pragdave.blogs.pragprog.com/pragdave/2008/10/the-apple-nda-i.html&quot;&gt;recent changes to some NDAs&lt;/a&gt; are a sure sign they are feeling pressure from a more open platform. &lt;/p&gt;  &lt;p&gt;This is where iPhone users gain. By pushing each other&apos;s limits, Apple and Google will produce some great technology, and both iPhone fans and Android fans will gain. So seriously, everyone calm down a little, and enjoy the market pressures bring even greater phones to all of us. &lt;/p&gt; 
				</description>
				
				<category>Android</category>				
				
				<category>Technology</category>				
				
				<pubDate>Mon, 13 Oct 2008 23:00:44-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/10/13/Why-iPhone-users-should-love-the-TMobile-G1</guid>
				
			</item>
			
			<item>
				<title>Android + Google Contacts API = Awesome</title>
				<link>http://sam.curren.ws/index.cfm/2008/9/30/Android--Google-Contacts-API--Awesome</link>
				<description>
				
				&lt;p&gt;Android&apos;s address book syncs with the configured GMail account&apos;s address book. The GMail address book provides a group feature, allowing you to group your contacts together for easy management. Android can sync with some or all of these groups.&lt;/p&gt;  &lt;p&gt;This allows entering phone numbers online instead of using the phone&apos;s small keyboard and screen. It also allows entering an email address from your phone, and having that available the next time you send an email from your desktop. In addition, you can import contacts into the address book from a CSV file. All these features are available right now, with no programming required.&lt;/p&gt;  &lt;p&gt;While this is pretty cool by itself, it is made more powerful by the &lt;a href=&quot;http://code.google.com/apis/contacts/&quot;&gt;Google Contacts API&lt;/a&gt;, which allows programmatic access to your GMail address book. This opens all sorts of cool features that are not natively part of the address book on either GMail or an Android phone.&lt;/p&gt;  &lt;p&gt;Businesses can sync the company address book to employee phones, including updates made on the phone. Those changes can then be synced to other employee phones very quickly.&lt;/p&gt;  &lt;p&gt;Using a third party service, you could also allow shared groups between individuals, so my wife and I can share the &apos;family&apos; group, and both always have current numbers, no matter who enters the information.&lt;/p&gt;  &lt;p&gt;Perhaps the most powerful possibility is the integration between your address book and existing social networks. When I update my contact information, that information can be automatically updated in the contact lists of my authorized friends, and that information is quickly synced to their mobile phone.&lt;/p&gt;  &lt;p&gt;The Contacts API uses &lt;a href=&quot;http://oauth.net/&quot;&gt;oAuth&lt;/a&gt;, a mechanism for allowing access to your contacts without giving up your password. This standard access method means that you can use 3rd party services without worrying about your email being compromised, or unauthorized access to your Google Checkout purchases.&lt;/p&gt;  &lt;p&gt;I&apos;m looking forward to the options available as I seek to make my contact list management a little nicer.&lt;/p&gt; 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Android</category>				
				
				<category>Technology</category>				
				
				<pubDate>Tue, 30 Sep 2008 11:51:44-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/9/30/Android--Google-Contacts-API--Awesome</guid>
				
			</item>
			
			<item>
				<title>The Android Unlock Screen</title>
				<link>http://sam.curren.ws/index.cfm/2008/9/29/The-Android-Unlock-Screen</link>
				<description>
				
				&lt;p&gt;Smartphone security is a big issue. Not only can a thief make calls on your account, but they have access to your email, your calendar, your entire contact list, and everything else that is important. Here, I take a quick look at methods used to secure Apple&apos;s iPhone and Google&apos;s Android platform.&lt;/p&gt;  &lt;p&gt;With the iPhone, Apple introduced an intuitive &amp;quot;slide to unlock&amp;quot; control that prevents accidental touches on the screen. Because the slider is so easy to recognize and use, many kids can figure it out immediately. For this reason, and for additional security, the iPhone also has a keylock feature that accepts a 4 digit pin number.&lt;/p&gt;  &lt;p&gt;Google&apos;s new Android phone operating system combines the concept of the slide to unlock feature and the security code, with a grid of 9 dots. The unlock pattern requires touch at least 4 dots, and unlocks the phone when the correct pattern is entered.&lt;/p&gt;  &lt;div class=&quot;wlWriterSmartContent&quot; id=&quot;scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ce5c293a-ebb9-40a5-9cf2-8f85eb77c122&quot; style=&quot;padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px&quot;&gt;&lt;div id=&quot;085bb154-9fa1-48e1-a2dc-37b5d1f4785b&quot; style=&quot;margin: 0px; padding: 0px; display: inline;&quot;&gt;&lt;div&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=JGCIlAwrpvI&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;fs=1&quot; target=&quot;_new&quot;&gt;&lt;img src=&quot;http://sam.curren.ws/enclosures/video5665d11fec4d.jpg&quot; galleryimg=&quot;no&quot; onload=&quot;var downlevelDiv = document.getElementById(&apos;085bb154-9fa1-48e1-a2dc-37b5d1f4785b&apos;); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/JGCIlAwrpvI&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;fs=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;param name=\&amp;quot;wmode\&amp;quot; value=\&amp;quot;transparent\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/JGCIlAwrpvI&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;hl=en&amp;amp;fs=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; wmode=\&amp;quot;transparent\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;This combination is an excellent combination of the two concepts, but how does it measure up to the security of the iPhone&apos;s 4 digit pin?&lt;/p&gt;  &lt;p&gt;4 digit pass codes (using numbers) allows for 10,000 combinations. The math for the pattern combinations is more complicated, but &lt;a href=&quot;http://beust.com/weblog/archives/000497.html&quot;&gt;Cedric has done it for us&lt;/a&gt;. With a 4 dot pattern, there are 1624 combinations. It gets better with 5 dot patterns (7152 combinations) and on, for a grand total of 389,112 total combinations.&lt;/p&gt;  &lt;p&gt;So how does Android&apos;s pattern compare to the iPhone&apos;s pin? The Android pattern is likely to be used more then then iPhone&apos;s pin lock, but at the simple end of the possible patterns, there are far fewer combinations.&lt;/p&gt;  &lt;p&gt;I prefer the Android approach, for two reasons. First, the dot screen is likely to be used by far more people then the iPhone&apos;s pin lock. Second, the dot screen allows the uber-paranoid to use a full 9 dot pattern, greatly increasing the possible combinations. Even with only 1624 options for a 4 dot pattern, it would take over 27 minutes to try every combination, with 1 second per attempt. Add some delay between failures, and you can easily stretch that time to over 9 hours. That&apos;s good enough for me.&lt;/p&gt;  &lt;p&gt;As far as actual security is concerned, that&apos;s a longer discussion. The low combination count of the dot screen can be easily augmented with exponential delays between tries. Security holes elsewhere in the system can easily render the unlock screen useless, etc. Credentials can be removed after a certain number of login failures. Time will tell which one can be &apos;proven&apos; to be more secure. &lt;/p&gt;  &lt;p&gt;In the meantime, I&apos;m looking forward to dreaming up my own unlock pattern.&lt;/p&gt; 
				</description>
				
				<category>Android</category>				
				
				<category>Technology</category>				
				
				<pubDate>Mon, 29 Sep 2008 13:40:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/9/29/The-Android-Unlock-Screen</guid>
				
			</item>
			
			<item>
				<title>My Android App Wishlist</title>
				<link>http://sam.curren.ws/index.cfm/2008/9/22/My-Android-App-Wishlist</link>
				<description>
				
				&lt;p&gt;As I&apos;ve been impatiently waiting for the impending announcement of T-Mobile&apos;s G1 Android phone, I&apos;ve been thinking about which apps I will find (or build) and install. While current iPhone users might scoff at my lack of apps, there are a few here that are not currently possible with the current iPhone SDK. My list of desired phone abilities, with commentary:&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Automagically publish my location to an online service.&lt;/strong&gt; An obvious service would be &lt;a href=&quot;http://fireeagle.yahoo.net/&quot;&gt;Yahoo&apos;s FireEagle&lt;/a&gt;. By Automagic, I mean that no user interaction is required. This will enable me to write programs that respond to my change in location, such as automatically forwarding my work extension to my cell when I&apos;m out of the office. It will also make it easier to find my phone when I&apos;ve left it somewhere. This background functionality is not possible with the current iPhone SDK.    &lt;br /&gt;Find cheap gas. The first thing this app should do is find my location and then show me gas prices, with price and distance to station. Simple enough.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Maintain a car maintenance log.&lt;/strong&gt; I&apos;d like to record oil changes, repairs, tire rotations and similar info, for multiple cars. The ability to log tank info to calculate mileage is a plus.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Record business mileage logs.&lt;/strong&gt; This would help me keep track of business miles without that pesky paper log book in the glove box.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Allow updating a personal health log.&lt;/strong&gt; Weight is required, and a quick way to enter exercise and gym workouts would be great. If I don&apos;t update my weight in awhile, it ought to pester me.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Provide an intelligent to-do list.&lt;/strong&gt; This list should also be available online. List sharing between multiple people(phones) is a must. Location aware lists are a plus.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;A real Twitter client.&lt;/strong&gt; Being able to post and read tweets is required, but what I want here is a client that will monitor in the background, and update me to new tweets as if they were sent via SMS. Tweets should show as notifications in the background. Again, the ability of an app to receive updates and post them to the notifications bar (without launching a screen) is beyond the current abilities of the iPhone SDK.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Provide on-the-spot reviews and price comparisons.&lt;/strong&gt; I&apos;m cheating a little here, as one of the Android Developer Challange winners is &lt;a href=&quot;http://code.google.com/android/adc_gallery/app.html?id=8&quot;&gt;CompareEverywhere&lt;/a&gt;, which fits this nicely.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Behave appropriately to the situation.&lt;/strong&gt; Cheating again. When I&apos;m at church, be silent. When at home and plugged into power, connect via Wifi. See &lt;a href=&quot;http://code.google.com/android/adc_gallery/app.html?id=25&quot;&gt;Locale&lt;/a&gt;.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Make &lt;a href=&quot;http://www.geocaching.com/&quot;&gt;Geocaching&lt;/a&gt; dead simple.&lt;/strong&gt; Allow viewing nearby geocaches, help me find it, and make it easy to log on the spot. A little recreation for a free moment here and there.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Post pictures online.&lt;/strong&gt; Many online services for this, and I suspect this might be built into the phone upon delivery.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Calendar that talks with Google Calendar.&lt;/strong&gt; Getting alerts via the phone instead of SMS would be great, as being able to easily add and edit on the phone. I know the mobile version of Google Calendar does this, but having a native app would be nice.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;Contacts that sync online.&lt;/strong&gt; I&apos;m tired of entering all my contact info into each new phone that I buy. I&apos;d like to be able to edit them online, and have them easily (and quickly) move to a new phone. This is a no-brainer with the &lt;a href=&quot;http://code.google.com/apis/contacts/&quot;&gt;Google Contacts API&lt;/a&gt;, and I suspect this might be baked in as well.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Well, there you have it. As you can see, I&apos;m easily pleased. I&apos;ve been waiting since the first Android announcement for the experience, and I&apos;m looking forward to my new phone.&lt;/p&gt; 
				</description>
				
				<category>Development</category>				
				
				<category>Personal</category>				
				
				<category>Technology</category>				
				
				<pubDate>Mon, 22 Sep 2008 01:31:02-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/9/22/My-Android-App-Wishlist</guid>
				
			</item>
			
			<item>
				<title>Missing Pieces of Cloud Computing</title>
				<link>http://sam.curren.ws/index.cfm/2008/8/21/Missing-Pieces-of-Cloud-Computing</link>
				<description>
				
				&lt;p&gt;Between Google&apos;s &lt;a href=&quot;http://code.google.com/appengine/&quot;&gt;AppEngine&lt;/a&gt; and Amazon&apos;s &lt;a href=&quot;http://www.amazon.com/gp/browse.html?node=3435361&quot;&gt;Web Services&lt;/a&gt; platform, you can build almost everything you need to run a scalable system. The &apos;almost&apos; is what is currently preventing these platforms from supporting truly beautiful cloud systems. I believe that the two most important pieces of Cloud Computing are scheduled processes and load balancing. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Scheduled Processes&lt;/strong&gt; in a cloud computing application are necessary for tasks both simple and complex. On the simple side, a task can be used to send reminder emails to system users, or generate periodic reports based on system data. On the complex side, scheduled processes might communicate with a processing grid via asynchronous queues, or perform orchestration functions to manage a scalable computing cluster. The best provider of this service is likely to be Google&apos;s AppEngine.&lt;/p&gt;  &lt;p&gt;During an AppEngine session at &lt;a href=&quot;http://code.google.com/events/io/&quot;&gt;Google IO&lt;/a&gt;, the presenter did mention that offline processing was a planned (and often requested) feature, but they did not give details. Their offline processing may only be the ability to launch threads and return rapidly to the user, but I hope it also contains some mechanism for the timing of script execution.&lt;/p&gt;  &lt;p&gt;In the meantime, it is possible to invoke processing scripts from an automated system, either running on hardware you own or a service such as &lt;a href=&quot;http://www.webcron.org/index.php?&amp;lang;=en&quot;&gt;WebCron&lt;/a&gt;, but it will be nice to have a more elegant solution.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Load Balancing&lt;/strong&gt; allows for a group of computers to be joined into a cluster, allowing service of more requests then a single machine can handle. While AppEngine does not require load balancing to scale, clusters within &lt;a href=&quot;http://www.amazon.com/EC2-AWS-Service-Pricing/b/ref=sc_fe_l_2?ie=UTF8&amp;amp;node=201590011&amp;amp;no=3435361&amp;amp;me=A36L942TSJ2AJA&quot;&gt;EC2&lt;/a&gt; need this functionality if they service public requests. Load balancers exist in both hardware and software form, and generally provide several methods of load distribution, system failure handling, and sometimes SSL termination for secure connections. Currently, software load balancers must be used to load balance within the EC2 environment, and at least 2 of these machines are required to gracefully handle machine failures.&lt;/p&gt;  &lt;p&gt;Providing this service in a scalable way would greatly simplify the design of computing clusters within the EC2 environment. It would also make managing public IP addresses a little easier, as only the load balancing service needs a public address. Amazon is currently testing a form of persistent storage within their EC2 environment, and I imagine that a load balancing solution could be offered in a similar form. Amazon may decide not to offer this service, preferring 3rd party solutions.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;In Summary&lt;/strong&gt;, I look forward to the future of cloud infrastructure. I&apos;m excited to be able to develop to these platforms, and I expect great things in the future from both of these companies and others as well.&lt;/p&gt; 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Amazon Web Services</category>				
				
				<category>Development</category>				
				
				<category>Technology</category>				
				
				<pubDate>Thu, 21 Aug 2008 09:00:56-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/8/21/Missing-Pieces-of-Cloud-Computing</guid>
				
			</item>
			
			<item>
				<title>Using the Neo FreeRunner with Windows XP/Vista</title>
				<link>http://sam.curren.ws/index.cfm/2008/7/14/Using-the-Neo-FreeRunner-with-Windows-XPVista</link>
				<description>
				
				&lt;p&gt;The &lt;a href=&quot;http://wiki.openmoko.org/wiki/Neo_FreeRunner&quot;&gt;Neo&lt;/a&gt; is a hackers phone. It&apos;s open and flexible, but at this point, it requires some linux mojo to get it up and going, beyond the basic apps that it comes with. I have spent time with linux, with some desktop experience, and plenty of server experience. This is my first bout with a linux mobile device, and my previous experience has helped. If you have never used linux from the command line before, proceed with caution.&lt;/p&gt;  &lt;p&gt;The first thing you will want to do when you get your Neo is hook it up to your computer for setup and customization. While you can open a shell on the phone, typing on a multi-tap keyboard for anything beyond simple commands will get old fast. The connection you will set up will give you ssh/scp access to the phone, and also give the phone access to the internet through your computer.&lt;/p&gt;  &lt;p&gt;I&apos;m a daily Windows user (I know, one of THOSE), so I spent a little time today getting my ducks in a row. I tried a handful of ideas that didn&apos;t work, and I have here my notes on what did work.&lt;/p&gt;  &lt;p&gt;PS: Instructions on connecting using various Linux distributions and OSX are available on the &lt;a href=&quot;http://wiki.openmoko.org/wiki/Getting_Started_with_your_Neo_FreeRunner&quot;&gt;Getting Started&lt;/a&gt; page.&lt;/p&gt;  &lt;h1&gt;SSH access to the Neo&lt;/h1&gt;  &lt;p&gt;When you plug the Neo into your Windows laptop, it will be recognized as a USB Ethernet/RNDIS Gadget, and no default driver will be found. Download &lt;a href=&quot;http://users.informatik.uni-halle.de/~rabe/neo/Neo1973.inf&quot;&gt;this one&lt;/a&gt; and install it as the driver. This will enable charging of your device as well as USB network access.&lt;/p&gt;  &lt;p&gt;A new network connection will now show in the Control Panel &amp;gt; Network Connections window, with a device name of &amp;quot;Linux USB Ethernet/RNDIS Gadget&amp;quot;. I renamed the connection to &amp;quot;NeoConnection&amp;quot; to make it easy to identify.&lt;/p&gt;  &lt;p&gt;In the properties of the connection, manually set your IP address to 192.168.0.200 and your subnet mask to 255.255.255.0. Your Neo will start with an IP address of 192.168.0.202, and expects the .200 machine on the network to be a gateway.&lt;/p&gt;  &lt;p&gt;At this point, you should be able to use &lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/putty/&quot;&gt;Putty&lt;/a&gt; and &lt;a href=&quot;http://winscp.net/eng/index.php&quot;&gt;WinSCP&lt;/a&gt; to access your device. Login as root, with a blank password.&lt;/p&gt;  &lt;h1&gt;Neo access to Internet&lt;/h1&gt;  &lt;p&gt;Although you can SSH to your Neo, the Neo cannot see outside Internet stuff at this point. There are a few steps to make this work. I tried following some of the instructions on the &lt;a href=&quot;http://wiki.openmoko.org/wiki/Neo1973_and_Windows&quot;&gt;Neo1973 Windows page&lt;/a&gt; on the &lt;a href=&quot;http://wiki.openmoko.org/wiki/Main_Page&quot;&gt;OpenMoko Wiki&lt;/a&gt;, but they didn&apos;t work for me.&lt;/p&gt;  &lt;p&gt;You want to share you main computer&apos;s Internet connection with your Neo. Avoid the Bridge Connection options you will see, as they do some messing around with your routing and connection settings. In the Properties of your main network connection (Wifi or Ethernet), open the Sharing tab. Check the &amp;quot;Allow other network users to connect through...&amp;quot; checkbox, and save your settings. You might get a warning about the gateway being 192.168.0.1&lt;/p&gt;  &lt;p&gt;It is worth changing the defult DNS settings on your Neo. I&apos;m partial to &lt;a href=&quot;http://www.opendns.com/&quot;&gt;OpenDNS&lt;/a&gt;, but you can use whatever you like. &lt;/p&gt;  &lt;p&gt;Use WinSCP to modify /etc/network/interfaces. First, change the line under &lt;strong&gt;iface usb0 ...&lt;/strong&gt; that starts with &lt;strong&gt;up echo ...&lt;/strong&gt; to use 208.67.222.222 instead of your own local machine. In the same section, change the gateway to 192.168.0.1&lt;/p&gt;  &lt;p&gt;You will need to restart your phone (&lt;strong&gt;shutdown -r now&lt;/strong&gt;, or use the hardware buttons) with the hardware buttons or init 5, and when it starts back up you should be able to ping google.com from an ssh session. If you can, then you are ready to rock.&lt;/p&gt;  &lt;p&gt;Now, go install useful stuff as described on the &lt;a href=&quot;http://wiki.openmoko.org/wiki/Getting_Started_with_your_Neo_FreeRunner&quot;&gt;Getting Started&lt;/a&gt; page.&lt;/p&gt; 
				</description>
				
				<category>Technology</category>				
				
				<pubDate>Mon, 14 Jul 2008 21:48:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/7/14/Using-the-Neo-FreeRunner-with-Windows-XPVista</guid>
				
			</item>
			</channel></rss>