<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Kevin Rohling&#039;s Blog</title>
	<atom:link href="http://kevinrohling.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://kevinrohling.wordpress.com</link>
	<description>Software, Startups and Good Living in the Bay Area</description>
	<lastBuildDate>Fri, 27 Jan 2012 22:06:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='kevinrohling.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/fc65e90dcaf7ca73cf4b51ab3d850554?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Kevin Rohling&#039;s Blog</title>
		<link>http://kevinrohling.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://kevinrohling.wordpress.com/osd.xml" title="Kevin Rohling&#039;s Blog" />
	<atom:link rel='hub' href='http://kevinrohling.wordpress.com/?pushpress=hub'/>
		<item>
		<title>How Startups Are Like Surfing And Why They&#8217;re Both Awesome</title>
		<link>http://kevinrohling.wordpress.com/2011/09/17/how-startups-are-like-surfing-and-why-theyre-both-awesome/</link>
		<comments>http://kevinrohling.wordpress.com/2011/09/17/how-startups-are-like-surfing-and-why-theyre-both-awesome/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 01:32:15 +0000</pubDate>
		<dc:creator>kevinrohling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[surfing]]></category>

		<guid isPermaLink="false">https://kevinrohling.wordpress.com/2011/09/17/how-startups-are-like-surfing-and-why-theyre-both-awesome/</guid>
		<description><![CDATA[Before I get into this post I&#8217;m fully aware that I&#8217;m treading into cliche territory. I&#8217;m certainly not the first person to write a blog post comparing startups and surfing and I concede my lack of originality here. That said, I&#8217;m going to do it anyway If you live in Northern California there&#8217;s a good &#8230;<p><a href="http://kevinrohling.wordpress.com/2011/09/17/how-startups-are-like-surfing-and-why-theyre-both-awesome/" class="more-link">Read More</a></p><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=161&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="clear:both;">Before I get into this post I&#8217;m fully aware that I&#8217;m treading into cliche territory. I&#8217;m certainly not the first person to write a blog post comparing startups and surfing and I concede my lack of originality here. That said, I&#8217;m going to do it anyway <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>If you live in Northern California there&#8217;s a good chance you work at a startup, at least the odds are probably higher than the national average. There&#8217;s also a good chance that you surf, that&#8217;s just what we do here. You may even be one of those fortunate people like myself that do both. If so, you&#8217;ve likely drawn your own comparisons between the two. Either way I&#8217;m pretty sure you&#8217;ll join me in stating that both are awesome. So here&#8217;s my attempt to articulate that awesomeness via a series of comparison.</p>
<p style="clear:both;"><a href="http://kevinrohling.files.wordpress.com/2011/09/600_54068442.jpg" class="image-link"><img class="linked-to-original" src="http://kevinrohling.files.wordpress.com/2011/09/600_54068442-thumb.jpg?w=380&#038;h=285" height="285" align="left" width="380" style="display:inline;float:left;margin:0 10px 10px 0;" /></a><br style="clear:both;" /><strong>Failing Fast</strong><br /> When you&#8217;re trying to stand up on a wave it doesn&#8217;t take you very long to find out if things are going to work out. Sometimes you don&#8217;t even catch the wave, other times you catch it, standup and end up going face first into ocean. Those waves suck and you find that out really quick. With startups failing fast is something you want to do. If your business isn&#8217;t going to work out you&#8217;d like your proverbial face to hit ocean before you&#8217;ve sunk tons of cash and time into it.</p>
<p style="clear:both;"><strong><br /></strong></p>
<p style="clear:both;"><strong>Competition</strong><br /> Competition for a wave can be brutal. A common misconception people have about surfers is that they&#8217;re mellow and laid back. Just not true. If you get in between a surfer and their wave you might just end up getting shanked in the parking lot. Ok, so shanking&#8217;s a bit extreme but they&#8217;ll probably throw a couple of f-bombs your way. Another excuse for a shanking? Try getting between a big company and their profits. Actually making money as an early stage startup is tough! You&#8217;ve just gotten into the game and the other guys are bigger and have more resources. In both cases though competition is an excuse to kick more ass and get better. Over time you will catch more waves and hopefully your startup will also make money.</p>
<p style="clear:both;"><a href="http://kevinrohling.files.wordpress.com/2011/09/dropin.jpg" class="image-link"><img class="linked-to-original" src="http://kevinrohling.files.wordpress.com/2011/09/dropin-thumb.jpg?w=380&#038;h=253" height="253" align="left" width="380" style="display:inline;float:left;margin:0 10px 10px 0;" /></a><br style="clear:both;" /><br style="clear:both;" /><strong>The Drop</strong><br /> The drop is awesome. It&#8217;s the moment a surfer hops up on their board, stares down the wave and drops over the edge. It&#8217;s exhilarating and addictive. It&#8217;s also the point of no return. Once you&#8217;re up on your board heading down a wave you can&#8217;t bail out without getting pummeled. When you join a startup there&#8217;s always a point of no return. For some, the drop might be the moment they decide to leave their stable, higher paying job to join a company that might not even be around in a year. Speaking strictly from my own experience this was one of the most exciting times of my life.</p>
<p style="clear:both;"><strong>Adrenaline</strong><br /> Working at a startup has been a ridiculous thrill. Every day there&#8217;s something new: a new feature pushed, app going live in the app store, a new website, a new employee. The list could literally go on and on. It&#8217;s like catching the drop off of a wave. You&#8217;re going so fast you think you might fall right off the board, and sometimes you do. But sometimes you don&#8217;t and it&#8217;s freakin&#8217; awesome!</p>
<p><br class="final-break" style="clear:both;" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinrohling.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinrohling.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinrohling.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinrohling.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinrohling.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinrohling.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinrohling.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinrohling.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinrohling.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinrohling.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinrohling.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinrohling.wordpress.com/161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinrohling.wordpress.com/161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinrohling.wordpress.com/161/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=161&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinrohling.wordpress.com/2011/09/17/how-startups-are-like-surfing-and-why-theyre-both-awesome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4baabf738e29514cdfb3c478960ab47c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinrohling</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/09/600_54068442-thumb.jpg" medium="image" />

		<media:content url="http://kevinrohling.files.wordpress.com/2011/09/dropin-thumb.jpg" medium="image" />
	</item>
		<item>
		<title>My Fight Against Homelessness &#8211; Apartment Hunting in San Francisco</title>
		<link>http://kevinrohling.wordpress.com/2011/09/14/my-fight-against-homelessness-apartment-hunting-in-san-francisco/</link>
		<comments>http://kevinrohling.wordpress.com/2011/09/14/my-fight-against-homelessness-apartment-hunting-in-san-francisco/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 03:30:34 +0000</pubDate>
		<dc:creator>kevinrohling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[apartment]]></category>
		<category><![CDATA[homeless]]></category>
		<category><![CDATA[hunting]]></category>
		<category><![CDATA[realtor]]></category>
		<category><![CDATA[realty]]></category>
		<category><![CDATA[san francisco]]></category>

		<guid isPermaLink="false">https://kevinrohling.wordpress.com/?p=143</guid>
		<description><![CDATA[Let&#8217;s face it, apartment hunting is one of those somewhat unpleasant things that perpetual renters have to do every once in a while, kind of like going to the dentist or spending the weekend with your parents (love you mom!). There&#8217;s the paperwork, the phone calls, open houses&#8230; If you&#8217;re shopping in San Francisco you&#8217;re &#8230;<p><a href="http://kevinrohling.wordpress.com/2011/09/14/my-fight-against-homelessness-apartment-hunting-in-san-francisco/" class="more-link">Read More</a></p><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=143&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="clear:both;">Let&#8217;s face it, apartment hunting is one of those somewhat unpleasant things that perpetual renters have to do every once in a while, kind of like going to the dentist or spending the weekend with your parents (love you mom!). There&#8217;s the paperwork, the phone calls, open houses&#8230; If you&#8217;re shopping in San Francisco you&#8217;re probably putting more hours into your search than the realtors that are trying to sell the place to you! Admittedly it&#8217;s not all bad, the prospect of moving into a new place can be quite exciting. A new neighborhood means new restaurants and shops nearby, especially in SF, and your apartment is never as clean as when you first move in. Nevertheless, apartment shopping in SF right now is brutal!</p>
<p style="clear:both;">The problem is there are way more people looking for apartments in SF than there are apartments, or bed rooms, or closets even. I have no idea how long this has persisted, as far as I know this may or may not, just be how it goes. Nevertheless, it&#8217;s not unusual to show up to an open house and find 30 other people there, luggage in tow, ready to stab anyone who gets in between them and their precious 1 bedroom with walk-in closet and brightly lit kitchen area. Like I said, brutal, it&#8217;s less apartment shopping and more like tenant shopping. The property owners get more applications than they need to fill the apartment so they&#8217;re at the advantage of picking and choosing the lucky winner of an exorbitant rent payment, 300 square feet and a parking space that only exists every other Tuesday at 1:00pm.</p>
<p style="clear:both;">So maybe you&#8217;ve decided you&#8217;re ready to suck it up and damn it&#8230; you&#8217;re going to live in San Francisco. Well, I hear you, obviously that&#8217;s what I&#8217;ve done so I understand all the reasoning behind it. If that&#8217;s the case I have a few tips that just might make your search a bit less painful, provided you avoid getting stabbed by fellow applicants:</p>
<p style="clear:both;"><strong>Tip #1: Credit Report With Credit Score.</strong> This is the best move I made. Get yourself over to <a href="http://annualcreditreport.com">annualcreditreport.com</a> and get your free credit report. Then pay the extra $8 or so to get your FICA score. Why? For starters every place you visit will ask for it. It will save you money because you don&#8217;t have to pay a fee for each place to run your credit. This also means your credit doesn&#8217;t get dinged 50 times after you&#8217;ve submitted applications all over the city. Finally, it makes the process smoother for the property owner and anything you can do to make things easier for them is a gold star in your favor.</p>
<p><strong>Tip #2: Be There First.</strong> With all the competition you&#8217;ve gotta set yourself apart from the masses and also beat them to the punch. One really good way to do this, and also say &#8220;Hi, I&#8217;m genuinely interested and responsible&#8221; is to show up first. At open houses get there early so you can be at the front of the line (cuz you know there&#8217;s a line). Also, check CraigsList multiple times a day. Posts are added throughout the day and if something&#8217;s more than 24 hours old, the masses are all over it by then.</p>
<p><strong>Tip #3: Your Rental Resume.</strong> I already mentioned the credit report but there&#8217;s a few other things you should bring with you. The items that should make up your rental resume are as follows:</p>
<ul style="clear:both;">
<li>Credit Report with Score (already mentioned this one)</li>
<li>Pre-Filled <a href="http://www.rentalguide.com/pdf/rental_application.pdf">San Francisco Rental Application</a></li>
<li>Copy of Last Paystub</li>
<li>Copy of Drivers License</li>
</ul>
<p style="clear:both;">I&#8217;ve found that the SF Rental Application suffices for nearly everybody, even those companies that have their own application form. Having all of this on hand will make the application process smooth, and saves you and the property owner lots of time (especially you!). I printed out copies of each of these along with a coversheet that included my contact information and put it all in individual plastic folders. Now when I want to apply I just give them one of the folders with everything they need. I&#8217;m overly process oriented at times and I haven&#8217;t seen anyone else do this but it definitely shows you&#8217;ve got your shit together and has saved me enough time to write a blog post about it.</p>
<p><strong>Tip #4: Dress It Up.</strong> When you go to an open house or a walk through dress it up a bit. You don&#8217;t want to look like you&#8217;re already homeless (even if you are), that only raises the question in their mind as to why you&#8217;re homeless. Maybe cuz this guy doesn&#8217;t pay his rent? Instead your clothes should say &#8220;Hi, I&#8217;m super responsible and always pay bills on time. I just came from a really responsible meeting where I was doing extremely responsible things. You know, like paying bills and getting paid lots of money.&#8221; Yeah, dress like that.</p>
<p style="clear:both;"><strong>Tip #5: Follow Up.</strong> You don&#8217;t want to get lost in the shuffle. After the meeting follow up with an email or phone call and just ask if there&#8217;s anything else you can provide and make sure they know who you are. If it was an open house, tie it back to the meeting and refer to something recognizable. Part of this process is likability, you&#8217;re not very likable if they don&#8217;t know who you are.</p>
<p>Good luck with your search. If you&#8217;ll join me in following these few simple tips, together we can end homelessness. Probably not for the guy talking to the bushes and camping in Golden Gate Park but at least for ourselves.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinrohling.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinrohling.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinrohling.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinrohling.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinrohling.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinrohling.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinrohling.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinrohling.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinrohling.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinrohling.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinrohling.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinrohling.wordpress.com/143/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinrohling.wordpress.com/143/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinrohling.wordpress.com/143/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=143&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinrohling.wordpress.com/2011/09/14/my-fight-against-homelessness-apartment-hunting-in-san-francisco/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4baabf738e29514cdfb3c478960ab47c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinrohling</media:title>
		</media:content>
	</item>
		<item>
		<title>World Domination Using Arduinos and Websockets</title>
		<link>http://kevinrohling.wordpress.com/2011/09/14/world-domination-using-arduinos-and-websockets/</link>
		<comments>http://kevinrohling.wordpress.com/2011/09/14/world-domination-using-arduinos-and-websockets/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 12:09:50 +0000</pubDate>
		<dc:creator>kevinrohling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[push notification]]></category>
		<category><![CDATA[pusher]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[robotics]]></category>
		<category><![CDATA[servo]]></category>
		<category><![CDATA[websocket]]></category>

		<guid isPermaLink="false">https://kevinrohling.wordpress.com/2011/09/14/world-domination-using-arduinos-and-websockets/</guid>
		<description><![CDATA[Arduino Websocket Client Arduino Pusher Client Pusher &#8211; Real Time Push Notifications Follow Me On Twitter: @kevinrohling If you don&#8217;t have your very own Arduino yet you should get one. What exactly are you waiting for? Arduinos are tons of fun, especially once you hook up some servos and start driving them around. Add a &#8230;<p><a href="http://kevinrohling.wordpress.com/2011/09/14/world-domination-using-arduinos-and-websockets/" class="more-link">Read More</a></p><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=148&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="clear:both;"><a href="https://github.com/krohling/ArduinoWebsocketClient">Arduino Websocket Client</a> <a href="https://github.com/krohling/ArduinoPusherClient">Arduino Pusher Client</a> <a href="http://pusher.com/">Pusher &#8211; Real Time Push Notifications</a> <a href="http://twitter.com/kevinrohling">Follow Me On Twitter: @kevinrohling</a></p>
<p style="clear:both;">If you don&#8217;t have your very own <a href="http://arduino.cc/">Arduino</a> yet you should get one. What exactly are you waiting for? Arduinos are tons of fun, especially once you hook up some servos and start driving them around. Add a few pieces of military grade weaponry and you have your very own deathbot!</p>
<p style="clear:both;">One of the first things you have to figure out once you&#8217;ve decided to personally catalyze the robot apocalypse is how to remotely control your robots, i.e. tell them when to turn left, turn right, stop, and of course&#8230; fire rocket launchers. There&#8217;s a number of ways you could do this. One of the more common I&#8217;ve seen is to open up a server port on your Arduino, connect to it and send it messages directly. The problem I ran into doing this was two fold: 1) I have to know the IP address of the Arduino on my network to make the connection and 2) I have to be on the same network as the Arduino. None of these things are very convenient and IP addresses and networks can change.</p>
<p style="clear:both;">The solution I came up with was to use <a href="http://pusher.com/">Pusher</a>, a real-time push notification service that runs over <a href="http://en.wikipedia.org/wiki/WebSocket">WebSockets</a>. Since the native Arduino libraries come with support for TCP connections, making this work involved writing a WebSocket Client library, as one does not appear to have previously existed, and building a Pusher client on top of that. Because the Arduino is connected to a Pusher <a href="http://pusher.com/docs/client_api_guide/client_channels">Channel</a> I don&#8217;t have to know anything about the actual device to control it, I just send messages to the Channel. My mechanized Arduinos of destruction are free to roam around, switching networks and destroying civilization, meanwhile I can still control them with my iPad from a hammock in the Bahamas.</p>
<p style="clear:both;"><strong>Building the WebSocket Client</strong></p>
<p style="clear:both;">WebSockets are an interesting hybrid between HTTP and raw TCP connections. They start life very much like a normal HTTP GET request. In the request the client sends a bit information asking for an &#8220;upgraded&#8221; connection. Once the server sees this, if WebSockets are supported it sends a response back with a status code of 101 indicating that the connection was successfully upgraded. Then, and here&#8217;s where things diverge from HTTP, nobody closes the connection. Both the client and the server remain connected to each other. Here&#8217;s what this looks like at the socket level:</p>
<p style="clear:both;"><em>Client Requests a WebSocket Connection</em> <code></code></p>
<p style="clear:both;"><code> </code></p>
<pre style="clear:both;">GET /app/yourpusherapikey?client=js&amp;version=1.9.0 HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: ws.pusherapp.com:80
Origin: ArduinoWebSocketClient</pre>
<p style="clear:both;"><em>Server responds indicating that the upgrade was successful </em> <code></code></p>
<p style="clear:both;"><code> </code></p>
<pre style="clear:both;">HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: ArduinoWebSocketClient
WebSocket-Location: ws://ws.pusherapp.com:80/app/yourpusherapikey?client=js&amp;version=1.9.0
Connected</pre>
<p style="clear:both;">Now that they&#8217;re connected both the client and the server can send each other messages any time they want using a process called Data Framing. Data Framing is a protocol for indicating the start and end of discrete messages on the socket. The <a href="https://github.com/krohling/ArduinoWebsocketClient">Arduino Websocket Client Library</a> currently only supports Text Frames, which use a 0&#215;00 byte to indicate the start of a message, a 0xFF byte to indicate the end, and UTF-8 data in between. The <a href="http://www.whatwg.org/specs/web-socket-protocol/">WebSocket Specification</a> also allows for Binary Frames, which use a length prefix followed by binary data. Here&#8217;s what the Arduino code looks like for sending a WebSocket message:</p>
<p style="clear:both;"><code> </code></p>
<pre style="clear:both;">void  WebSocketClient::send (String data) {
     _client.print((char )0 );
     _client.print(data);
     _client.print((char )255 );
}</pre>
<p style="clear:both;"><strong>Building the Pusher Client</strong> As I mentioned before <a href="http://pusher.com/">Pusher</a> is a real-time push notification service that operates over WebSockets. Like any WebSocket implementation they use Data Framing for passing messages back and forth but they&#8217;ve built their own messaging protocol on top of Data Framing. Each message sent to or received from Pusher is formatted as JSON. This is good for the Arduino because JSON is light weight and also easy to parse. Once the <a href="https://github.com/krohling/ArduinoWebsocketClient">Arduino WebSocket Client</a> was built developing the <a href="https://github.com/krohling/ArduinoPusherClient">Arduino Pusher Client</a> was a matter of implementing support for sending/receiving the right messages.</p>
<p style="clear:both;"><em>Sending a message is called &#8220;Triggering An Event&#8221;:</em></p>
<p style="clear:both;"><code> </code></p>
<pre style="clear:both;">void PusherClient::triggerEvent(String eventName, String eventData) {
    _client.send("{\"event\": \"" + eventName + "\", \"data\": " + eventData + " }");
}</pre>
<p style="clear:both;"><em>Receiving a message from Pusher:</em></p>
<p style="clear:both;"><code> </code></p>
<pre style="clear:both;">
void  PusherClient::dataArrived(WebSocketClient client, String data) {
     String eventNameStart = "event" ;
     String eventName = parseMessageMember("event" , data); 

     if  (_bindAllDelegate != NULL ) {
         _bindAllDelegate(data);
     } 

     EventDelegate delegate = _bindMap.getValueOf(eventName);
     if  (delegate != NULL ) {
         delegate(data);
     }
}</pre>
<p style="clear:both;"><em>Controlling our servos of destruction in response to events received from Pusher:</em></p>
<p style="clear:both;"><code> </code></p>
<pre style="clear:both;">PusherClient client("your-api-key-here");

//Setup delegates for the Pusher Events
client.bind("forward", moveForward);
client.bind("backward", moveBackward);
client.bind("turn_left", turnLeft);
client.bind("turn_right", turnRight);
client.bind("stop", stopMoving);

//Subsribe to our Pusher Channel
client.subscribe("robot_channel");

void moveForward(String data) {
  leftServo.write(0);
  rightServo.write(180);
}

void moveBackward(String data) {
  leftServo.write(180);
  rightServo.write(0);
}

void turnLeft(String data) {
  leftServo.write(0);
  rightServo.write(0);
}

void turnRight(String data) {
  leftServo.write(180);
  rightServo.write(180);
}

void stopMoving(String data) {
  leftServo.write(95);
  rightServo.write(95);
}</pre>
<p style="clear:both;"><strong>All Wired Up</strong></p>
<p style="clear:both;">We&#8217;ve now solved what is likely the most challenging part of developing your Arduino army.</p>
<p style="clear:both;">Pusher messages being received:</p>
<p style="clear:both;"><a href="http://kevinrohling.files.wordpress.com/2011/09/screen_shot_2011-09-11_at_4-44-05_pm.png" class="image-link"><img class="linked-to-original" src="http://kevinrohling.files.wordpress.com/2011/09/screen_shot_2011-09-11_at_4-thumb-44-05_pm.png?w=380&#038;h=264" height="264" align="left" width="380" style="display:inline;float:left;margin:0 10px 10px 0;" /></a><br style="clear:both;" /><br style="clear:both;" />Tremble in fear of the Pusher Powered Arduino-Bot:</p>
<p style="clear:both;"><a href="http://kevinrohling.files.wordpress.com/2011/09/photo_sep_13__9_33_10_pm.jpg" class="image-link"><img class="linked-to-original" src="http://kevinrohling.files.wordpress.com/2011/09/photo_sep_13__9_33_10_pm-thumb.jpg?w=380&#038;h=284" height="284" align="left" alt="" width="380" style="display:inline;float:left;margin:0 10px 10px 0;" /></a></p>
<p><span style="text-align:center; display: block;"><a href="http://kevinrohling.wordpress.com/2011/09/14/world-domination-using-arduinos-and-websockets/"><img src="http://img.youtube.com/vi/XiWA3p3K-ps/2.jpg" alt="" /></a></span><br />
<br class="final-break" style="clear:both;" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinrohling.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinrohling.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinrohling.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinrohling.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinrohling.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinrohling.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinrohling.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinrohling.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinrohling.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinrohling.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinrohling.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinrohling.wordpress.com/148/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinrohling.wordpress.com/148/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinrohling.wordpress.com/148/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=148&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinrohling.wordpress.com/2011/09/14/world-domination-using-arduinos-and-websockets/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4baabf738e29514cdfb3c478960ab47c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinrohling</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/09/screen_shot_2011-09-11_at_4-thumb-44-05_pm.png" medium="image" />

		<media:content url="http://kevinrohling.files.wordpress.com/2011/09/photo_sep_13__9_33_10_pm-thumb.jpg" medium="image" />
	</item>
		<item>
		<title>Polling is Evil, Start Pushing</title>
		<link>http://kevinrohling.wordpress.com/2011/08/22/polling-is-evil-start-pushing/</link>
		<comments>http://kevinrohling.wordpress.com/2011/08/22/polling-is-evil-start-pushing/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 22:11:02 +0000</pubDate>
		<dc:creator>kevinrohling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[breezy]]></category>
		<category><![CDATA[pusher]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">https://kevinrohling.wordpress.com/2011/08/22/polling-is-evil-start-pushing/</guid>
		<description><![CDATA[It&#8217;s an exciting time to be working at Breezy right now. We&#8217;re past the initial rush to build our MVP and can finally loop back around and focus on making things more awesome. One of the biggest challenges we&#8217;ve had to solve is how we notify our Connector applications that documents are ready to print. &#8230;<p><a href="http://kevinrohling.wordpress.com/2011/08/22/polling-is-evil-start-pushing/" class="more-link">Read More</a></p><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=121&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="clear:both;"><a href="http://kevinrohling.files.wordpress.com/2011/08/connector-screenshot-home.png" class="image-link"><img class="linked-to-original" src="http://kevinrohling.files.wordpress.com/2011/08/connector-screenshot-home-thumb1.png?w=150&#038;h=124" height="124" align="left" width="150" style="display:inline;float:left;margin:0 10px 10px 0;" /></a><br style="clear:both;" /><br style="clear:both;" /><br /><br style="clear:both;" />It&#8217;s an exciting time to be working at Breezy right now. We&#8217;re past the initial rush to build our MVP and can finally loop back around and focus on making things more awesome. One of the biggest challenges we&#8217;ve had to solve is how we notify our Connector applications that documents are ready to print. A bit of context, the Connector is a piece of software that sits on desktop PC&#8217;s that have printers. When a user chooses to print to a printer that&#8217;s &#8220;connected&#8221; to this PC we notify the Connector and it does the work of actually sending the document to the printer.</p>
<p style="clear:both;">It&#8217;s magic and it works. So what&#8217;s the problem? The problem is we currently solve this notification challenge by having the Connector poll our web service. This is less than optimal for a number of reasons: 1) This places a significant (seriously&#8230;) load on our backend infrastructure 2) This introduces latency because the Connector is polling on an interval. Finding a better solution is difficult because most of these Connector installations are sitting behind firewalls and are on a consumer&#8217;s home network. This means you can&#8217;t expect any additional setup other than installation of the software so any sort of direct connection initiating from the server is out of the question.</p>
<p style="clear:both;">So what&#8217;s option 3? In a word <a href="http://en.wikipedia.org/wiki/WebSocket" title="Wikipedia - Websockets">Websockets</a>. This nifty little protocol has silently made its way into web browsers and web servers over the last few years. It&#8217;s most common use case is allowing servers to send messages to web browsers, allowing the display of real time data and notifications. Web Sockets are similar to long lived HTTP connections except that they allow bi-directional messaging between both the client and the server. After the initial handshake the connection is &#8220;upgraded&#8221; after which time data is exchanged using a process known as Data Framing. Websockets also run over HTTP/S ports 80 and 443 so there&#8217;s no worry that they&#8217;ll be blocked by firewalls. For these reasons Websockets are also a great solution to our Connector&#8217;s polling problem.</p>
<p style="clear:both;">Cool, so Websockets, now what? We could have built a Websocket server that&#8217;s capable of handling thousands of live connections at a time, implemented a nice security layer and defined our own messaging protocol but&#8230; that&#8217;s a lot of work. It&#8217;s a beautiful world we live in where people build these sorts of things for us and let us use them. That&#8217;s where <a href="http://pusherapp.com" title="Pusher">Pusher</a> came in.</p>
<p style="clear:both;"><a href="http://pusherapp.com" class="image-link"><img src="http://kevinrohling.files.wordpress.com/2011/08/pusher_wo_shadows-thumb12.png?w=100&#038;h=100" height="100" align="left" width="100" style="display:inline;float:left;margin:0 10px 10px 0;" /></a><br style="clear:both;" /><br style="clear:both;" /><br style="clear:both;" /><strong>Why did we choose Pusher?</strong><br />Pusher didn&#8217;t just save us time it made refactoring our architecture possible. The work required to implement a notifications infrastructure that would handle our traffic requirements is simply intractable for us. Furthermore, out of the box it has many of the less obvious features we needed like security, presence information and a well documented messaging protocol.</p>
<p style="clear:both;"><strong>What problems did Pusher solve?</strong><br />Pusher allowed us to offload the vast majority of our backend traffic to their notifications infrastructure. This will result in significantly improved performance and dramatically lower costs as we scale. Furthermore, this adds value to our customers because we can print a document in &#8220;real-time&#8221; rather than forcing them to wait several seconds for the next poll.</p>
<p style="clear:both;"><strong>What was missing from Pusher?</strong><br />One feature I&#8217;d like to see added is the ability to receive callbacks when clients connect to a Channel. This would help us keep track of what Connectors are actively connected and ready to receive notifications. Currently our workaround is a process that is constantly checking with the Pusher API to see who&#8217;s active. This has been somewhat time consuming and challenging to develop, it&#8217;d be nice if we could remove this &#8220;moving part&#8221; in the future. I&#8217;ve talked to some of the Pusher guys and it sounds like this is on their near-term roadmap, definitely looking forward to seeing it.</p>
<p style="clear:both;">Also, they seem to have their client libraries separated into Client and Server functionality. This provided a bit of a challenge for us because we needed some of the &#8220;client&#8221; functionality available from our backend which is written in Rails. This meant that we had to add this functionality to the Pusher gem, also a bit time consuming. For our scenario it would have been nice to see a single gem that encompassed both client and server functionality but frankly I&#8217;m not sure how common that is.</p>
<p><br class="final-break" style="clear:both;" /></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinrohling.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinrohling.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinrohling.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinrohling.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinrohling.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinrohling.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinrohling.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinrohling.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinrohling.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinrohling.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinrohling.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinrohling.wordpress.com/121/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinrohling.wordpress.com/121/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinrohling.wordpress.com/121/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=121&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinrohling.wordpress.com/2011/08/22/polling-is-evil-start-pushing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4baabf738e29514cdfb3c478960ab47c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinrohling</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/08/connector-screenshot-home-thumb1.png" medium="image" />

		<media:content url="http://kevinrohling.files.wordpress.com/2011/08/pusher_wo_shadows-thumb12.png" medium="image" />
	</item>
		<item>
		<title>Using a Slide Transition with the Android ViewFlipper</title>
		<link>http://kevinrohling.wordpress.com/2011/01/25/using-a-slide-transition-with-viewflipper/</link>
		<comments>http://kevinrohling.wordpress.com/2011/01/25/using-a-slide-transition-with-viewflipper/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 07:02:34 +0000</pubDate>
		<dc:creator>kevinrohling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">https://kevinrohling.wordpress.com/2011/01/25/using-a-slide-transition-with-viewflipper/</guid>
		<description><![CDATA[Github Repo If your app only has one View, your app is probably pretty boring. However, if you’re building an interesting app you’ll probably have to switch between multiple Views, maybe go back and forth and have some nice animations. You could write your animations and manually do the transitioning yourself but once you get &#8230;<p><a href="http://kevinrohling.wordpress.com/2011/01/25/using-a-slide-transition-with-viewflipper/" class="more-link">Read More</a></p><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=80&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/krohling/AndroidViewFlipperTransitionExample">Github Repo</a></p>
<p>If your app only has one View, your app is probably pretty boring. However, if you’re building an interesting app you’ll probably have to switch between multiple Views, maybe go back and forth and have some nice animations. You could write your animations and manually do the transitioning yourself but once you get more than 2 or so Views that’s gonna get tough to keep up with (and messy!). Fortunately the ViewFlipper solves this problem quite nicely.</p>
<p><strong>Step 1.</strong></p>
<p>Let’s start all the way at the beginning, <em>File -&gt; New Android Project</em>. Feel free to use your own Application and Package Names but make sure you tell it to create a <strong>MainActivity</strong>. This will be the Activity that controls the transition between Views.</p>
<p><a href="http://kevinrohling.files.wordpress.com/2011/01/clip_image0021.jpg"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="clip_image002" src="http://kevinrohling.files.wordpress.com/2011/01/clip_image002_thumb1.jpg?w=318&#038;h=359" alt="clip_image002" width="318" height="359" border="0" /></a></p>
<p><strong>Step 2.</strong></p>
<p>Once you get your project set up you’ll need to add a <em>ViewFlipper </em>to <em>main.xml</em>. In this example we’ll also add a couple of buttons that let us go back and forth between our Views.</p>
<p><strong>main.xml</strong></p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:64d4eaa5-7475-460b-ace1-f0c0563b4491" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<div><span style="color:#008080;"> 1</span> <span style="color:#0000ff;">&lt;?</span><span style="color:#ff00ff;">xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;</span><span style="color:#0000ff;">?&gt;</span><span style="color:#008080;"> 2</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">LinearLayout </span><span style="color:#ff0000;">xmlns:android</span><span style="color:#0000ff;">=&#8221;http://schemas.android.com/apk/res/android&#8221;</span><span style="color:#008080;"> 3</span> <span style="color:#ff0000;"> android:orientation</span><span style="color:#0000ff;">=&#8221;vertical&#8221;</span><span style="color:#008080;"> 4</span> <span style="color:#ff0000;"> android:layout_width</span><span style="color:#0000ff;">=&#8221;fill_parent&#8221;</span><span style="color:#008080;"> 5</span> <span style="color:#ff0000;"> android:layout_height</span><span style="color:#0000ff;">=&#8221;fill_parent&#8221;</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;"> 6</span> <span style="color:#008080;"> 7</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">LinearLayout </span><span style="color:#ff0000;">android:orientation</span><span style="color:#0000ff;">=&#8221;horizontal&#8221;</span><span style="color:#008080;"> 8</span> <span style="color:#ff0000;"> android:layout_width</span><span style="color:#0000ff;">=&#8221;fill_parent&#8221;</span><span style="color:#008080;"> 9</span> <span style="color:#ff0000;"> android:layout_height</span><span style="color:#0000ff;">=&#8221;wrap_content&#8221;</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">10</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">Button </span><span style="color:#ff0000;">android:id</span><span style="color:#0000ff;">=&#8221;@+id/previousButton&#8221;</span><span style="color:#008080;">11</span> <span style="color:#ff0000;"> android:text</span><span style="color:#0000ff;">=&#8221;Previous&#8221;</span><span style="color:#008080;">12</span> <span style="color:#ff0000;"> android:layout_width</span><span style="color:#0000ff;">=&#8221;wrap_content&#8221;</span><span style="color:#008080;">13</span> <span style="color:#ff0000;"> android:layout_height</span><span style="color:#0000ff;">=&#8221;wrap_content&#8221;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">14</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">Button </span><span style="color:#ff0000;">android:id</span><span style="color:#0000ff;">=&#8221;@+id/nextButton&#8221;</span><span style="color:#008080;">15</span> <span style="color:#ff0000;"> android:text</span><span style="color:#0000ff;">=&#8221;Next&#8221;</span><span style="color:#008080;">16</span> <span style="color:#ff0000;"> android:layout_width</span><span style="color:#0000ff;">=&#8221;wrap_content&#8221;</span><span style="color:#008080;">17</span> <span style="color:#ff0000;"> android:layout_height</span><span style="color:#0000ff;">=&#8221;wrap_content&#8221;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">18</span> <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">LinearLayout</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">19</span> <span style="color:#008080;">20</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">ViewFlipper </span><span style="color:#ff0000;">android:id</span><span style="color:#0000ff;">=&#8221;@+id/viewFlipper&#8221;</span><span style="color:#008080;">21</span> <span style="color:#ff0000;"> android:layout_width</span><span style="color:#0000ff;">=&#8221;fill_parent&#8221;</span><span style="color:#008080;">22</span> <span style="color:#ff0000;"> android:layout_height</span><span style="color:#0000ff;">=&#8221;fill_parent&#8221;</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">23</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">TextView </span><span style="color:#ff0000;">android:layout_width</span><span style="color:#0000ff;">=&#8221;fill_parent&#8221;</span><span style="color:#008080;">24</span> <span style="color:#ff0000;"> android:layout_height</span><span style="color:#0000ff;">=&#8221;wrap_content&#8221;</span><span style="color:#008080;">25</span> <span style="color:#ff0000;"> android:text</span><span style="color:#0000ff;">=&#8221;View 1&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">26</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">TextView </span><span style="color:#ff0000;">android:layout_width</span><span style="color:#0000ff;">=&#8221;fill_parent&#8221;</span><span style="color:#008080;">27</span> <span style="color:#ff0000;"> android:layout_height</span><span style="color:#0000ff;">=&#8221;wrap_content&#8221;</span><span style="color:#008080;">28</span> <span style="color:#ff0000;"> android:text</span><span style="color:#0000ff;">=&#8221;View 2&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">29</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">TextView </span><span style="color:#ff0000;">android:layout_width</span><span style="color:#0000ff;">=&#8221;fill_parent&#8221;</span><span style="color:#008080;">30</span> <span style="color:#ff0000;"> android:layout_height</span><span style="color:#0000ff;">=&#8221;wrap_content&#8221;</span><span style="color:#008080;">31</span> <span style="color:#ff0000;"> android:text</span><span style="color:#0000ff;">=&#8221;View 3&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">32</span> <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">ViewFlipper</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">33</span> <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">LinearLayout</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">34</span></div>
</div>
<p><strong>Step 3.</strong></p>
<p>Next in <em>MainActivity</em> ‘s <em>onCreate</em> method, wire up ClickHandlers to the Buttons and use the ViewFlipper’s <em>showNext()</em> and <em>showPrevious()</em> methods to move between Views.</p>
<p><strong>MainActivity</strong></p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:681a8533-3c7e-4ef3-9aee-4d36e02ab57c" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<div><span style="color:#008080;"> 1</span> <span style="color:#0000ff;">public</span><span style="color:#0000ff;">void</span><span style="color:#000000;"> onCreate(Bundle savedInstanceState) { </span><span style="color:#008080;"> 2</span> <span style="color:#0000ff;">super</span><span style="color:#000000;">.onCreate(savedInstanceState); </span><span style="color:#008080;"> 3</span> <span style="color:#000000;"> setContentView(R.layout.main); </span><span style="color:#008080;"> 4</span> <span style="color:#008080;"> 5</span> <span style="color:#0000ff;">final</span><span style="color:#000000;"> ViewFlipper viewFlipper </span><span style="color:#000000;">=</span><span style="color:#000000;"> (ViewFlipper)findViewById(R.id.viewFlipper); </span><span style="color:#008080;"> 6</span> <span style="color:#008080;"> 7</span> <span style="color:#000000;"> Button nextButton </span><span style="color:#000000;">=</span><span style="color:#000000;"> (Button) </span><span style="color:#0000ff;">this</span><span style="color:#000000;">.findViewById(R.id.nextButton); </span><span style="color:#008080;"> 8</span> <span style="color:#000000;"> nextButton.setOnClickListener(</span><span style="color:#0000ff;">new</span><span style="color:#000000;"> OnClickListener() </span><span style="color:#008080;"> 9</span> <span style="color:#000000;"> { </span><span style="color:#008080;">10</span> <span style="color:#008080;">11</span> <span style="color:#000000;"> @Override </span><span style="color:#008080;">12</span> <span style="color:#0000ff;">public</span><span style="color:#0000ff;">void</span><span style="color:#000000;"> onClick(View v) { </span><span style="color:#008080;">13</span> <span style="color:#000000;"> viewFlipper.showNext(); </span><span style="color:#008080;">14</span> <span style="color:#000000;"> } </span><span style="color:#008080;">15</span> <span style="color:#008080;">16</span> <span style="color:#000000;"> }); </span><span style="color:#008080;">17</span> <span style="color:#008080;">18</span> <span style="color:#000000;"> Button previousButton </span><span style="color:#000000;">=</span><span style="color:#000000;"> (Button) </span><span style="color:#0000ff;">this</span><span style="color:#000000;">.findViewById(R.id.previousButton); </span><span style="color:#008080;">19</span> <span style="color:#000000;"> previousButton.setOnClickListener(</span><span style="color:#0000ff;">new</span><span style="color:#000000;"> OnClickListener() </span><span style="color:#008080;">20</span> <span style="color:#000000;"> { </span><span style="color:#008080;">21</span> <span style="color:#008080;">22</span> <span style="color:#000000;"> @Override </span><span style="color:#008080;">23</span> <span style="color:#0000ff;">public</span><span style="color:#0000ff;">void</span><span style="color:#000000;"> onClick(View v) { </span><span style="color:#008080;">24</span> <span style="color:#000000;"> viewFlipper.showPrevious(); </span><span style="color:#008080;">25</span> <span style="color:#000000;"> } </span><span style="color:#008080;">26</span> <span style="color:#008080;">27</span> <span style="color:#000000;"> }); </span><span style="color:#008080;">28</span> <span style="color:#008080;">29</span> <span style="color:#000000;"> }</span></div>
</div>
<p><strong>Step 4.</strong></p>
<p>Now, if all you wanted was a simple transition between Views you could stop now. However, that would be… boring and we can do a heck of a lot better by adding a nice slide transition. To make this work we’ll use the 4 animations below. These allow us to slide in and out from either direction depending on whether we’re going forward or backward and they also add a very subtle alpha fade in and fade out. If you’re interested in checking out other types of animations look no further than your Android SDK directory: <strong><em>Android_SDK\Platform\android-{version}\samples\ApiDemos\res\anim</em></strong></p>
<p><strong>view_transition_in_left.xml</strong></p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:17c97350-9d73-4139-94ad-28917cb03c78" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<div><span style="color:#008080;">1</span> <span style="color:#0000ff;">&lt;?</span><span style="color:#ff00ff;">xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;</span><span style="color:#0000ff;">?&gt;</span><span style="color:#008080;">2</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">set </span><span style="color:#ff0000;">xmlns:android</span><span style="color:#0000ff;">=&#8221;http://schemas.android.com/apk/res/android&#8221;</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">3</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">translate </span><span style="color:#ff0000;">android:fromXDelta</span><span style="color:#0000ff;">=&#8221;100%p&#8221;</span><span style="color:#ff0000;"> android:toXDelta</span><span style="color:#0000ff;">=&#8221;0&#8243;</span><span style="color:#ff0000;"> android:duration</span><span style="color:#0000ff;">=&#8221;300&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">4</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">alpha </span><span style="color:#ff0000;">android:fromAlpha</span><span style="color:#0000ff;">=&#8221;0.0&#8243;</span><span style="color:#ff0000;"> android:toAlpha</span><span style="color:#0000ff;">=&#8221;1.0&#8243;</span><span style="color:#ff0000;"> android:duration</span><span style="color:#0000ff;">=&#8221;300&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">5</span> <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">set</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">6</span></div>
</div>
<p><strong>view_transition_in_right.xml</strong></p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:563ac5cf-23f8-4466-b670-7e34f0e18835" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<div><span style="color:#008080;">1</span> <span style="color:#0000ff;">&lt;?</span><span style="color:#ff00ff;">xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;</span><span style="color:#0000ff;">?&gt;</span><span style="color:#008080;">2</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">set </span><span style="color:#ff0000;">xmlns:android</span><span style="color:#0000ff;">=&#8221;http://schemas.android.com/apk/res/android&#8221;</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">3</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">translate </span><span style="color:#ff0000;">android:fromXDelta</span><span style="color:#0000ff;">=&#8221;-100%p&#8221;</span><span style="color:#ff0000;"> android:toXDelta</span><span style="color:#0000ff;">=&#8221;0&#8243;</span><span style="color:#ff0000;"> android:duration</span><span style="color:#0000ff;">=&#8221;300&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">4</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">alpha </span><span style="color:#ff0000;">android:fromAlpha</span><span style="color:#0000ff;">=&#8221;0.0&#8243;</span><span style="color:#ff0000;"> android:toAlpha</span><span style="color:#0000ff;">=&#8221;1.0&#8243;</span><span style="color:#ff0000;"> android:duration</span><span style="color:#0000ff;">=&#8221;300&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">5</span> <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">set</span><span style="color:#0000ff;">&gt;</span></div>
</div>
<p><strong>view_transition_out_left.xml</strong></p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:646d6dee-e5d5-4735-a1e9-0907611f51e3" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<div><span style="color:#008080;">1</span> <span style="color:#0000ff;">&lt;?</span><span style="color:#ff00ff;">xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;</span><span style="color:#0000ff;">?&gt;</span><span style="color:#008080;">2</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">set </span><span style="color:#ff0000;">xmlns:android</span><span style="color:#0000ff;">=&#8221;http://schemas.android.com/apk/res/android&#8221;</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">3</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">translate </span><span style="color:#ff0000;">android:fromXDelta</span><span style="color:#0000ff;">=&#8221;0&#8243;</span><span style="color:#ff0000;"> android:toXDelta</span><span style="color:#0000ff;">=&#8221;-100%p&#8221;</span><span style="color:#ff0000;"> android:duration</span><span style="color:#0000ff;">=&#8221;300&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">4</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">alpha </span><span style="color:#ff0000;">android:fromAlpha</span><span style="color:#0000ff;">=&#8221;1.0&#8243;</span><span style="color:#ff0000;"> android:toAlpha</span><span style="color:#0000ff;">=&#8221;0.0&#8243;</span><span style="color:#ff0000;"> android:duration</span><span style="color:#0000ff;">=&#8221;300&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">5</span> <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">set</span><span style="color:#0000ff;">&gt;</span></div>
</div>
<p><strong>view_transition_out_right.xml</strong></p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:ea72824f-1436-4383-a9d3-e06b9eed295c" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<div><span style="color:#008080;">1</span> <span style="color:#0000ff;">&lt;?</span><span style="color:#ff00ff;">xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;</span><span style="color:#0000ff;">?&gt;</span><span style="color:#008080;">2</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">set </span><span style="color:#ff0000;">xmlns:android</span><span style="color:#0000ff;">=&#8221;http://schemas.android.com/apk/res/android&#8221;</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">3</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">translate </span><span style="color:#ff0000;">android:fromXDelta</span><span style="color:#0000ff;">=&#8221;0&#8243;</span><span style="color:#ff0000;"> android:toXDelta</span><span style="color:#0000ff;">=&#8221;100%p&#8221;</span><span style="color:#ff0000;"> android:duration</span><span style="color:#0000ff;">=&#8221;300&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">4</span> <span style="color:#0000ff;">&lt;</span><span style="color:#800000;">alpha </span><span style="color:#ff0000;">android:fromAlpha</span><span style="color:#0000ff;">=&#8221;1.0&#8243;</span><span style="color:#ff0000;"> android:toAlpha</span><span style="color:#0000ff;">=&#8221;0.0&#8243;</span><span style="color:#ff0000;"> android:duration</span><span style="color:#0000ff;">=&#8221;300&#8243;</span><span style="color:#0000ff;">/&gt;</span><span style="color:#008080;">5</span> <span style="color:#0000ff;">&lt;/</span><span style="color:#800000;">set</span><span style="color:#0000ff;">&gt;</span><span style="color:#008080;">6</span></div>
</div>
<p><strong>Step 5.</strong></p>
<p>Finally, we need to update <em>MainActivity</em> to set the ViewFlipper’s <em>inAnimation</em> and <em>outAnimation</em> properties. We’ll use a slide in from the left when the user clicks “Next” and we’ll slide in from the right when the user clicks “Previous”.</p>
<div id="scid:9D7513F9-C04C-4721-824A-2B34F0212519:1a60aff5-a5fa-42c1-87c8-90a9d4c6044b" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<div><span style="color:#008080;"> 1</span> <span style="color:#0000ff;">public</span><span style="color:#0000ff;">void</span><span style="color:#000000;"> onCreate(Bundle savedInstanceState) { </span><span style="color:#008080;"> 2</span> <span style="color:#0000ff;">super</span><span style="color:#000000;">.onCreate(savedInstanceState); </span><span style="color:#008080;"> 3</span> <span style="color:#000000;"> setContentView(R.layout.main); </span><span style="color:#008080;"> 4</span> <span style="color:#008080;"> 5</span> <span style="color:#0000ff;">final</span><span style="color:#000000;"> ViewFlipper viewFlipper </span><span style="color:#000000;">=</span><span style="color:#000000;"> (ViewFlipper)findViewById(R.id.viewFlipper); </span><span style="color:#008080;"> 6</span> <span style="color:#008080;"> 7</span> <span style="color:#000000;"> Button nextButton </span><span style="color:#000000;">=</span><span style="color:#000000;"> (Button) </span><span style="color:#0000ff;">this</span><span style="color:#000000;">.findViewById(R.id.nextButton); </span><span style="color:#008080;"> 8</span> <span style="color:#000000;"> nextButton.setOnClickListener(</span><span style="color:#0000ff;">new</span><span style="color:#000000;"> OnClickListener() </span><span style="color:#008080;"> 9</span> <span style="color:#000000;"> { </span><span style="color:#008080;">10</span> <span style="color:#008080;">11</span> <span style="color:#000000;"> @Override </span><span style="color:#008080;">12</span> <span style="color:#0000ff;">public</span><span style="color:#0000ff;">void</span><span style="color:#000000;"> onClick(View v) { </span><span style="color:#008080;">13</span> <span style="color:#000000;"> viewFlipper.setInAnimation(MainActivity.</span><span style="color:#0000ff;">this</span><span style="color:#000000;">, R.anim.view_transition_in_left); </span><span style="color:#008080;">14</span> <span style="color:#000000;"> viewFlipper.setOutAnimation(MainActivity.</span><span style="color:#0000ff;">this</span><span style="color:#000000;">, R.anim.view_transition_out_left); </span><span style="color:#008080;">15</span> <span style="color:#000000;"> viewFlipper.showNext(); </span><span style="color:#008080;">16</span> <span style="color:#000000;"> } </span><span style="color:#008080;">17</span> <span style="color:#008080;">18</span> <span style="color:#000000;"> }); </span><span style="color:#008080;">19</span> <span style="color:#008080;">20</span> <span style="color:#000000;"> Button previousButton </span><span style="color:#000000;">=</span><span style="color:#000000;"> (Button) </span><span style="color:#0000ff;">this</span><span style="color:#000000;">.findViewById(R.id.previousButton); </span><span style="color:#008080;">21</span> <span style="color:#000000;"> previousButton.setOnClickListener(</span><span style="color:#0000ff;">new</span><span style="color:#000000;"> OnClickListener() </span><span style="color:#008080;">22</span> <span style="color:#000000;"> { </span><span style="color:#008080;">23</span> <span style="color:#008080;">24</span> <span style="color:#000000;"> @Override </span><span style="color:#008080;">25</span> <span style="color:#0000ff;">public</span><span style="color:#0000ff;">void</span><span style="color:#000000;"> onClick(View v) { </span><span style="color:#008080;">26</span> <span style="color:#000000;"> viewFlipper.setInAnimation(MainActivity.</span><span style="color:#0000ff;">this</span><span style="color:#000000;">, R.anim.view_transition_in_right); </span><span style="color:#008080;">27</span> <span style="color:#000000;"> viewFlipper.setOutAnimation(MainActivity.</span><span style="color:#0000ff;">this</span><span style="color:#000000;">, R.anim.view_transition_out_right); </span><span style="color:#008080;">28</span> <span style="color:#000000;"> viewFlipper.showPrevious(); </span><span style="color:#008080;">29</span> <span style="color:#000000;"> } </span><span style="color:#008080;">30</span> <span style="color:#008080;">31</span> <span style="color:#000000;"> }); </span><span style="color:#008080;">32</span> <span style="color:#008080;">33</span> <span style="color:#000000;"> }</span></div>
</div>
<p>Finally, run your <a name="_GoBack"></a>app and behold the wonder that is the ViewFlipper sliding your Views in and out!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinrohling.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinrohling.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinrohling.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinrohling.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinrohling.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinrohling.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinrohling.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinrohling.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinrohling.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinrohling.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinrohling.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinrohling.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinrohling.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinrohling.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=80&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinrohling.wordpress.com/2011/01/25/using-a-slide-transition-with-viewflipper/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4baabf738e29514cdfb3c478960ab47c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinrohling</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/01/clip_image002_thumb1.jpg" medium="image">
			<media:title type="html">clip_image002</media:title>
		</media:content>
	</item>
		<item>
		<title>Building an Android Splash Screen</title>
		<link>http://kevinrohling.wordpress.com/2011/01/14/building-an-android-splash-screen-2/</link>
		<comments>http://kevinrohling.wordpress.com/2011/01/14/building-an-android-splash-screen-2/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 06:32:02 +0000</pubDate>
		<dc:creator>kevinrohling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">https://kevinrohling.wordpress.com/2011/01/14/building-an-android-splash-screen-2/</guid>
		<description><![CDATA[Github Repo Splash Screens are a common feature of many apps. They’re a nice way to show off the awesomeness that is your logo or maybe just dazzle your users with some eye candy while your app downloads things from the web, crunches numbers, or calculates the 2000th digit of the number pi. Whatever your &#8230;<p><a href="http://kevinrohling.wordpress.com/2011/01/14/building-an-android-splash-screen-2/" class="more-link">Read More</a></p><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=43&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/krohling/AndroidSplashScreenExample">Github Repo</a></p>
<p>Splash Screens are a common feature of many apps. They’re a nice way to show off the awesomeness that is your logo or maybe just dazzle your users with some eye candy while your app downloads things from the web, crunches numbers, or calculates the 2000th digit of the number pi. Whatever your reasons are for building a Splash Screen you’d probably like it to have a few nice features. This example shows how to build a Splash Screen that removes the title bar, fixes the screen in Portrait layout and prevents the user’s back button from returning them to the Splash Screen.</p>
<p><strong>Step 1. </strong></p>
<p>Let’s start all the way at the beginning, File -&gt; New Android Project. Feel free to use your own Application and Package Names but make sure you tell it to create a SplashActivity. This will be the brains of our Splash Screen.</p>
<p><a href="http://kevinrohling.files.wordpress.com/2011/01/image4.png"><img style="display:inline;border:0;" title="image_thumb2" src="http://kevinrohling.files.wordpress.com/2011/01/image_thumb21.png?w=352&#038;h=391" alt="image_thumb2" width="352" height="391" border="0" /></a></p>
<p><strong>Step 2. </strong></p>
<p>We need to add another Activity to our application that we can transition to when our Splash Screen is done. Add a new Activity named MainActivity and create a new layout XML file named splash.xml. Then configure the SplashActivity to use the splash.xml file for it’s layout and the MainActivity to use main.xml. If you’d like to make changes to these layout files to spruce things up go ahead. For this example I’ve added an image to the SplashActivity and changed the text in main.xml to read “Hello World, MainActivity!”</p>
<p>Here’s what your package should look like.</p>
<p><a href="http://kevinrohling.files.wordpress.com/2011/01/image8.png"><img style="display:inline;border:0;" title="image_thumb4" src="http://kevinrohling.files.wordpress.com/2011/01/image_thumb4.png?w=169&#038;h=244" alt="image_thumb4" width="169" height="244" border="0" /></a></p>
<p><strong><em>MainActivity</em></strong></p>
<p><a href="http://kevinrohling.files.wordpress.com/2011/01/image3.png"><img style="display:inline;border:0;" title="image" src="http://kevinrohling.files.wordpress.com/2011/01/image_thumb3.png?w=346&#038;h=108" alt="image" width="346" height="108" border="0" /></a></p>
<p><strong><em>SplashActivity</em></strong></p>
<p><a href="http://kevinrohling.files.wordpress.com/2011/01/image5.png"><img style="display:inline;border:0;" title="image" src="http://kevinrohling.files.wordpress.com/2011/01/image_thumb5.png?w=351&#038;h=115" alt="image" width="351" height="115" border="0" /></a></p>
<p><strong>Step 3.</strong></p>
<p>Once your project is set up, open <em>SplashActivity.java</em> and we’ll make a few changes. Add a variable named <em>splashDelay</em> to hold the length of time to keep the Splash Screen up. Then we’ll use a Timer and a TimerTask to help us schedule the transition to <em>MainActivity</em>. Note that before starting the new Activity we call the <em>finish()</em> method on the <em>SplashActivity</em>. This prevents the user from being able to use the back button to return to this Activity.</p>
<p><a href="http://kevinrohling.files.wordpress.com/2011/01/image6.png"><img style="display:inline;border:0;" title="image" src="http://kevinrohling.files.wordpress.com/2011/01/image_thumb6.png?w=542&#038;h=301" alt="image" width="542" height="301" border="0" /></a></p>
<p><strong>Step 4.</strong></p>
<p>Finally, we need to make two changes to AndroidManifest.xml. Set the application element’s theme attribute to Theme.NoTitleBar to get rid of the Title Bar and on the SplashActivity’s activity element, set the screenOrientation attribute to portrait to fix the SplashScreen to portrait layout.</p>
<p><a href="http://kevinrohling.files.wordpress.com/2011/01/image7.png"><img style="display:inline;border:0;" title="image" src="http://kevinrohling.files.wordpress.com/2011/01/image_thumb8.png?w=534&#038;h=362" alt="image" width="534" height="362" border="0" /></a></p>
<p>And finally our Splash Screen.</p>
<p><a href="http://kevinrohling.files.wordpress.com/2011/01/image13.png"><img style="display:inline;border:0;" title="image_thumb7" src="http://kevinrohling.files.wordpress.com/2011/01/image_thumb7.png?w=239&#038;h=354" alt="image_thumb7" width="239" height="354" border="0" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinrohling.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinrohling.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinrohling.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinrohling.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinrohling.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinrohling.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinrohling.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinrohling.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinrohling.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinrohling.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinrohling.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinrohling.wordpress.com/43/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinrohling.wordpress.com/43/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinrohling.wordpress.com/43/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=43&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinrohling.wordpress.com/2011/01/14/building-an-android-splash-screen-2/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4baabf738e29514cdfb3c478960ab47c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinrohling</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/01/image_thumb21.png" medium="image">
			<media:title type="html">image_thumb2</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/01/image_thumb4.png" medium="image">
			<media:title type="html">image_thumb4</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/01/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/01/image_thumb5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/01/image_thumb6.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/01/image_thumb8.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2011/01/image_thumb7.png" medium="image">
			<media:title type="html">image_thumb7</media:title>
		</media:content>
	</item>
		<item>
		<title>Social Smurf: A Social Media Plugin for SMF</title>
		<link>http://kevinrohling.wordpress.com/2010/07/11/social-smurf-a-social-media-plugin-for-smf/</link>
		<comments>http://kevinrohling.wordpress.com/2010/07/11/social-smurf-a-social-media-plugin-for-smf/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 06:55:46 +0000</pubDate>
		<dc:creator>kevinrohling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[silverlight]]></category>
		<category><![CDATA[smurf]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">https://kevinrohling.wordpress.com/2010/07/11/social-smurf-a-social-media-plugin-for-smf/</guid>
		<description><![CDATA[Live Example Source Code SocialSmurf XAP (rename from .zip to .xap) PluggableSmoothStreamingPlayer XAP (rename from .zip to .xap) Intro July 7th marked the release date of the 2nd version of the Silverlight Media Framework, aka SMF, aka the Smurf. It was such a big deal that everyone took Monday off of work and celebrated over &#8230;<p><a href="http://kevinrohling.wordpress.com/2010/07/11/social-smurf-a-social-media-plugin-for-smf/" class="more-link">Read More</a></p><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=15&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.enginexp.com/project-socialsmurf-example.html" target="_blank">Live Example</a><br />
<a href="http://www.enginexp.com/files/socialsmurf/SocialSmurf-Source.zip" target="_blank">Source Code</a><br />
<a href="http://www.enginexp.com/files/socialsmurf/socialsmurf.zip" target="_blank">SocialSmurf XAP</a> (rename from .zip to .xap)<br />
<a href="http://www.enginexp.com/files/socialsmurf/pluggablesmoothstreamingplayer.zip" target="_blank">PluggableSmoothStreamingPlayer XAP</a> (rename from .zip to .xap)</p>
<p><a href="http://kevinrohling.files.wordpress.com/2010/07/image.png"><img style="display:inline;border:0;" title="image" src="http://kevinrohling.files.wordpress.com/2010/07/image_thumb.png?w=500&#038;h=250" border="0" alt="image" width="500" height="250" /></a></p>
<p><strong><span style="font-size:large;">Intro</span></strong></p>
<p>July 7<sup>th</sup> marked the release date of the 2<sup>nd</sup> version of the Silverlight Media Framework, aka SMF, aka the Smurf. It was such a big deal that everyone took Monday off of work and celebrated over the weekend with fireworks and BBQ’s! What? Didn’t hear about it? Busy celebrating some other holiday? Well then <a href="http://smf.codeplex.com/">check it out</a>, no it’s cool I’ll wait…</p>
<p>Ok, now that you’ve built your first Silverlight video player capable of handling huge online video events like SNF and the Olympics I think we can move on. So while technically this wasn’t a national holiday it was still a great day for a very cool framework. Of course I toss around words like “great” and “very cool” but admittedly I am a little biased given that I’m the project lead. Nevertheless, we’ve been getting some good feedback and I’m constantly hearing about new projects spinning up that are using SMF. Take a look at the forums, there are many smart folks building innovative video projects. One of the coolest I’ve seen recently is <a href="http://www.nascar.com/promos/racebuddy/3D/">Nascar 3D</a>. By the way, if you’re one of those folks who happen to post in the forums give me a shout via <a href="http://twitter.com/sundriedcoder">twitter</a> some time. I try to reply quickly but, unfortunately I have to sleep sometimes, and I have a <a href="http://www.orlandotechnuts.com">girlfriend</a>, she prefers my eyes be glued to her and not the monitor sometimes J</p>
<p>One of my favorite new features in SMF v2 is definitely the plugin framework. SMF has a number of extensibility points you can plug into, like adding on screen UI elements, Logging, and supporting the playback of new types of media. What makes this really interesting to me is the built in ability to support downloading plugins over the network, thanks to integration with MEF. This allows developers to easily share and distribute plugins for SMF.</p>
<p>For a while now, I’ve had an idea of my own for a plugin that would integrate SMF with social media networks. What I want it to do is let users easily share a link to, not just the video, but the position in the video that they’re watching at that moment. Let’s take a quick look at how to do this.</p>
<p><strong><span style="font-size:large;">Step 1. Build the Control</span></strong></p>
<p>The control itself is pretty straight forward. It’s a horizontal StackPanel with a series of buttons, one for each network: Twitter, Facebook, LinkedIn, Delicious, and Email (not really a social network but still a cool way to share video). When the user clicks on a button, we build the URL that we’re going to share and launch a popup window that allows them to post to the network they clicked on. Each network has a different URL, I used <a href="http://blogs.business.com/b2b-online-marketing/2009/create-share-buttons/">this site</a> to get the format needed to support each of the ones I’m using here.</p>
<p><strong><span style="font-size:large;">Step 2. The SMF Plugin</span></strong></p>
<p>As I mentioned, SMF supports a number of plugin types. Implementing a plugin has two parts: 1) Implement the interface and 2) Add the Export Attribute. In case you’re wondering what #2 is all about, SMF uses MEF (<a href="http://mef.codeplex.com/">Managed Extensibility Framework</a>) to discover and load plugins. A discussion of MEF is well outside of the scope of this post but it’s a very useful framework and I owe <a href="http://twitter.com/gblock">Glenn Block</a> a public “thanks” for his guidance on using MEF to build a plugin framework.</p>
<p>For this example I’m implementing a Generic Plugin, which gives me a reference to the SMFPlayer instance. When my plugin gets a reference to the player I search the visual children for a Grid named PlayerRoot and add SocialSmurf to its children. To do this I need to implement the IGenericPlugin interface and add the ExportGenericPluginAttribute to my class. All SMF plugin attributes take as parameters the name, description, and version of my plugin.</p>
<p><strong><span style="font-size:large;">Step 3. Supporting the PluginUrl InitParam and “Link To Position”</span></strong></p>
<p>The SMF v2 release on CodePlex includes two prepackaged XAP files, one for Smooth Streaming and a smaller one that only supports Progressive Download. This allows you to easily embed the SMF player into your web site without having to write a line of code or even open Visual Studio. Instead you can configure the player using init params in your HTML file. One of my goals for this plugin was to make it as easy as possible to load into an SMF application and to do this I wanted a prepackaged XAP file that would support the loading of plugins via init params as well. Since this feature isn’t currently supported in the public version of SMF I decided to tweak the existing Smooth Streaming Player and add this feature.</p>
<p>Finally, I wanted to support “Link To Position”, letting users share specific positions within the video. Supporting this is pretty simple, I just check the query string for a variable named “position” and parse it the value into a TimeSpan.  After that, I wait for the Player’s MediaOpened event to fire and call SeekToPosition(…) on the player setting it to the specified position.</p>
<p><strong><span style="font-size:large;">Summary</span></strong></p>
<p>This was pretty quick and easy, I think I had a functional prototype up and working in about an hour.  The most time consuming part was, by far, doing the string parsing necessary to create the URLs that launch the different social media sites.  Also, adding the position to the URL was tricky as well given edge cases, like when there are already parameters on the query string.  There’s probably a better way to do this but it did the job.  The SMF integration was a piece of cake, however, I must admit that I do have an unfair advantage given my hand in writing it.  That said, I’d love to hear any feedback.  Is this really easy to the average dev?  How could something like this be made better??  Seriously, I’d love to know!   Also, if you think this is a generally useful plugin let me know if you have any feature ideas.</p>
<p>To add this plugin to your SMF application:</p>
<p class="csharpcode">Uri pluginSource = <span class="kwrd">new</span> Uri(<span class="str">&#8220;“http://www.enginexp.com/files/socialsmurf/socialsmurf.zip”&#8221;</span>)<br />
player.BeginAddExternalPlugins(pluginSource);</p>
<p><!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p>To include this player in your site, add the following HTML snippet:</p>
<p class="csharpcode"><span class="kwrd">&lt;</span><span class="html">object</span> <span class="attr">data</span><span class="kwrd">=&#8221;data:application/x-silverlight-2,&#8221;</span> <span class="attr">type</span><span class="kwrd">=&#8221;application/x-silverlight-2&#8243;</span> <span class="attr">width</span><span class="kwrd">=&#8221;100%&#8221;</span> <span class="attr">height</span><span class="kwrd">=&#8221;100%&#8221;</span><span class="kwrd">&gt;</span><br />
<span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&#8221;source&#8221;</span> <span class="attr">value</span><span class="kwrd">=&#8221;http://www.enginexp.com/files/socialsmurf/pluggablesmoothstreamingplayer.zip&#8221;</span><span class="kwrd">/&gt;</span><br />
<span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&#8221;minRuntimeVersion&#8221;</span> <span class="attr">value</span><span class="kwrd">=&#8221;4.0.50401.0&#8243;</span> <span class="kwrd">/&gt;</span><br />
<span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&#8221;InitParams&#8221;</span> <span class="attr">value</span><span class="kwrd">=&#8221;pluginurl=http://www.enginexp.com/files/socialsmurf/socialsmurf.zip,<br />
mediaurl=[Insert Your Video Url Here]&#8220;</span> <span class="kwrd">/&gt;</span><br />
<span class="kwrd">&lt;/</span><span class="html">object</span><span class="kwrd">&gt;</span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinrohling.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinrohling.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinrohling.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinrohling.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinrohling.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinrohling.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinrohling.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinrohling.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinrohling.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinrohling.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinrohling.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinrohling.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinrohling.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinrohling.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=15&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinrohling.wordpress.com/2010/07/11/social-smurf-a-social-media-plugin-for-smf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4baabf738e29514cdfb3c478960ab47c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinrohling</media:title>
		</media:content>

		<media:content url="http://kevinrohling.files.wordpress.com/2010/07/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Geolocation Search with SQL Server</title>
		<link>http://kevinrohling.wordpress.com/2010/07/08/geolocation-search-with-sql-server/</link>
		<comments>http://kevinrohling.wordpress.com/2010/07/08/geolocation-search-with-sql-server/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 05:28:59 +0000</pubDate>
		<dc:creator>kevinrohling</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[location]]></category>
		<category><![CDATA[sever]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">https://kevinrohling.wordpress.com/2010/07/08/geolocation-search-with-sql-server/</guid>
		<description><![CDATA[As some of you may know, as a side project, I’m building an app that involves geo-location and social media.  When I went to build the geo-location part of the app my requirements were pretty simple.  I have people in my application with lots of GPS data and given a specific GPS coordinate, maybe where I’m &#8230;<p><a href="http://kevinrohling.wordpress.com/2010/07/08/geolocation-search-with-sql-server/" class="more-link">Read More</a></p><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=4&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As some of you may know, as a side project, I’m building an <a href="http://www.metayoo.com">app</a> that involves geo-location and social media.  When I went to build the geo-location part of the app my requirements were pretty simple.  I have people in my application with lots of GPS data and given a specific GPS coordinate, maybe where I’m standing now, I need to search all those people and see who is nearby.  So how to do this?  Well, you obviously don’t want to do this in the application, right?  You’d have to pull all that data back and do a search in memory.  The database is a much better place, and fortunately SQL Server 2008 (and now <a href="http://www.geowebguru.com/news/278-geospatial-support-added-to-sql-azure">SQL Azure</a>) have geospatial support.  <a href="http://msdn.microsoft.com/en-us/magazine/dd434647.aspx">Here’s</a> a great MSDN article with more information.  And this is a simplified version of the Stored Procedure I came up with that will search a database table (Location) for all records within a specified distance (meters) of a target lat/lon position:</p>
<pre class="csharpcode"><span class="kwrd">CREATE</span> <span class="kwrd">PROCEDURE</span> SearchLocation (
    @SearchLatitude <span class="kwrd">decimal</span>(12, 8),
    @SearchLongitude <span class="kwrd">decimal</span>(12, 8),
    @Distance <span class="kwrd">decimal</span>(12, 8))
<span class="kwrd">AS</span>
<span class="kwrd">BEGIN</span>
    <span class="kwrd">SET</span> NOCOUNT <span class="kwrd">ON</span>

    <span class="kwrd">SELECT</span>  l.UserId
    <span class="kwrd">FROM</span>    Location l
    <span class="kwrd">WHERE</span>   l.LocationPosition.STDistance(geography::Point(@SearchLatitude, @SearchLongitude, 4326)) &lt; @Distance
END</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/kevinrohling.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/kevinrohling.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/kevinrohling.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/kevinrohling.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/kevinrohling.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/kevinrohling.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/kevinrohling.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/kevinrohling.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/kevinrohling.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/kevinrohling.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/kevinrohling.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/kevinrohling.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/kevinrohling.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/kevinrohling.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=kevinrohling.wordpress.com&amp;blog=14581783&amp;post=4&amp;subd=kevinrohling&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://kevinrohling.wordpress.com/2010/07/08/geolocation-search-with-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4baabf738e29514cdfb3c478960ab47c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">kevinrohling</media:title>
		</media:content>
	</item>
	</channel>
</rss>
