<?xml version="1.0" encoding="utf-8"?>
			
			<rss version="2.0">
			<channel>
			<title>SamSpeak</title>
			<link>http://sam.curren.ws/index.cfm</link>
			<description>What I Gotta Say</description>
			<language>en-us</language>
			<pubDate>Thu, 09 Sep 2010 01:51:50-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>On Being 30</title>
				<link>http://sam.curren.ws/index.cfm/2010/1/3/On-Being-30</link>
				<description>
				
				&lt;p&gt;I had my 30th birthday this last week. I was frequently asked how I has handling it. Turning 30 seems to carry some serious mental baggage for many people, and seems to cause reflection on one&apos;s progress through life.&lt;/p&gt;

&lt;p&gt;I&apos;m very happy with my life. I have an &lt;a href=&quot;http://picturememine.com/&quot;&gt;awesome wife&lt;/a&gt;, two great kids (and one on the way!), a Masters Degree, a house, a job where I work on &lt;a href=&quot;http://kynetx.com/&quot;&gt;exciting things with good people&lt;/a&gt;, good neighbors and friends, and a small but growing collection of tools in my workshop. I have a relationship with &lt;a href=&quot;http://jesuschrist.lds.org/&quot;&gt;my Savior&lt;/a&gt;, and I&apos;m grateful for all he has blessed and granted me with.&lt;/p&gt;

&lt;p&gt;I&apos;m don&apos;t remember having any specific goals to meet by the time I was 30, so I declare them met.&lt;/p&gt;

&lt;p&gt;Perhaps the only downside is that I&apos;m no longer considered a 20-something. Apparently everyone expects the next big &apos;thing&apos; to come from a 20-something. I&apos;m no off the radar, leaving me free to surprise everyone when I do awesome things.&lt;/p&gt;

&lt;p&gt;Being 30 is just fine with me.&lt;/p&gt;

&lt;p&gt;On a side note: My 4 year old asked how old I was on my birthday. We told her that I was &apos;old&apos;. She then asked if I was going to die soon. Ahh, the relativity of things.&lt;/p&gt; 
				</description>
				
				<category>Personal</category>				
				
				<pubDate>Sun, 03 Jan 2010 08:07:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2010/1/3/On-Being-30</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: The Numbers</title>
				<link>http://sam.curren.ws/index.cfm/2009/8/30/Sam-Rides-1000-The-Numbers</link>
				<description>
				
				&lt;p&gt;I&apos;ve now finished my 1,000 mile challenge, and like any self-respecting geek, I ran a few numbers about my ride. I&apos;ve posted them here, as well as some thoughts about the experience. &lt;/p&gt;  &lt;h3&gt;Stats&lt;/h3&gt;  &lt;p&gt;Start Date: 15 May 2009    &lt;br /&gt;Days: 100 Calendar Days     &lt;br /&gt;Time: 66.5 riding hours     &lt;br /&gt;Final Mileage: 1,003 miles     &lt;br /&gt;Miles from Commuting: 830     &lt;br /&gt;Miles in organized rides: 79 (Tour de Donut, ULCER 60 mile option)    &lt;br /&gt;Number of tire rotations: 792,300     &lt;br /&gt;Flats: 0* (After a small celebration at the park, I got a flat on the way home....)     &lt;br /&gt;Weight lost: ~10lbs.    &lt;br /&gt;Average length of ride: 10 miles    &lt;br /&gt;Average Moving Speed: 15 mph     &lt;br /&gt;Riding Hours: 66.5     &lt;br /&gt;Miles I didn&apos;t drive in my car: ~400     &lt;br /&gt;Time I didn&apos;t spend in my car: 16 hours &lt;/p&gt;  &lt;h3&gt;Random Facts&lt;/h3&gt;  &lt;p&gt;Many of my commuting miles were spent on the Jordan River Pathway in Utah County.    &lt;br /&gt;I did not listen to music (or anything else) at all.     &lt;br /&gt;My legs are now in the best shape they have ever been.     &lt;br /&gt;Because there is always a breeze, temperature didn&apos;t bother me as much as I thought it would. &lt;/p&gt;  &lt;h3&gt;Thoughts&lt;/h3&gt;  &lt;p&gt;When I started this challenge, I felt like 1,000 miles was a huge goal. After having completed it, I still feel like it was a huge goal, but in a different way then expected. Pedaling 1,000 miles was not really that difficult. More difficult was my willingness to sacrifice the time it took to ride each day. I cheated to make it work. By trading 10 minutes of drive time for ~45min of riding, I got 45 min of riding in while only sacrificing 35 minutes of time. Added up cumulatively, 16 hours not spent in a car is quite a lot of time recovered and put to better use exercising. &lt;/p&gt;  &lt;p&gt;Part of the reason I enjoyed this challenge so much is the route I take to work. I only travel through one major intersection, and most of my riding is on low traffic country roads or paved pathways. My route allows for many variations I can take for various distances. Having a variety of routes breaks things up, and I didn&apos;t get too bored of any one route. &lt;/p&gt;  &lt;p&gt;With my route and the fact that I was on a bike, I rarely dealt with traffic. After driving more this last week, I have begun to remember how bad commuting traffic can be while driving home. On a bike, I experience almost none of it. &lt;/p&gt;  &lt;p&gt;I accomplished my goal in just over three months. Utah has plenty of weather not conducive to cycling, so part of the year it is very painful to ride. Even so, I feel like almost anyone willing to make a consistent effort can accomplish this same goal. I&apos;ll write about my gear in another post, but my bike is a simple mountain bike, and I spent very little on gear, especially when you consider comparable gym fees. How much time did you spend exercising in a gym this year? 66 hours? How much did you spend on membership fees? Yeah, my gear was pretty cheap. &lt;/p&gt;  &lt;p&gt;So, will I do it again next year? Definitely. I do hope to be on a road bike though...&lt;/p&gt; 
				</description>
				
				<category>Bikes</category>				
				
				<category>Personal</category>				
				
				<category>Android</category>				
				
				<pubDate>Sun, 30 Aug 2009 19:52:57-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/8/30/Sam-Rides-1000-The-Numbers</guid>
				
			</item>
			
			<item>
				<title>Sam Rides 1000: Mountain Bike Commuting Tires</title>
				<link>http://sam.curren.ws/index.cfm/2009/7/28/Sam-Rides-1000-Mountain-Bike-Commuting-Tires</link>
				<description>
				
				&lt;img src=&quot;http://www.conti-online.com/generator/www/de/en/continental/bicycle/themes/tires/hidden/traffic/img/traffic_uv.ief&quot; style=&quot;width:200px;border:3px solid black;float:right;&quot;/&gt;
Early on in my 1,000 mile quest, one of my tires needed to be replaced. I had heard someplace that you could be tires designed for pavement for a mountain bike, and I started poking around. 

My good friends at &lt;a href=&quot;http://www.infinitecycles.com/&quot;&gt;Infinite Cycles&lt;/a&gt; recommended that I buy some &lt;a href=&quot;http://www.conti-online.com/generator/www/de/en/continental/bicycle/themes/tires/hidden/traffic/traffic_en.html&quot;&gt;Continental Traffic Tires&lt;/a&gt;. I have been completely happy with these tires. 

After installing the tires, I was immediately impressed with the lower rolling resistance, when compared to the knobby bike tires I was used to. The road felt smooth, my downhill speeds increased, and the tires feel very stable cornering. It leads to a much more pleasant experience. They perform well on wet streets as well.
&lt;img src=&quot;http://twitpic.com/show/thumb/acneg.jpg&quot; style=&quot;float:left;&quot;/&gt;
After more then a month of commuting on these tires, we took a vacation to Colorado for some singletrack sans kids. With a very few exceptions, these tires performed as well as my previous knobbys! It did slip more then expected as I rode over smooth branches and rocks, but I was very happy with my experience.

The reviews that I&apos;ve read indicate that these tires last for years, and I&apos;m looking forward to enjoying them on my commute!

If you are among those of us that commute on a mountain bike, do yourself a favor and buy a pair of these tires. The riding experience is much more enjoyable, and you&apos;ll find yourself riding more! 
				</description>
				
				<category>Bikes</category>				
				
				<category>Personal</category>				
				
				<pubDate>Tue, 28 Jul 2009 12:32:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/7/28/Sam-Rides-1000-Mountain-Bike-Commuting-Tires</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>Progressive Spatial Networks</title>
				<link>http://sam.curren.ws/index.cfm/2009/5/30/Progressive-Spatial-Networks</link>
				<description>
				
				&lt;p&gt;I&#xe2;¬"ve been pretty silent the last few months here on my blog. I&#xe2;¬"ve been pretty busy with things like settling into our new house and starting full-time at &lt;a href=&quot;http://www.kynetx.com&quot;&gt;Kynetx&lt;/a&gt;. A major sap on my free time both recently and for the last several years has been my Master&#xe2;¬"s Thesis. I&#xe2;¬"ve graduated now, and finally carved out some time to update my blog.&lt;/p&gt;  &lt;p&gt;In my efforts in resuming regular blogging, I find it appropriate to post my Thesis for all the world. First, a little backstory.&lt;/p&gt;  &lt;p&gt;For my thesis work, I worked on an algorithm to combine GPS tracklogs into what I call a spatial network. I chose this work because of my experience building &lt;a href=&quot;http://www.activetrails.com&quot;&gt;ActiveTrails.com&lt;/a&gt;. As any excited graduate student (pre-thesis student, that is) I had grand ideas about what I was going to accomplish with my thesis work. Luckily for me, my graduate advisor guided me properly through the process, and I finally completed my work. &lt;/p&gt;  &lt;p&gt;I do find it strange that only a written Thesis is required for an MS in Computer Science. I&#xe2;¬"ve decided that it only makes sense to post my code, that others might be able to experiment with my work without having to rewrite it from scratch. Now, I&#xe2;¬"m sure I&#xe2;¬"ve made plenty of mistakes in my code, and I hope that others can produce much better results then I, and not fall into the same lines of thinking that perhaps restricted my results. &lt;/p&gt;  &lt;p&gt;I originally had plans to organize my code, clean it up, flush it full of comments, and organize my result files. And then I realized it might never happen. I&#xe2;¬"ve packaged my code, source files, and results into a zip file, and though it isn&#xe2;¬"t perfectly clean, I hope it&#xe2;¬"s useful for those who want to use it.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://sam.curren.ws/enclosures/ProgressiveSpatialNetworks.pdf&quot;&gt;Progressive Spatial Networks: Learning from GPS Tracklogs&lt;/a&gt; (pdf link)&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://sam.curren.ws/enclosures/SamsThesis.zip&quot;&gt;Source data, python source code, and result files&lt;/a&gt; (zip file).&lt;/p&gt; 
				</description>
				
				<category>Development</category>				
				
				<category>Personal</category>				
				
				<category>School</category>				
				
				<pubDate>Sat, 30 May 2009 00:00:39-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/5/30/Progressive-Spatial-Networks</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>Trouble with Random Long-Running request in ColdFusion 8</title>
				<link>http://sam.curren.ws/index.cfm/2009/2/10/Trouble-with-Random-LongRunning-request-in-ColdFusion-8</link>
				<description>
				
				I&apos;ve been experiencing some run-time weirdness with ColdFusion for the past year or so, and I&apos;ve finally decided to post my observations and see if anyone else has been having similar troubles.

The trouble shows up on any number of scripts, but is most likely to appear with scripts that are called frequently. The screenshot I&apos;ve included shows a Slow Request report from the ColdFusion Server Monitor. You can see that this request took &lt;b&gt;110 seconds&lt;/b&gt; to complete. The VERY strange part is that the runtime of the Application.cfc onRequest method (the outermost piece of code to run on any request) took only 468ms to complete. So what happened to the &lt;b&gt;109 seconds&lt;/b&gt; that were not spent executing my request? How can I prevent this from happening?

Also observe the Min/Max/Avg response times for the script. At the time of this screenshot, this script had been called 250 times. Multiplying the average response time (.505 seconds) by the request count (250) tells us that this script has occupied 126.25 seconds of server time. Removing this one long running request (250-1, 126.25-110.234) from the statistics, we find the script has an average running time of 0.064 seconds, which is a more reasonable run-time, considering the reported min response time of 0.015 seconds.

Eliminating these random long-running requests will do great things for the usability of the website, as well as free up server resources.

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

&lt;h3&gt;Misc Details&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ColdFusion Enterprise 8,0,1,195765&lt;/li&gt;
&lt;li&gt;Monitoring and Profiling Enabled&lt;/li&gt;
&lt;li&gt;Windows 2003&lt;/li&gt;
&lt;li&gt;Java 1.6.0_04&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Summary&lt;/h3&gt;
Scripts will randomly take MUCH longer then they usually do.

There seems to be a massive discrepancy between the Response Time and the Time Taken by the onRequest method.

Why is this happening, and what can be done about it? 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Development</category>				
				
				<category>ColdFusion</category>				
				
				<pubDate>Tue, 10 Feb 2009 08:01:00-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/2/10/Trouble-with-Random-LongRunning-request-in-ColdFusion-8</guid>
				
			</item>
			
			<item>
				<title>Sorting SimpleDB queries on Multiple Attributes</title>
				<link>http://sam.curren.ws/index.cfm/2009/1/12/Sorting-SimpleDB-queries-on-Multiple-Attributes</link>
				<description>
				
				&lt;div class=&quot;zemanta-img&quot; style=&quot;display: block; float: right; margin: 1em; width: 210px&quot;&gt;&lt;a href=&quot;http://www.crunchbase.com/company/amazon&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;89&quot; alt=&quot;Image representing Amazon as depicted in Crunc...&quot; src=&quot;http://www.crunchbase.com/assets/images/resized/0000/3898/3898v1-max-450x450.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;     &lt;p class=&quot;zemanta-img-attribution&quot; style=&quot;font-size: 0.8em&quot;&gt;Image via &lt;a href=&quot;http://www.crunchbase.com/&quot;&gt;CrunchBase&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;I was recently working with a dataset in Amazon&#xe2;¬"s &lt;a href=&quot;http://aws.amazon.com/simpledb/&quot;&gt;SimpleDB&lt;/a&gt;, and I needed to be able to sort query results on multiple attributes. SimpleDB currently only allows sorting by a single attribute, so I was stuck. The solution is rather simple: combine the columns that I need to sort on into a single new attribute, and use this new composite attribute to perform my sorting. I kept the existing attributes in their current form, but added a new attribute that is the concatenation of the two attributes I wished to sort.&lt;/p&gt;  &lt;p&gt;SimpleDB sorts lexicographically, so concatenating two fields produces exactly the expected results provided you handle a few situations properly. There are a few things to keep in mind as you produce the multi-sort attribute.&lt;/p&gt;  &lt;h3&gt;Properly pad your fields&lt;/h3&gt;  &lt;p&gt;Sorting numbers in SimpleDB requires some encoding to provide the expected results. The SimpleDB documentation provides &lt;a href=&quot;http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/index.html?NumericalData.html&quot;&gt;examples of this&lt;/a&gt;. If you have properly encoded your numeric fields, then the length of each attribute will be the same as all the rest. Each values of an attribute must be the same length to provide consistent results.&lt;/p&gt;  &lt;h3&gt;Align the sort order of each field&lt;/h3&gt;  &lt;p&gt;You can only sort your one field one direction; ascending or descending. If you wish to sort column 1 ascending and column 2 descending, then you must reverse the encoding of field 2 prior to &lt;a class=&quot;zem_slink&quot; title=&quot;Concatenation&quot; href=&quot;http://en.wikipedia.org/wiki/Concatenation&quot; rel=&quot;wikipedia&quot;&gt;concatenation&lt;/a&gt;, then sort the combined column ascending. You could also do the reverse: reverse the encoding of field 1, then sort the combined attribute descending.&lt;/p&gt;  &lt;p&gt;The SimpleDB documentation describes encoding numeric values, but this concept applies to both numeric an alphanumeric fields, as long as the length of the attribute value is either the same, or can be padded to be the same.&lt;/p&gt;  &lt;p&gt;Reversed encoding is nothing more then changing the data to be the reverse of what it really is. A single digit number attribute value could be subtracted from a base value, such that 0 becomes 9, 1 becomes 8, and so on. Characters can be reversed as well, turning a into z, b into y, etc. The exact encoding used will depend on the properties of the data being stored.&lt;/p&gt;  &lt;p&gt;Keep in mind that the value of the multi-sort attribute never needs to be parsed or read: it is only used for sorting results. Even if the translation is an ugly one, it only needs to be done on an update.&lt;/p&gt;  &lt;h3&gt;Concatenate attributes in order of sorting preference&lt;/h3&gt;  &lt;p&gt;If you wish to sort on attribute A, then attribute B, followed by C, your combined attribute must be combined in that order, left to right.&lt;/p&gt;  &lt;h3&gt;Flexibility&lt;/h3&gt;  &lt;p&gt;This approach is fairly flexible, including creating a sorting attribute from any number of attributes and creating multiple sorting attributes, as long as the attribute length and number of attributes fall within the &lt;a href=&quot;http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/SDBLimits.html&quot;&gt;restrictions of SimpleDB&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;While this technique is not new, I wanted to explain it here to provide hints to others with no idea how to solve the problem. Credit for revealing this concept to me go to &lt;a href=&quot;http://www.windley.com/&quot;&gt;Phil Windley&lt;/a&gt;, who told me that the only reason I don&#xe2;¬"t know it already is that I&#xe2;¬"m &#xe2;¬Stoo young&#xe2;¬? to remember a time when most database platforms carried the same restriction. I&#xe2;¬"m just glad to have experienced old guys to learn from. :)&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=ef456dc1-3028-4623-8c75-d6ad76f64a56&quot; /&gt;&lt;/div&gt; 
				</description>
				
				<category>Web-Applications</category>				
				
				<category>Amazon Web Services</category>				
				
				<category>Development</category>				
				
				<pubDate>Mon, 12 Jan 2009 16:20:10-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2009/1/12/Sorting-SimpleDB-queries-on-Multiple-Attributes</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>Comparing Grids and Clouds</title>
				<link>http://sam.curren.ws/index.cfm/2008/12/13/Comparing-Grids-and-Clouds</link>
				<description>
				
				&lt;div class=&quot;zemanta-img&quot; style=&quot;display: block; float: right; margin: 1em; width: 212px&quot;&gt;&lt;a href=&quot;http://commons.wikipedia.org/wiki/Image:LHC_quadrupole_magnets.jpg&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;152&quot; alt=&quot;Large Hadron Collider quadrupole magnets for d...&quot; src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/LHC_quadrupole_magnets.jpg/202px-LHC_quadrupole_magnets.jpg&quot; width=&quot;202&quot; /&gt;&lt;/a&gt;     &lt;p class=&quot;zemanta-img-attribution&quot; style=&quot;font-size: 0.8em&quot;&gt;Image via &lt;a href=&quot;http://commons.wikipedia.org/wiki/Image:LHC_quadrupole_magnets.jpg&quot;&gt;Wikipedia&lt;/a&gt;&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 next paper is an EGEE (&lt;a class=&quot;zem_slink&quot; title=&quot;Enabling Grids for E-sciencE&quot; href=&quot;http://en.wikipedia.org/wiki/Enabling_Grids_for_E-sciencE&quot; rel=&quot;wikipedia&quot;&gt;Enabling Grids for E-sciencE&lt;/a&gt;) &lt;a title=&quot;Computing&quot; href=&quot;http://www.sixsq.com/internal/white-papers/cloud/EGEE-Grid-Cloud.pdf/view&quot; rel=&quot;wikipedia&quot;&gt;comparison between cloud computing and grid architectures&lt;/a&gt;. They discuss mostly &lt;a class=&quot;zem_slink&quot; title=&quot;Amazon Web Services&quot; href=&quot;http://en.wikipedia.org/wiki/Amazon_Web_Services&quot; rel=&quot;wikipedia&quot;&gt;Amazon Web Services&lt;/a&gt;, in the forms of EC2 and S3. In the grid corner is the EGEE grids used for things like computing results for the Large Hadron Colider (&lt;a class=&quot;zem_slink&quot; title=&quot;Large Hadron Collider&quot; href=&quot;http://en.wikipedia.org/wiki/Large_Hadron_Collider&quot; rel=&quot;wikipedia&quot;&gt;LHC&lt;/a&gt;). The paper&apos;s abstract hinted that I would be receiving a direct comparison between these two architectures. Unfortunately, the author assumes a basic level of understanding about the EGEE grid system. As I am more of an AWSite (AWSonian?) and not an EGEEian who were the primary audiance of the paper, I can understand this focus.&lt;/p&gt;  &lt;p&gt;My observations in this paper boil down to one key difference: Grids runs Jobs, and EC2 runs servers. As such, I believe that you can build a grid inside EC2, or a grid that expands onto EC2 for excess capacity. Everything else in the paper comes down to how hard it would be to support the common requirements of a grid system on EC2, and the costs of running such a cloudy grid.&lt;/p&gt;  &lt;p&gt;The main revelation to me was that the virtualized systems of EC2 provide a nice barrier between the platform and the code. Most super-computing platforms allow a small set of languages to be run, and any job processing software must be written in, or within an environment contained within one of supported languages. EC2&apos;s linux (and now Windows) servers allow you to run nearly any language under the sun.&lt;/p&gt;  &lt;p&gt;In addition to providing an abstraction from the hardware, virtualization also provides some security for both the code running in the VM and the host system. This provides the opportunity for secure computing environments along the lines of &lt;a class=&quot;zem_slink&quot; title=&quot;Folding@home&quot; href=&quot;http://folding.stanford.edu/&quot; rel=&quot;homepage&quot;&gt;Folding@Home&lt;/a&gt;, but with additional protection for the host machine.&amp;#160; A stable system built this way would allow computers and servers to securely participate in global grids, donating (or selling, or trading) excess compute capacity to users with extensive computation requirements.&lt;/p&gt;  &lt;p&gt;An example application of this concept is a local grid of the computers within my home. When a single user (my wife, for example) is running a compute intensive job, the other computers in my home (each running on top of a hypervisor, of course) each start a VM that can participate in the computation. If we want the job to complete faster then possible with the resources we have, we can order up and pay for additional compute capacity on available clouds.&lt;/p&gt;  &lt;p&gt;Cool Stuff.&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=2fadf974-dbc1-48da-a570-e01e455a5fc5&quot; /&gt;&lt;/div&gt; 
				</description>
				
				<pubDate>Sat, 13 Dec 2008 14:21:59-0700</pubDate>
				<guid>http://sam.curren.ws/index.cfm/2008/12/13/Comparing-Grids-and-Clouds</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>
			</channel></rss>