<?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>Lost in LoC</title>
	<atom:link href="http://lostinloc.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostinloc.com</link>
	<description>So many lines, so little time</description>
	<lastBuildDate>Mon, 14 Dec 2009 15:11:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='lostinloc.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/8263617b9416939cb57120f42065c97a?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Lost in LoC</title>
		<link>http://lostinloc.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://lostinloc.com/osd.xml" title="Lost in LoC" />
	<atom:link rel='hub' href='http://lostinloc.com/?pushpress=hub'/>
		<item>
		<title>Top Albums of 2009</title>
		<link>http://lostinloc.com/2009/12/14/top-albums-of-2009/</link>
		<comments>http://lostinloc.com/2009/12/14/top-albums-of-2009/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 14:50:25 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://lostinloc.com/?p=231</guid>
		<description><![CDATA[Well ladies &#38; gentlemen, it&#8217;s that time of year again where I make a list that nobody reads or cares about. Considering this is more an exercise in reflection than it is in sharing my highly-toted-to-nobody-in-particular opinion, here are my favourite albums of 2009 without any explanation. YMMV. #10 &#8211; Kurt Vile: Childish Prodigy #09 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=231&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Well ladies &amp; gentlemen, it&#8217;s that time of year again where I make a list that nobody reads or cares about. Considering this is more an exercise in reflection than it is in sharing my highly-toted-to-nobody-in-particular opinion, here are my favourite albums of 2009 without any explanation. YMMV.</p>
<p>#10 &#8211; Kurt Vile: Childish Prodigy<br />
#09 &#8211; Real Estate: (ST)<br />
#08 &#8211; Bat For Lashes: Two Suns<br />
#07 &#8211; The Antlers: Hospice<br />
#06 &#8211; Bonnie &#8220;Prince&#8221; Billy: Beware<br />
#05 &#8211; Animal Collective: Merriweather Post Pavillion<br />
#04 &#8211; Grizzly Bear: Veckatimest<br />
#03 &#8211; Future of the Left: Travels With Myself And Another<br />
#02 &#8211; Micachu &amp; The Shapes: Jewellery<br />
#01 &#8211; Do Make Say Think: Other Truths</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=231&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2009/12/14/top-albums-of-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>
	</item>
		<item>
		<title>MashedIn &#8211; Fuelling Your Connections With Oxygen</title>
		<link>http://lostinloc.com/2009/12/10/mashedin-fuelling-your-connections-with-oxygen/</link>
		<comments>http://lostinloc.com/2009/12/10/mashedin-fuelling-your-connections-with-oxygen/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 21:45:51 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://lostinloc.com/?p=221</guid>
		<description><![CDATA[This past week my team and I worked on version 8 (Oxygen) of MashedIn. We had 2 goals going into this version: Provide a better, more predictable user experience when authenticating with the product Do a better job at handling badness when talking with Facebook, Twitter, and other social partners Fix bugs! It never ceases [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=221&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>This past week <a href="http://www.socialconnections.com">my team and I</a> worked on version 8 (Oxygen) of <a href="http://www.mashedin.com">MashedIn</a>. We had 2 goals going into this version:</p>
<ul>
<li>Provide a better, more predictable user experience when authenticating with the product</li>
<li>Do a better job at handling badness when talking with Facebook, Twitter, and other social partners</li>
<li>Fix bugs!</li>
</ul>
<p>It never ceases to amaze me how much our team can accomplish in as little as 3 days of development time. Here&#8217;s the fifty thousand foot view.</p>
<ul>
<li>4 improvements to how we authenticate and manage sessions with our social partners</li>
<li>Bunch of preliminary branding work. Pretty pictures! Human readable copy! Personality provided by cheeze wiz!</li>
<li>13 bug fixes</li>
<li>8 bagels eaten</li>
<li>Several dozen carafes of coffee confidently consumed</li>
</ul>
<p>Now, that may not sound like too much, but that&#8217;s a full 3 days of work across a team of 4 developers, including design meetings, decision making, and the occasional head butting. I believe we tackled some good things this sprint, and the experience we provide to the user is a little more predictable; we shouldn&#8217;t be shattering your expectations anymore. </p>
<p>There were 2 main challenges we faced in Oxygen. First, the more we investigated how to better manage expectations for the user (that is, not shock and awe the user with unexpected, crappy behaviour) the more subtleties we discovered. Most of these subtleties came in the form of Facebook Connect. Managing your sessions can be quite difficult thanks to the persistently authenticated nature of Facebook Connect (and the fact that we don&#8217;t control <em>any</em> of it). What happens when I sign into Facebook using an alternative set of credentials, but then I visit MashedIn and MashedIn determines that I have a different Facebook user associated with my account than what Facebook Connect dictates? What&#8217;s the best way to handle this? How transparent do we need to be to the user? Do we really want to provide a bunch of subtle options? Are those options going to frustrate the users? It&#8217;s a tough call, and we believe we&#8217;ve made the right decisions, but a good round of user testing will definitely help us out.</p>
<p>The 2nd challenge was one of irony: Facebook has been biting the proverbial dust all week. Without Facebook we can&#8217;t grab social information for the visitor. Without social information we can&#8217;t effectively perform what we want our product to do. Without doing what we want to do in the app we&#8217;re wasting the time of our users by providing them crap all for value.  With <a href="http://developers.facebook.com/live_status.php">Facebook crapping out this week</a>, we were able to uncover a lot of really poorly written code.  We were able to eat our own dog food, and it tasted like&#8230; well, dog food. It sucked. We all went crazy. Brett, one of our developers, started wearing a monkey suit to work. It was total chaos. As a result, we addressed a bunch of the Rainy Day scenarios and made our dog food taste more like a bottle of cheap wine. While what is there isn&#8217;t perfect, we believe the overall quality of both the code and the user experience is better. One week at a time, my friends, one week at a time. </p>
<p>Next week we start our 9th sprint. If you&#8217;re a chemistry buff you&#8217;ll know that Fluorine has an atomic weight of 9. You&#8217;ll also know that Fluorine is an extremely toxic element, one that may cause severe burns when it comes in contact with the skin. As such I think it&#8217;s fitting that we&#8217;re attempting to accomplish a lot of painful things in Fluorine. We have 2 goals for next week:</p>
<ul>
<li>Fail faster! By that I mean improve performance by not allowing several retries that ultimately result in failure. Fail hard, and fail now! (Note: we&#8217;ll be doing lots of other things to improve performance&#8230; embracing failure is just one of them)</li>
<li>Make it pretty! We&#8217;ve spent a lot of time during Nitrogen and Oxygen gearing up our look and feel, branding, etc. Now we want to start pulling the trigger on those ideas.</li>
</ul>
<p>Next week should be interesting and pose a lot of new challenges. I&#8217;m expecting that by the end of Fluorine we&#8217;ll have a better performing, better looking product. One that will hopefully make you smile and bring a tear to your eye. So keep checking back, and make sure to go <a href="http://www.mashedin.com">give MashedIn a spin</a> and let us know what you think (good, bad, terrible, fantastic &#8211; all feedback is welcome)!.</p>
<p>Until then, The Dude abides.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/221/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/221/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/221/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=221&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2009/12/10/mashedin-fuelling-your-connections-with-oxygen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>
	</item>
		<item>
		<title>MashedIn &#8211; Bringing Y&#8217;all Together One Element at a Time</title>
		<link>http://lostinloc.com/2009/12/04/mashedin-bringing-yall-together-one-element-at-a-time/</link>
		<comments>http://lostinloc.com/2009/12/04/mashedin-bringing-yall-together-one-element-at-a-time/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 21:49:25 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Shameless Corporate Plugs]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[socialconnections]]></category>

		<guid isPermaLink="false">http://lostinloc.com/?p=217</guid>
		<description><![CDATA[Over the past 7 weeks I&#8217;ve been working on a project at work called MashedIn. The goal of the project is to provide social context to otherwise contextual-less online media. For example, pretend I write a blog (which I do&#8230; somewhat&#8230; kinda&#8230;). Using MashedIn I can put a widget on my blog which allows the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=217&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Over the past 7 weeks I&#8217;ve been working on a project <a href="http://www.socialconnections.com" target="_blank">at work</a> called MashedIn. The goal of the project is to provide social context to otherwise contextual-less online media. For example, pretend I write a blog (which I do&#8230; somewhat&#8230; kinda&#8230;). Using MashedIn I can put a widget on my blog which allows the visitor of my site to see how he or she is connected to me through Twitter, Facebook, and other social networking services (some coming in the near future). This may seem like something trivial (note: it&#8217;s not), and on the outset it may seem like something that provides very little value (note: not true), but the fact is it can be a tool of great power when used in the proper setting.</p>
<p>That proper setting is locality. If your&#8217;e reading my blog chances are you don&#8217;t know me. About 90% of my hits come from a few keyword searches and Google. If I had the MashedIn widget on my blog, and you actually decided to see what it was all about, you&#8217;d likely be quite disappointed because &#8211; well &#8211; we&#8217;re likely in different cities, if not other countries. However, imagine you&#8217;re viewing the website of your local butcher shop and they have the MashedIn widget on their site. You may have never done business with the butcher shop, you may not even know that the butcher shop in question works only with lamb (they really love their mutton), but by signing into the widget you suddenly realize that you know a few people that work there, and you have several mutual friends. Suddenly you have a boatload of people you can ask about this butcher shop.</p>
<p>That functionality may still sound trivial, but if you start with that foundation the power and complexity that may be provided to you the visitor can suddenly ramp up, especially if you integrate the mashed social graph with other online crowdsourced services (such as <a href="http://www.steprep.com" target="_blank">StepRep</a>&#8216;s recommendation system). Out of the box the widget doesn&#8217;t seem very impressive, but we&#8217;re only 7 weeks in and we have a huge backlog of ideas that can make this thing pivotal to bloggers, local businesses, etc.</p>
<p>We&#8217;re developing MashedIn 1 week at a time (each week named after the element with the corresponding atomic weight). Every Friday morning we plan what we&#8217;re going to do for the following Monday through Wednesday. Every Thursday we wrap things up; do one last round of integration, testing and debugging, and then release. The velocity is high and the focus intense. Lots of fun agile practices such as Test Driven Development, pair programming, etc. But more importantly there&#8217;s lots of interesting challenges to be solved. </p>
<p>In the 4th week of development (named Beryllium because Beryllium has an atomic weight of 4, you getting this now? Yea, nerdism at it&#8217;s best) some pretty bad design decisions were made regarding how we manage all the different social networks MashedIn works with. We spent a bunch of time on the 3 subsequent sprints (Boron, Carbon and Nitrogen) fixing these decisions, and we&#8217;re finally at a state that we&#8217;re content with&#8230; for now. This exercise has been interesting, however, and has proven what we all heard in first year comp-sci: The most expensive part of software development is adjusting code that&#8217;s already been released. Keep in mind we spent 1 week (3 days, really) back in Beryllium to write the code that&#8217;s pivotal to handling MashedIn&#8217;s core system. The design was so poor that it cost us the lion-share of Boron, Carbon and Nitrogen to fix. That&#8217;s some rather hefty opportunity cost to pay for not having spent a few more hours group-thinking about a better solution. Thankfully we can finally move on and get back to concentrating on some of the more interesting problems.</p>
<p>Monday marks Day 1 of Oxygen (our 8th week). This sprint&#8217;s theme is more consistent and user friendly session management with our various social partners. This is a complicated task because Twitter&#8217;s implementation of OAuth is significantly different than Facebook Connect, and who knows how that is different from all the other social networks. We&#8217;ve developed patterns over the past few sprints which have significantly improved the experience, but there are still some gotchas that need handling. How do we gracefully handle an expired session, especially since that session is outside of our control and can literally expire at any time? What do we do when a visitor is looking at a widget and the owner of that widget has failed to allow for Facebook&#8217;s persistent permissions? How do we balance what the visitor of the site cares to see and do vs. the system&#8217;s requirements to do all that crazy processing (thus requiring special permissions from the owner of the widget)? It&#8217;s an interesting mix of challenges, and I look forward to seeing what we come up with next week.</p>
<p>Until then, The Dude abides!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=217&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2009/12/04/mashedin-bringing-yall-together-one-element-at-a-time/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>
	</item>
		<item>
		<title>Google AppEngine and Separation of Concerns</title>
		<link>http://lostinloc.com/2009/10/25/google-appengine-and-separation-of-concerns/</link>
		<comments>http://lostinloc.com/2009/10/25/google-appengine-and-separation-of-concerns/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 23:40:25 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Google AppEngine]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://lostinloc.com/?p=213</guid>
		<description><![CDATA[In the world of writing software there are 2 challenges every developer must face: how to keep your concerns separate, and how to survive the impending deadly boredom of writing all your data CRUD (Create, Update, Retrieve and Delete) functionality. There are a gazillion solutions out there for both. In the realm of functional isolation [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=213&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>In the world of writing software there are 2 challenges every developer must face: how to keep your concerns separate, and how to survive the impending deadly boredom of writing all your data CRUD (Create, Update, Retrieve and Delete) functionality. There are a gazillion solutions out there for both.  In the realm of functional isolation much has been written, studied, and practiced for separating your program&#8217;s concerns. You can adhere to various design patterns; you can establish a pattern and an engine to manage that pattern yourself; you can use one of the several freely available frameworks that already exist (such as Spring). This is good.</p>
<p>In the realm of CRUD management (and boy, is it a crappy job&#8230; ba-da-dum!) there&#8217;s a plethora of available frameworks for almost every language. These object persistence frameworks handle all the boring, lowdown, uninteresting CRUD functionality that developers loath (but which is a necessary evil). This is also good.</p>
<p>What&#8217;s bad, however, is the interoperation of these two challenges rarely seems &#8220;natural&#8221;.  The reason is that object persistence frameworks can really mess with your separation of concerns.  The domain classes you write can suddenly become the transport means in your data access layer, thus blurring the lines of what code goes where.</p>
<p>A week ago I started a new application that uses Google AppEngine. Google AppEngine provides an object persistence framework as part of its platform. It also provides a Model-View-Controller type of framework for writing all your web apps. From day one my colleague Kevin Pierce and I have struggled to determine how to separate domain logic from data logic. In AppEngine, your &#8220;onion&#8221; from the outermost layer to the innermost looks more or less like the following:</p>
<p>[Template] (html/js/css) -&gt; [View] -&gt; [Model] -&gt; [DataStore]</p>
<p>The problem with the above onion is between the View and the Model. Without having something in between your views can (and will) become enormously bloated, full of miscellaneous helper modules, and will operate directly against the Model/Datastore, thus blurring the lines of responsibility in your application.  This will eventually make your life a living hell.  Kevin and I decided to throw in an intermediary layer between View and Model, called Domain, which houses all the business logic of our application.</p>
<p>[Template] -&gt; [View] -&gt; [Domain] -&gt; [Model] -&gt; [DataStore]</p>
<p>The idea is that the View layer will only ever directly interact with the Domain layer, and never directly against the Model layer. For example, if the View needs to retrieve a Person from the DataStore, instead of going directly using the Model, the View will ask the Domain for an object that&#8217;s responsible for retrieving a Person from the DataStore and interact with that object (a classic Factory).  Because Python is a dynamic language, in which everything is an object (including classes, functions and modules) this becomes extremely easy.  Take the following example:</p>
<pre># in myapp.models.person module
from google.appengine.ext import db
class Person(db.Model):
	first_name = db.StringProperty()
	last_name = db.StringProperty()

def get_person_by_id(person_id):
	return Person.get_by_id(person_id)

# in myapp.domain.person
class PersonProxyFactory(object):
	def create(self):
		from myapp.models import person
		return person

# some_view.py
def get_person(request, *args, **kwargs):
	from myapp.domain.person import PersonProxyFactory
	factory = PersonProxyFactory().create()
	factory.get_person_by_id(request.GET.get('person_id'))
	# return some template</pre>
<p>In the above example the View has no direct knowledge of the Model; the only layer the View explicitly knows about is Domain. The Domain has knowledge of the Model, and because in python a module is just another object, the Domain&#8217;s factory can return the actual person module. The View need not be aware of what the returned object actually is, instead it need only understand what the interface of that object is.</p>
<p>This separates the concerns nicely while still allowing us to use the persistence framework, but it poses some difficult questions. To what extent must we wrap functionality? Is it appropriate for layers above the Model layer to assume that a Person class know how to save itself (via an instance method of save() or put())? Where do we draw the lines with this solution?</p>
<p>How have you tackled the dichotomy of object persistence frameworks and the separation of concerns?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/213/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=213&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2009/10/25/google-appengine-and-separation-of-concerns/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>
	</item>
		<item>
		<title>Google AppEngine PolyModels and ModelForms</title>
		<link>http://lostinloc.com/2009/04/11/google-appengine-polymodels-and-modelforms/</link>
		<comments>http://lostinloc.com/2009/04/11/google-appengine-polymodels-and-modelforms/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 00:02:55 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Project]]></category>
		<category><![CDATA[Google AppEngine]]></category>

		<guid isPermaLink="false">http://lostinloc.wordpress.com/?p=194</guid>
		<description><![CDATA[I recently created my first PolyModel class in Google AppEngine for a new feature. The feature was pretty straight forward  - allow comments for some of the entities in our application Homebook.  We wanted each comment to be tied back to its target entity &#8211; a room, house, or image &#8211; in a 1-to-many (each [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=194&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I recently created my first <a href="http://code.google.com/appengine/docs/python/datastore/entitiesandmodels.html#Polymorphic_Models" target="_top">PolyModel</a> class in <a href="http://appengine.google.com" target="_top">Google AppEngine</a> for a new feature. The feature was pretty straight forward  - allow comments for some of the entities in our application <a href="http://www.myfrontsteps.com" target="_top">Homebook</a>.  We wanted each comment to be tied back to its target entity &#8211; a room, house, or image &#8211; in a 1-to-many (each entity can have many comments). Using PolyModel we found this to be pretty easy without duplicating a bunch of code.  Essentially the structure of Comment class hierarchy looked like the following:</p>
<p>class Comment(PolyModel):<br />
&nbsp;&nbsp;&nbsp;&nbsp;# bunch of common fields                  </p>
<p>class RoomComment(Comment):<br />
&nbsp;&nbsp;&nbsp;&nbsp;target = db.ReferenceProperty(reference_class=Room, collection_name=&#8217;comments&#8217;)</p>
<p>class HomeComment(Comment):<br />
&nbsp;&nbsp;&nbsp;&nbsp;target = db.ReferenceProperty(reference_class=Home, collection_name=&#8217;comments&#8217;)</p>
<p>class ImageComment(Comment):<br />
&nbsp;&nbsp;&nbsp;&nbsp;target = db.ReferenceProperty(reference_class=Image, collection_name=&#8217;comments&#8217;)</p>
<p>Really straight forward &#8211; simple class inheritance.  I then created a simple factory method that would fetch the proper class type for a given instance of one of our commentable entities.  Things were moving along nicely (complete with lots of beautiful unit tests &#8211; you do write unit tests, right?) and it was time to create the add_comment view.</p>
<p>For the most part we use Google AppEngine&#8217;s djangoforms ModelForms, a theoretically clean and easy way to create web forms based on data models.  I created my standard ModelForm class (based on our parent Comment class) and the view against which the form would post, only to be blindsided by the oddest of validation errors:</p>
<ul class="errorlist">
<li>_class
<ul class="errorlist">
<li>This field is required.</li>
</ul>
</li>
</ul>
<p>Huh? _class? What gives?  Well, after a couple hours of soul searching, googling (which turned up nothing), and a few tears, my genius coworker <a href="http://blog.chilly.ca" target="_top">Tony Arkles</a> had an epiphany: The PolyModel class has a _class field which is used to keep track of the PolyModel instance&#8217;s class hierarchy.  We added the _class field to our form&#8217;s exclude list and the world righted itself, cats and dogs learned to coexist, and Liz Taylor finally discovered a happy marriage.  </p>
<p>Now the question is, why is the ModelForm rendering a field that&#8217;s not a google.appengine.ext.db model property?  Can anybody from Google answer me that?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/194/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/194/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/194/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=194&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2009/04/11/google-appengine-polymodels-and-modelforms/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>
	</item>
		<item>
		<title>Traditional Skills Are Still Needed in Software Development</title>
		<link>http://lostinloc.com/2008/11/21/traditional-skills-are-still-needed-in-software-development/</link>
		<comments>http://lostinloc.com/2008/11/21/traditional-skills-are-still-needed-in-software-development/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 21:16:16 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Cocoa]]></category>

		<guid isPermaLink="false">http://lostinloc.wordpress.com/?p=175</guid>
		<description><![CDATA[In one of my earlier posts I mentioned that for the past 7 years I primarily worked in the world of .NET.  I enjoyed those 7 years.  Microsoft&#8217;s .NET Framework is rich and fun to use.  The C# language continues to impress me as it matures, the Framework&#8217;s classes and libraries are intuitive to use, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=175&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>In one of my earlier posts I mentioned that for the past 7 years I primarily worked in the world of .NET.  I enjoyed those 7 years.  Microsoft&#8217;s .NET Framework is rich and fun to use.  The C# language continues to impress me as it matures, the Framework&#8217;s classes and libraries are intuitive to use, and the documentation, despite being about 2.5 <em>gigs,</em> is thorough, easy to understand, and complete.  As far as I&#8217;m concerned, Microsoft&#8217;s .NET Framework is a home run as far as frameworks go; it&#8217;s the big &#8220;Pro&#8221; when it comes to developing MS based applications.</p>
<p>That being said, there&#8217;s a lot of cons.  You pretty much have no choice but to use Windows.  You&#8217;re realistically stuck with having to use Microsoft&#8217;s flagship IDE, Visual Studio .NET.  Despite having fantastic integrated debugging, the IDE itself is very&#8230; Microsofty.  It&#8217;s very point and click.  The keyboard shortcuts aren&#8217;t very powerful (mouseless navigation is nearly impossible).  It&#8217;s expensive (if you&#8217;re not using one of the stripped down &#8220;free&#8221; versions). It&#8217;s bloated, slow, and buggy.  It crashes all the time.  It has very little support for Agile development, and what support there is completely misses the point (I&#8217;m looking at you, MSUnit).  I also think that VS.NET teaches novice developers how to do everything wrong (code-behind is a wickedly evil thing).  Overall, the entire thing really kinda sucks, and if it weren&#8217;t for <a href="http://www.jetbrains.com/resharper/">ReSharper</a> the thing would be almost useless.</p>
<p>About 2 months ago I started focusing hard on iPhone and Mac OS X software development.  One of the things I liked right off the bat was that I didn&#8217;t have to buy any development tools.  In fact, I didn&#8217;t even have to download anything because my Macbook Pro came with everything I needed to get going.  IDE for development? Check. Performance monitoring tools?  Check.  App for creating interfaces?  Check.  Incredibly impressed with the tools that come out of the box, ready for development (including Subversion, python, ruby, IDE&#8217;s and graphical tools)?  Check.  As far as development tools and &#8220;out of the box&#8221; readyness for somebody to get their geek on, Apple hit a home run.  This is Apple&#8217;s &#8220;Pro&#8221; entry.</p>
<p>Fast forward 2 months.  Ask me if I&#8217;m still developing my iPhone application.  Go on.  Ask.  I&#8217;m serious!  Do it!</p>
<blockquote><p>Are you still developing your iPhone application?</p></blockquote>
<p>Hell no.</p>
<blockquote><p>Uh&#8230; why not?</p></blockquote>
<p>Because despite having great tools out of the box (+1), the developer documentation is so horrendous that it artificially inflates the learning curve by a factor of 10 (-1<em> gazillion!</em>).  Yes, there are oodles of example code at the <a href="http://developer.apple.com/">Apple Developer site</a>, and yes there are oodles of videos too.  That&#8217;s great if you already have a decent 5,000 foot view of the technological components you want to work with, but it sucks if you <em>don&#8217;t</em> have that 5,000 foot view.  And the only way to have that 5,000 foot view is if you&#8217;ve already been developing in Cocoa Framework for the past several years.</p>
<p>The problem is in the details, literally.  Their code examples demonstrate the raw intricacies of the how, but not the conceptual understanding of the what and why.  As a result I find it incredibly difficult to see the low level implementation details when I don&#8217;t have a decent understanding of the classes involved at a higher level.  At the other end of the spectrum are their videos.  These videos are 50,000 foot pie-in-the-sky views that give the audience a really casual understanding of general stuff.  They&#8217;re essentially marketing videos for nerds.  They&#8217;re great if you&#8217;re <em>just</em> getting started and you need a super-high level view of how the various frameworks piece together, but they don&#8217;t prepare you to actually do anything.</p>
<blockquote><p>So what about the documentation that comes with the development tools?</p></blockquote>
<p>A great question!  Let me take the Socratic method and answer your question with a question.  <em>What documentation?</em> Imagine, if you will, the horror of opening up the documentation tool for Xcode (an entirely separate application that helps you search and organize Apple&#8217;s documentation &#8211; good in theory, fails miserably in practice) and finding that the documentation for almost every single class and method is only 1 sentence long, and that 1 sentence is the most formal, computer-sciency idiomatic statement you can possibly imagine.  That&#8217;s Cocoa&#8217;s documentation.  The inline comments provided by the header files are better, but barely.</p>
<p>This has frustrated me on so many occasions that the euphoria I experienced while trying to develop my first iPhone application quickly turned into the searing pain of frustration and anger.  It frustrates me doubly so because Apple is a fantastic company with fantastic products for which I desperately want to contribute, but I can&#8217;t.  I have a limited amount of time every week that I reserve for Apple development, and their lack of documentation is completely counter productive.  I can easily spend the entire time searching for a snippet of easy to read, easy to understand documentation about, for example, what methods you have to implement in order for your class to act as a delegate to some other class.  The documentation just isn&#8217;t there, and if it is, it&#8217;s so horribly organized that I couldn&#8217;t find it if it jumped out and kicked me in the junk.</p>
<p>This brings me to the point which I eluded to in the title of this entry.  It&#8217;s great to have lots of fun, good looking, easy to use tools.  It&#8217;s great to sit down and hammer out oodles of code.  It&#8217;s super duper fun to compile your application and watch it run, crash, and burn.  Those are great skills to have, but the thing that really makes software development a joy is the same thing that makes almost any other traditional profession a joy:  clear communication.</p>
<p>I once met a kid in grade 10 that was a computer whiz, but was failing out of school because he refused to apply any of his efforts towards his non-technical, non-sciency classes.  At the top of this failure list was English.  I asked him why he didn&#8217;t like English.</p>
<blockquote><p>Because it&#8217;s stupid.  I&#8217;m not going to use it!  I want to be a programmer, not an author!  I don&#8217;t care about that stuff!</p></blockquote>
<p>Needless to say I had to inform him that a very large portion of my job is not writing code, but communicating complex ideas to other people.  People that are both tech-savy and technically-inept.  Communication is one of, if not the most important skill in software industry.  He was shocked.</p>
<p>I once had a job in which I was told, on my first day, that my responsibilities would be &#8220;to port application X into application Y&#8221;.  I asked where the requirements were and if I could have access because I will need to review those requirement in order to do the job.  I was told that there weren&#8217;t any requirements, and that I should just &#8220;read the code.&#8221;  Naturally the person who told me this was not a technical person, and I couldn&#8217;t get mad at them because as far as they knew reading code was just like reading a well written novel.  In reality, reading code is more like reading a very poorly written novel, in which there are either far too many or far too few characters, and all the pages are mixed up, and there are no page numbers, and all of a sudden it just ends.</p>
<p>For whatever reason, Apple has forgotten the importance of clear communication.  This is unfortunate because Apple is in a position in which they can take a significant dent out of Microsoft&#8217;s developer base if they wanted to.  Apple has all the fun sexy toys.  They have all the innovation.  They have all the trend and momentum right now.  Microsoft, conversely, has a failing strategy in almost every segment of the computer industry.  If Apple could deliver a rich, thorough, and well organized set of documentation for their Cocoa framework, it could be a huge blow to Microsoft&#8217;s developer strategy.  So far, though, Apple is completely dropping the ball.</p>
<p>Apple.  If you&#8217;re listening &#8211; get busy and floor me with some excellent documentation.</p>
<p>Readers.  If you&#8217;re willing &#8211; floor me with some excellent resources that tell me the what and why, and not the how of the Cocoa Framework.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/175/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=175&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2008/11/21/traditional-skills-are-still-needed-in-software-development/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>
	</item>
		<item>
		<title>VendAsta Technology is an All You Can Eat Buffet.</title>
		<link>http://lostinloc.com/2008/10/24/vendasta-technology-is-an-all-you-can-eat-buffet/</link>
		<comments>http://lostinloc.com/2008/10/24/vendasta-technology-is-an-all-you-can-eat-buffet/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 18:57:23 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[FBML]]></category>
		<category><![CDATA[BigTable]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://lostinloc.wordpress.com/?p=170</guid>
		<description><![CDATA[This week marked my first week on a new project at VendAsta.  For the past 7 years I&#8217;ve spent my professional life awash a sea of .NET technologies.  Web? ASP.NET.  Desktop?  Win32 &#38; WPF.  SOA? SOAP &#38; WCF.  And so on and so forth.  That all came to an end this past Monday when I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=170&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>This week marked my first week on a new project at <a href="http://www.vendasta.com">VendAsta</a>.  For the past 7 years I&#8217;ve spent my professional life awash a sea of .NET technologies.  Web? <a href="http://www.asp.net/">ASP.NET</a>.  Desktop?  Win32 &amp; <a href="http://msdn.microsoft.com/en-us/netframework/aa663326.aspx">WPF</a>.  SOA? <a href="http://www.w3.org/TR/soap/">SOAP</a> &amp; <a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx">WCF</a>.  And so on and so forth.  That all came to an end this past Monday when I transitioned away from our .NET project and started work (or training, rather) on our own spin up application.</p>
<p>Excited?  Indeed.  But that overhwelming sense of &#8220;oh man, what have I gotten myself into&#8221; has been red-lining for 5 days.  Reason?  I have literally a dozen technologies that I need to learn&#8230; and they&#8217;re adding all the time.  Currently, this is the list of technologies I need to learn:</p>
<ul>
<li>Google App Engine</li>
<li>BigTable (or is it DataStore now?)</li>
<li>Django</li>
<li>jQuery</li>
<li>Python</li>
<li>YUI (Yahoo! User Interface)</li>
<li>FBML (Facebook Markup Language)</li>
<li>Facebook API</li>
<li>CSS (Yea, it&#8217;s been years and I can&#8217;t remember jack)</li>
<li>OpenID</li>
<li>OpenSocial</li>
<li>FriendConnect</li>
</ul>
<p>These are all technologies we are currently planning on using in our new application.  The list may (and likely will) change during as the requirements change, but so far this is it.  As I said, I&#8217;m pumped&#8230; but man&#8230; can I do it?  Can I manage this curve?  You know it.  Can you?  <a href="http://www.vendasta.com/careers/">Would you like to find out</a>?</p>
<p>You and all your mashups&#8230; like I&#8217;m afraid of you, Web 2.0!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/170/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=170&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2008/10/24/vendasta-technology-is-an-all-you-can-eat-buffet/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>
	</item>
		<item>
		<title>TV On The Radio&#8217;s &#8220;Dear Science,&#8221; Makes Me Pee My Pants.</title>
		<link>http://lostinloc.com/2008/10/10/tv-on-the-radios-dear-science-makes-me-pee-my-pants/</link>
		<comments>http://lostinloc.com/2008/10/10/tv-on-the-radios-dear-science-makes-me-pee-my-pants/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 15:02:32 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Hijinx]]></category>
		<category><![CDATA[TV On The Radio]]></category>

		<guid isPermaLink="false">http://lostinloc.wordpress.com/?p=129</guid>
		<description><![CDATA[My entire life I&#8217;ve been heavily into music.  At the age of 4 I enrolled into the obligatory call-to-childhood by taking group organ lessons.  These lessons displeased me, but it started me down the path of a life rich in musical tapestry.  I took private piano lessons for 14 years following the group organ lessons. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=129&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>My entire life I&#8217;ve been heavily into music.  At the age of 4 I enrolled into the obligatory call-to-childhood by taking group organ lessons.  These lessons displeased me, but it started me down the path of a life rich in musical tapestry.  I took private piano lessons for 14 years following the group organ lessons.  I took 10 years of private saxophone lessons.  2 years of private vocal lessons.  I performed in several musicals, started my formal post-secondary education as a drama major, and have purchased my record collection twice thanks to a rather expensive break-in of my car when I was 20.  I&#8217;ve often told people that, given the unfortunate choice, I&#8217;d rather be blind than deaf.  I wouldn&#8217;t even hesitate.  I can bear not golfing or driving again, never judging my own body again, and never having to see another Internet shock site again, but never hear music again?  Never hear the rhythms of nature, the humming of a street light, or another TV On The Radio album again?  I&#8217;d rather die.</p>
<p>I will admit, however, that I am no life time achievement award when it comes to music appreciation.  At the two years leading up to the turn of the millenium, when boy bands were at their peak and rock music was debatably at its lowest point in probably 40 years (yes, even lower than the disco era), I gave up on music.  I stopped listening.  I stopped buying.  I stopped reading and searching.  I lost the will to seek.  And then something interesting happened.  An 18 year old kid from the US named Sean Parker, over the course of a few weeks, decided to make the international music industry as we know it completely, 100% obsolete.  A kid, who didn&#8217;t know a thing about programming, taught himself C++ and wrote the infamous Napster &#8211; a product that allowed me to start finding music again.</p>
<p>However, while Napster was great, and while it introduced me to a lot of great bands, it wasn&#8217;t delivering anything completely earth shattering in the context of new bands.  Napster allowed me to find the bands that I knew about, but it was no substitution for finding new bands I&#8217;d never, ever heard of before (well, this isn&#8217;t entirely true, I found a lot of new bands, but the crap-to-awesome ratio was way outta whack &#8211; the process was not very efficient).  Only reading and fingering through various zines and papers could do that.  But it was Napster that got me interested enough to dedicate time out of my week to finger the various zines and papers.</p>
<div id="attachment_132" class="wp-caption alignleft" style="width: 210px"><a href="http://lostinloc.files.wordpress.com/2008/09/albumart_d0491180-b699-4191-b8cb-a75eed9e6972_large.jpg"><img class="size-full wp-image-132" title="Young_Liars_Cover" src="http://lostinloc.files.wordpress.com/2008/09/albumart_d0491180-b699-4191-b8cb-a75eed9e6972_large.jpg?w=200&#038;h=197" alt="Young Liars EP over" width="200" height="197" /></a><p class="wp-caption-text">Young Liars EP</p></div>
<p>Come 2003.  While fingering various zines and papers, I come across a review for an EP by a band called TV On The Radio.  I sample them, and in 30 seconds flat I&#8217;m completely hooked.  TOTR&#8217;s <em>Young Liars</em> EP is still, to this day, one of the best EP&#8217;s I&#8217;ve ever heard.  For being only 5 songs it&#8217;s rich, deep, complex, compelling.  It&#8217;s 22 minutes (!) of highly compelling and engaging music.  It starts off with deep bass, harmonious vocals, and a shock of &#8220;Holy Crap! This is Awesome!&#8221;.  It finishes with a 4 minute a cappella version of The Pixies&#8217; <em>Mr. Grieves</em>.  It was my favourite thing in my collection in 2003.</p>
<p>The interesting part of all this is that TV On The Radio didn&#8217;t have any albums out at the time.  This EP was their first and only published work.  When was their full length LP going to be released?  Unfortunately for those that heard the EP (over, and over, and over, and over again), it would be at least a year until TOTR finally released their debut LP.  For a year there was speculation, anxiety, hopefulness that they wouldn&#8217;t blunder and show the world that <em>Young Liars</em> was just a fluke.</p>
<div id="attachment_163" class="wp-caption alignright" style="width: 210px"><a href="http://lostinloc.files.wordpress.com/2008/10/g23238lsvew.jpg"><img class="size-full wp-image-163" title="Desperate Youth, Blood Thirsty Babes" src="http://lostinloc.files.wordpress.com/2008/10/g23238lsvew.jpg?w=200&#038;h=203" alt="" width="200" height="203" /></a><p class="wp-caption-text">Desperate Youth, Blood Thirsty Babes</p></div>
<p>The 2004 release of &#8220;Desperate<em> Youth, Blood Thirsty Babes</em>&#8221; was successful in proving that <em>Young Liars</em> was not a fluke, but 100% intentional.  The album announces itself again with deep driving bass, distorted and muffled drum machines, and a &#8220;HERE WE ARE!&#8221; horn section.  The lead off track also cements TOTR&#8217;s schtick of complex vocal arrangements.  It quickly becomes clear to the listener that <em>Young Liars</em> was just a sample of what the band could do.  Layers, layers, and more layers.</p>
<p>Not only does TOTR prove their creative and musical spirits on this album, they also show they&#8217;re masters of atmosphere.  TOTR have no problem creating scenery in their songs.  They&#8217;ll make you <em>feel</em> the song, not just hear it.  From anxiety to rambunctiousness, loneliness to love, the album has a knack for making you feel a whole lot of your past.</p>
<div id="attachment_164" class="wp-caption alignleft" style="width: 210px"><a href="http://lostinloc.files.wordpress.com/2008/10/h37585wf0fd.jpg"><img class="size-full wp-image-164" title="Return to Cookie Mountain" src="http://lostinloc.files.wordpress.com/2008/10/h37585wf0fd.jpg?w=200&#038;h=197" alt="" width="200" height="197" /></a><p class="wp-caption-text">Return to Cookie Mountain</p></div>
<p>In 2006, and in typical deep bass fashion, TOTR impaled the masses with their second LP, <em>Return to Cookie Mountain</em>.  With enormous critical success the album built up from TOTR&#8217;s foundation of deep base and harmonious melodies by incorporating a lot more white noise and a lot more looping.  But each song is almost in its own genre.  <em>Hours</em> is like a bunch of Swirling Dirbies listening to neo-psych rock (at least that&#8217;s the image it conjures for me). <em>Province </em>is like the childhood song from your youth, with a blazing hot son setting over the lake while you, 3 years old, run around naked on the beach.  <em>Wolfs Like Me</em> bring TOTR back to solid, driving fashion after the minature tour de senses.  The album continues from there, exploring different sounds and rocking your ass.</p>
<div id="attachment_165" class="wp-caption alignright" style="width: 210px"><a href="http://lostinloc.files.wordpress.com/2008/10/l67702cr6v8.jpg"><img class="size-full wp-image-165" title="Dear Science, " src="http://lostinloc.files.wordpress.com/2008/10/l67702cr6v8.jpg?w=200&#038;h=178" alt="Dear Science," width="200" height="178" /></a><p class="wp-caption-text">Dear Science,</p></div>
<p>And like the precise clockwork you would expect from an expert watchsmith, in 2008 TOTR releases their third album, <em>Dear Science,</em> a surprisingly upbeat and, dare I say, happy album.  Of course the album starts with a rich, deep bass, followed by some of the happiest (if not simple) scatting I&#8217;ve ever heard.  We&#8217;re talking teenager scatting.  The album explore&#8217;s hiphop (in the most frantic use of the word), soul, funk, and syphonic rock (without all the cliche symphony).  This is, of course, all on top of the foundation built on the previous albums.</p>
<p>Remember the first time you got drunk, and you were like &#8220;Oh my Gosh, this is weird!&#8221;?  And then remember the second time you got drunk you were too excited so you over did it and said &#8220;Oh my Gosh, this is terrible!&#8221;?  And then the third time your were more refined and had a better idea on how to pace yourself?  That&#8217;s TOTR&#8217;s third album.  It&#8217;s definitely the most mature of their three and a half albums.  The refined quality runs the risk of it having the least amount of replay value of their collection, but it&#8217;s still beautiful, atmospheric, and heavily textured.  It&#8217;s still amazing.  It&#8217;s still TV On The Radio, and it&#8217;s still going to make you sit up and take notice.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=129&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2008/10/10/tv-on-the-radios-dear-science-makes-me-pee-my-pants/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>

		<media:content url="http://lostinloc.files.wordpress.com/2008/09/albumart_d0491180-b699-4191-b8cb-a75eed9e6972_large.jpg" medium="image">
			<media:title type="html">Young_Liars_Cover</media:title>
		</media:content>

		<media:content url="http://lostinloc.files.wordpress.com/2008/10/g23238lsvew.jpg" medium="image">
			<media:title type="html">Desperate Youth, Blood Thirsty Babes</media:title>
		</media:content>

		<media:content url="http://lostinloc.files.wordpress.com/2008/10/h37585wf0fd.jpg" medium="image">
			<media:title type="html">Return to Cookie Mountain</media:title>
		</media:content>

		<media:content url="http://lostinloc.files.wordpress.com/2008/10/l67702cr6v8.jpg" medium="image">
			<media:title type="html">Dear Science, </media:title>
		</media:content>
	</item>
		<item>
		<title>Lets Create an Interface!</title>
		<link>http://lostinloc.com/2008/10/06/lets-create-an-interface/</link>
		<comments>http://lostinloc.com/2008/10/06/lets-create-an-interface/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 23:18:47 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Hijinx]]></category>
		<category><![CDATA[CSI]]></category>
		<category><![CDATA[Product Placement]]></category>

		<guid isPermaLink="false">http://lostinloc.wordpress.com/?p=159</guid>
		<description><![CDATA[I stopped watching CSI a long time ago. As soon as they started franchising that show into every possible different CSI parallel I quickly lost all interest. I always thought that CSI Miami, with Mr. Carusso leading the charge with his hands firmly on his hips displaying his incredibly calm, cool and collected physical prowess, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=159&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I stopped watching CSI a long time ago.  As soon as they started franchising that show into every possible different CSI parallel I quickly lost all interest.  I always thought that CSI Miami, with Mr. Carusso leading the charge with his hands firmly on his hips displaying his incredibly calm, cool and collected physical prowess, was the worst of the bunch.  However, the sunglass wielding hands on hips pre-commercial suspenseful climax was out done recently by Gary Sinise and his squad of super computer hackers, as seen below.</p>
<p><span style="text-align:center; display: block;"><a href="http://lostinloc.com/2008/10/06/lets-create-an-interface/"><img src="http://img.youtube.com/vi/Ni_rAamVP2s/2.jpg" alt="" /></a></span></p>
<p>Wow.</p>
<p>&#8220;I&#8217;ll create a GUI interface using of dead tree bark and a pack of wrigley&#8217;s chewing gum, see if I can track an IP address!&#8221;</p>
<p>&#8220;I&#8217;ll create a GUI interface using the back of a &#8217;57 chevy and a couple of dead lumberjacks, see if I can track an IP address!&#8221;</p>
<p>&#8220;I&#8217;ll create a GUI interface out of the remaining tape scraps of all those terrible Seinfeld meets Gates commercials and a couple of white tigers, see if I can track an IP address!&#8221;</p>
<p>This has to be one of the worst written product placements I&#8217;ve ever seen&#8230; It&#8217;s almost incoherent.  It&#8217;s right up there with a Season 2(?) episode of Alias when, at the start of a high-paced car chase, our faithful heroine yells &#8220;Quick!  Get in the Ford F150!&#8221;, followed by a extreme closeup of the Ford logo as they peel out of the parking garage.</p>
<p>What can <em>you</em> make a GUI interface out of?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/159/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=159&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2008/10/06/lets-create-an-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>

		<media:content url="http://img.youtube.com/vi/Ni_rAamVP2s/2.jpg" medium="image" />
	</item>
		<item>
		<title>Customer Service Is Your Cheapest and Most Potent Weapon</title>
		<link>http://lostinloc.com/2008/10/02/customer-service-is-your-cheapest-and-most-potent-weapon/</link>
		<comments>http://lostinloc.com/2008/10/02/customer-service-is-your-cheapest-and-most-potent-weapon/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 19:43:35 +0000</pubDate>
		<dc:creator>Ryan Baldwin</dc:creator>
				<category><![CDATA[Corporate Philosophy]]></category>
		<category><![CDATA[Music]]></category>
		<category><![CDATA[VendAsta]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Community Radio]]></category>
		<category><![CDATA[KCRW]]></category>

		<guid isPermaLink="false">http://lostinloc.wordpress.com/?p=155</guid>
		<description><![CDATA[Companies compete to get your business. Go figure. They may compete on feature sets, trends, loyalty, any number of things. But the cheapest and most potent way to compete is on Customer Service. Customer service is King &#8211; it&#8217;s what will keep the customers loyal; it&#8217;s how your customers will give you the benefit of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=155&subd=lostinloc&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Companies compete to get your business.  Go figure.  They may compete on feature sets, trends, loyalty, any number of things.  But the cheapest and most potent way to compete is on Customer Service.  Customer service is King &#8211; it&#8217;s what will keep the customers loyal; it&#8217;s how your customers will give you the benefit of the doubt when you have a mediocre release; it helps your customers focus more on your brand.   Customer Service is where it&#8217;s at, and I think we can take a cue from non-profit organizations.</p>
<p>I used to have a radio show with <a href="http://www.cfcr.ca" target="_blank">CFCR</a> in Saskatoon, Canada.  CFCR is a non-profit, community owned and operated radio station.  It&#8217;s fan-freakin-tastic.  Twice a year they have big fund raising drives that last anywhere from 2 &#8211; 4 weeks.  The first drive is in September/October, and is a straight up &#8220;Please donate money&#8221; drive.  The second drive is a membership drive they have every spring.  The combined income between these two fund raising drives creates about 65% of the station&#8217;s income (the last 35% coming from ads for local businesses that take place at the top and bottom of every hour).  By donating your hard earned cash you would receive a tiered swag bag of stuff depending on the size of your donation, and you&#8217;d also be put into grand prize draws, etc.  It was enough to get you interested, keep you listening, and feel good about donating some bucks.</p>
<p>In LA, California there exists another non-profit community radio station, <a href="http://www.kcrw.org" target="_blank">KCRW</a>.  Now I&#8217;ve never lived in LA, and I&#8217;ve never actually heard KCRW using an actual radio, but I do listen to them daily via <a href="http://www.kcrw.com/media-player/mediaPlayer2.html?type=live&amp;id=kcrwmusic" target="_blank">their online streaming audio</a> (you can also find them in iTunes Radio under Alternative -&gt; KCRW Music).  About a month ago I made a donation to KCRW and received a free (awesome) mug.  Again, much like CFCR that was enough to keep me listening, interested, and thinking about my favourite radio station.  </p>
<p>But a funny thing happened.  Today I received an email from the staff of KCRW in reply to <a href="http://lostinloc.com/2008/09/30/kcrw-floats-my-boat-rocks-my-socks-and-chugs-my-mugs/" target="_blank">my previous post about my KCRW mug</a>.  The email was a huge thank you for writing some kind words about KCRW.  An exchange of emails flowed over lunch.  And it&#8217;s for this reason why I&#8217;m already starting to think about how I can not only donate to KCRW next year, but how I can pledge <em>more</em>.</p>
<p>KCRW went out of their way to contact me out of <em>nowhere</em> to say <em>thank you</em>.  But not &#8220;thanks for your pledge&#8221;, not &#8220;thanks for your support&#8221; or &#8220;thank you for listening&#8221;, but &#8220;thank you for saying such kind words.&#8221;  That&#8217;s enormous.  That one, simple email transformed KCRW from some faceless (yet awesome) community radio station in another country into actual people that are affected by what I do and not do.  That email gave me a connection to the insides of the business and it allowed me to get past the dollars and cents and product, and start focusing on the people and the relationship I have with those people.</p>
<p>That email cost KCRW approximately 20 seconds in time and nothing more.  The result is that I&#8217;m actually thinking about putting money aside every month to become one of their <a href="http://legacy.kcrw.com/join/angels.html" target="_blank">KCRW Angels</a>.</p>
<p>Now, I don&#8217;t think my response to their email is typical (in fact, it might be construed as borderline creepy), but it&#8217;s a reaction that plenty of businesses can have with their customer base by taking a small amount of time and connecting with their customer base on an honest, straight forward level.  If you engage your customer base, the customer base will engage you, and the payback potential is enormous.  </p>
<p>Today&#8217;s exercise in customer service motivates me to not just create bigger and better software products, but to be engaged with my customers as I do it.  To be forthright, honest, and appreciative of their feedback in a true and genuine sense.  How can we leverage today&#8217;s technologies such as Twitter and blogging to truly connect with our customer base &#8211; I mean really connect, not just publicize a product road map.  I think the secret is to have really unpolished news and statements, interviews, free-flowing dialog from developers, etc.  Let the customer in on the ground floor, let them see the nitty gritty (without giving away your trade secrets).  Sure, this will give your competition insight as well, but who cares?  Focus on your customer first, your product second, and you&#8217;ll make so much money you won&#8217;t even remember who your competition is.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/lostinloc.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/lostinloc.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/lostinloc.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/lostinloc.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/lostinloc.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/lostinloc.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/lostinloc.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/lostinloc.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/lostinloc.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/lostinloc.wordpress.com/155/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=lostinloc.com&blog=2761323&post=155&subd=lostinloc&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://lostinloc.com/2008/10/02/customer-service-is-your-cheapest-and-most-potent-weapon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a854d795540020edb376fb29a262e9bc?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Ryan Baldwin</media:title>
		</media:content>
	</item>
	</channel>
</rss>