<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>No Droids Allowed</title>
	<atom:link href="http://www.nodroidsallowed.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nodroidsallowed.com</link>
	<description>Practical techniques for raising a well-adjusted database</description>
	<lastBuildDate>Wed, 09 Jun 2010 17:49:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Everything Old is New Again</title>
		<link>http://www.nodroidsallowed.com/2010/06/09/everything-old-is-new-again/</link>
		<comments>http://www.nodroidsallowed.com/2010/06/09/everything-old-is-new-again/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 17:49:52 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[beginner]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=197</guid>
		<description><![CDATA[It seems trite but it&#8217;s important to consider how technology enables things in ways that you can&#8217;t predict.  Back in my TSN days I had an idea for a game that would be played during a sporting event.  Since most of fantasy sports takes place before or after the event, it made sense [...]]]></description>
			<content:encoded><![CDATA[<p>It seems trite but it&#8217;s important to consider how technology enables things in ways that you can&#8217;t predict.  Back in my TSN days I had an idea for a game that would be played during a sporting event.  Since most of fantasy sports takes place before or after the event, it made sense that someone would try to fill that gap.</p>
<p>The problem was that I envisioned it as a web-based game because there was no such thing as an iPhone back then.  Turns out a web-based game that you play while watching a sporting event on your television at home isn&#8217;t that appealing to people.  Especially if it&#8217;s a NASCAR game (because at the time there were questions about whether MLB would win the CDM case).  But with with the advent of the iPhone that no longer sounds insane.  As a matter of fact it kinda sounds interesting again.  If you had a very lightweight game mechanic (think predictive questions) and some fun side-effects, you could probably make a decent fantasy game out of just that.  Food for thought.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2010/06/09/everything-old-is-new-again/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tips for those Applying to Founder Institute</title>
		<link>http://www.nodroidsallowed.com/2010/03/02/tips-for-those-applying-to-founders-institute/</link>
		<comments>http://www.nodroidsallowed.com/2010/03/02/tips-for-those-applying-to-founders-institute/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 19:49:48 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=184</guid>
		<description><![CDATA[I thought I'd write a little bit about what I've learned to help others get the most out of the experience.  Some of these are practical, some of these are just things to keep in mind as you progress through the semester.]]></description>
			<content:encoded><![CDATA[<p>As I mentioned previously I&#8217;ve been involved in the Winter 2009 semester of the <a href="http://founderinstitute.com">Founder Institute</a> in NYC.  I thought I&#8217;d write a little bit about what I&#8217;ve learned to help others get the most out of the experience.  Some of these are practical, some of these are just things to keep in mind as you progress through the semester.  In no particular order&#8230;.</p>
<ul>
<li><b>You&#8217;ll get the most out of it if you have an idea of what you want to do before you start</b>.  To its credit, the Institute will accept you if you don&#8217;t have an idea, but to some degree I think this is giving people just enough rope to hang themselves given the aggressive nature of the curriculum.  The fact of the matter is that those of us who got the most out of the Founder Institute came in already pretty much knowing what we wanted to do and spent a lot of time tuning and focusing it.  Yes, the first couple of sessions will be about how to develop an idea, how to research the opportunity, etc.  I found the information to be very useful, but more in a &#8220;good to know for next time&#8221; way.  It&#8217;s really hard to keep up with the later sessions if you spend the first 3 or 4 weeks vetting 5 different ideas.</li>
<li>Therefore, getting in is about you as a founder, not your idea.  <b>But staying in is about how well you execute on your idea.</b> Don&#8217;t forget that you are expected to have an incorporated company with a real business model and a real plan for success at the end of this.  It&#8217;s not as easy as it looks.</li>
<li><b>Actively seek out those who will challenge your assumptions sooner rather than later.</b>  It took me a while to realize that those who didn&#8217;t want to talk about their idea (including myself) were doing so because they didn&#8217;t want to hear the hard truth about what someone else thought.  I know it&#8217;s not easy to hear.  We&#8217;ve all convinced ourselves that whatever we&#8217;re thinking of doing can&#8217;t possibly fail and that anyone who doesn&#8217;t see it that way is wasting our time.  That&#8217;s expected.  But keeping it to yourself doesn&#8217;t prove anything.  You join this program because you want your idea to succeed. </li>
<li><b>Sign up for office hours.</b>  It&#8217;s free advice from people who have done this before and want to help you succeed.  If you&#8217;re serious about building a business there&#8217;s no excuse for passing that opportunity up.</li>
<li><b>Keep an open mind at all times.</b>  That pain you feel when someone criticizes your idea &#8211; that&#8217;s called growth.  No one&#8217;s going to plunk down a bag of cash for a clever idea.  At times someone &#8220;just won&#8217;t get it&#8221;.  When that happens you can either find a way to convince them or become defiant and disengage.  You can probably guess which one will work in your favor long term.  Take the feedback (good and bad) and get better.</li>
<li>That being said, <b>know when to take advice and when to leave it.</b>  It&#8217;s your company.  Don&#8217;t ever forget that.  It was your company before the Founder Institute.  It will be your company after the Founder Institute.  If something really matters to you, stand your ground.  Realize that you may still be wrong, but at least you learned something valuable.
<li><b>Volunteer to be president of your working group.</b>  People act like being the president of the group is like getting the plague or something.  It&#8217;s not that bad.  For the most part you&#8217;re just organizing meetings and taking notes.  Yes, there are some founders who can&#8217;t keep up and you have to find a way to motivate them.  It can be time consuming in a lot of ways, but it&#8217;s good practice and there are a number of upsides that come with the role.  I was president for the 2nd and 3rd groups and found it to be valuable.</li>
<li><b>Time is short, be ready to work.</b>  Kinda goes without saying.  There&#8217;s not a lot of time in the program and a lot to do.  If you&#8217;re going to do this right it&#8217;ll need to be a priority in your life for 3 or 4 months.  Make sure your spouse or significant other understands this as well.</li>
<li><b>Network, network, network.</b>  Get to know the other founders.  Go out for drinks after each session.  Find out about their business.  Tell them about yours.  Organize on LinkedIn.  Connect with mentors where appropriate.  These people have a stake in making sure you&#8217;re successful and you have a stake in making sure they&#8217;re successful.  A little extra effort will pay off for everyone.</li>
<li><b>The working groups can make or break your experience.</b>  A good working group can help you in more ways than you expect.  A bad working group can really tax your energy.  If things aren&#8217;t going well in your group, talk to your president.  If he or she doesn&#8217;t listen talk to your local facilitator.  Don&#8217;t let it slide.  It&#8217;s up to you to get as much value as you can out of the experience, and every week counts.</li>
<li><b>The mentors are great but aren&#8217;t everything.</b>  I came in expecting a one-on-one mentorship.  It was a bit naive.  The mentors are both successful and busy.  They are all nice, and all helpful, but don&#8217;t expect too much.  Honestly I don&#8217;t think I connected on a personal level with many of them.  Part of it is that none of them really know my space very well, and I can&#8217;t really blame them that for that.  It might speak more about my company than I want to think about.</li>
</ul>
<p>Feel free to ask questions in the comments.  If appropriate I will contact you directly via the email address you supply.  As I&#8217;m still participating in the Founder Institute I&#8217;ve tried to avoid any conclusive statements.  There&#8217;s still a lot of time left in this semester and a lot has changed even since my last post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2010/03/02/tips-for-those-applying-to-founders-institute/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Digital Cameras and Wheels</title>
		<link>http://www.nodroidsallowed.com/2010/02/09/on-digital-cameras-and-wheels/</link>
		<comments>http://www.nodroidsallowed.com/2010/02/09/on-digital-cameras-and-wheels/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 16:28:13 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[beginner]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=181</guid>
		<description><![CDATA[Wheels were important, and a lot of things can be done with a wheel, but history truly took a turn when someone strapped a motor to 4 of them and made a car. ]]></description>
			<content:encoded><![CDATA[<p>We recently bought my mother a digital photo frame for her birthday.  The product itself was really nice &#8211; connect via USB, WiFi, flash cards, etc.  Shows pictures, plays movies, plays music.  Perfect gift for a tech-savvy mom who has a growing family.</p>
<p>But the real star of the show was actually <a href="http://picasa.google.com/">Picasa</a>.  If you don&#8217;t know, recent versions of Picasa will actually scan faces in your photos and present them to you so you can provide names.  It does the hard work, and you can coach it along by accepting its suggestions or providing a correction.  It then indexes your images so that you can find all images with Aunt Sally, or all images with your brother *and* Aunt Sally.</p>
<p>With this it became trivial to preload my mom&#8217;s digital photo frame with family photos.  Go through the index for reach family member and copy over some memorable shots.  Easy and amazing.</p>
<p>I know it&#8217;s not new, and I know Google didn&#8217;t do it alone, but this seems to me to be a major milestone for the digital era.  Wheels were important, and a lot of things can be done with a wheel, but history truly took a turn when someone strapped a motor to 4 of them and made a car.  I feel the same way about digital cameras now.  Important, but the dawn of facial recognition on the desktop makes this something else.  I can only imagine what comes next.  I&#8217;m sure someone out there has been spending a lot of time on exactly that.  I can&#8217;t wait to see it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2010/02/09/on-digital-cameras-and-wheels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Founder&#8217;s Institute NYC Winter 2009</title>
		<link>http://www.nodroidsallowed.com/2010/01/04/founders-institute-nyc-winter-2009/</link>
		<comments>http://www.nodroidsallowed.com/2010/01/04/founders-institute-nyc-winter-2009/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 17:24:45 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[background]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=178</guid>
		<description><![CDATA[For the past month I've been involved in the Founder's Institute NYC Winter 2009 program]]></description>
			<content:encoded><![CDATA[<p>For the past month I&#8217;ve been involved in the <a href="http://founderinstitute.com/">Founder&#8217;s Institute NYC Winter 2009</a> program.  The program&#8217;s aim is to train founders in the art of building a business so they can avoid common missteps and give them a better shot at being successful.  There are about 40 founders in the NY session, representing a good cross section of industries and skill sets.</p>
<p>I haven&#8217;t written much about it yet because I wasn&#8217;t sure what to say.  The process of applying and getting accepted was incredibly condensed and emotional (read: delusions of grandeur).  As those hopes and dreams slowly adjust back to reality I&#8217;m seeing both the good and the bad.  It&#8217;s mostly good, but not entirely.  One thing I struggled with going in was what I expected to get out of it.  I spoke to other founders informally about that question and the answers varied widely.  My initial impression was that no one really new what to expect.  That can be both a challenge and and opportunity.</p>
<p>I&#8217;m reserving final word for later &#8211; there&#8217;s a long time to go and many things could change &#8211; but so far I think the experience has been helpful in a number of ways, both intended and unintended.  One of the first things Adeo Ressi said was that Founder&#8217;s Institute is not going to make or break my business.  It will give me some tools that will help, but it&#8217;s still up to me.  I think that&#8217;s very valuable advice and something I have to keep in mind as I go through process.  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2010/01/04/founders-institute-nyc-winter-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rackspace Email Hosting vs. Google Apps</title>
		<link>http://www.nodroidsallowed.com/2009/12/29/rackspace-email-hosting-vs-google-apps/</link>
		<comments>http://www.nodroidsallowed.com/2009/12/29/rackspace-email-hosting-vs-google-apps/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 18:04:38 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=171</guid>
		<description><![CDATA[Today I discovered that Rackspace has an email hosting solution competitor to Google Apps for your domain]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d been using <a href="http://www.google.com/apps/">Google Apps</a> for receiving emails sent to my domain up until an hour ago.  As I&#8217;ve mentioned before, I&#8217;m running my app on <a href="http://www.slicehost.com/">Slicehost</a>, and as usual they had some <a href="http://articles.slicehost.com/2007/10/25/creating-mx-records-for-google-apps">great instructions for using Google Apps for your email needs</a>.</p>
<p>That was working kinda ok but there were a couple of things that annoy me about that solution.  First is that I just don&#8217;t want Google involved in every single thing I do online.  I generally trust them, but there are some things I don&#8217;t want to use them for, namely anything to do with my business (I don&#8217;t use Google Analytics either).  The second is that I think it&#8217;s highway robbery to pay $50 per user per year for the premier account.  I only need 2 right now, but down the line I might need more.  I didn&#8217;t relish the thought of giving them $300 or $400 a year to provide a beefed up version of their free tools.</p>
<p>So today I discovered that <a href="http://www.rackspace.com/email_hosting/rackspace_email">Rackspace has an email hosting solution</a> as well.  And if you&#8217;re a Slicehost customer and need 3 or fewer inboxes (that me!) it&#8217;s only $3/month.  The normal starter package&#8217;s price is $10/month for up to 10 inboxes, which is still totally reasonable.  So in less than an hour I converted from Google Apps to Rackspace Email Hosting.  And of course they have the usual <a href="http://articles.slicehost.com/2009/11/4/creating-mx-records-for-rackspace-email-apps">helpful configuration instructions</a> to get you started.</p>
<p>I have a couple of concerns that I&#8217;ll follow up on in future posts.  The first is that according to the representative I chatted with there&#8217;s a limit of about 200 outgoing emails per hour.  I think that&#8217;s going to be ok for my app, but I guess I&#8217;ll see.  The other is that I&#8217;m pretty useless with mail configuration things and I&#8217;m a little nervous about how much effort will be involved in connecting my local postfix to their smtp server for outgoing email.  I&#8217;m sure I&#8217;ll figure that out eventually though.</p>
<p>In any case, for $3/month, moving back to Google won&#8217;t be a huge issue if it should come to that.  Hopefully it won&#8217;t.  I&#8217;ve already gotten a few small tastes of the fanatical support from Rackspace and I have to say it&#8217;s pretty nice so far.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2009/12/29/rackspace-email-hosting-vs-google-apps/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Over-engineering is like Snoring</title>
		<link>http://www.nodroidsallowed.com/2009/11/24/over-engineering-is-like-snoring/</link>
		<comments>http://www.nodroidsallowed.com/2009/11/24/over-engineering-is-like-snoring/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 14:47:12 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[intermediate]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=165</guid>
		<description><![CDATA[It would seem that there is an army of righteous developers fighting against the demons of over-engineering and maximum complexity.  And despite our valiant battles, despite all the books and blog posts and rallying calls from respected technology professionals, the demons are still churning out bloated, impossible to maintain code. ]]></description>
			<content:encoded><![CDATA[<p>A lot of developer cycles are spent discussing the benefits of <a href=http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it>YAGNI</a> and <a href=http://en.wikipedia.org/wiki/KISS_principle>KISS</a>.  On the surface it would seem that there is an army of righteous developers fighting against the demons of over-engineering and maximum complexity.  And despite our valiant battles, despite all the books and blog posts and rallying calls from respected technology professionals, the demons are still churning out bloated, impossible to maintain code. </p>
<p>I’ll let you in on a little secret.   We are the enemy.  Not just the guy who sits next to you, or the guy that churned out mess of code and then left the company.  You are the problem.  I am the problem.  The enemy is us.</p>
<p>Yes, we can all agree in principle that complexity is bad and simplicity is good.  The problem is that complexity is completely subjective.  Maybe you misjudge or were misinformed about how likely it is that a certain feature will be needed.  Maybe you thought of some brilliant solution and you want to leave it as a placeholder in case you need to come back to it later (or so others can see how clever you are).  Maybe you don’t want to do it the cheap way because you’re afraid others will snicker at your solution.  Maybe you’re afraid a simple solution will lead to longer development times later on.  Maybe your definition of simplicity is skewed.  Whatever the case, no one sets out to over-complicate a piece of code.  And yet it happens time and time again.</p>
<p>There are rules of thumb that can be followed.  But what it boils down to is always discipline.  It’s not easy to simplify.  It sometimes feels wrong.  But I’ve never looked at working code and cursed because it was too simple.  I’m not even sure it’s possible for working code to be too simple.  But it sure as hell easy for it to be too complex.</p>
<p>So why is over-engineering is like snoring?  Because no one thinks they do it.  And yet somehow there is a market for snoring relief aides.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2009/11/24/over-engineering-is-like-snoring/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adventures in SSL &#8211; Part II: Integration Strategy</title>
		<link>http://www.nodroidsallowed.com/2009/11/11/adventures-in-ssl-part-ii-integration-strategy/</link>
		<comments>http://www.nodroidsallowed.com/2009/11/11/adventures-in-ssl-part-ii-integration-strategy/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 14:14:44 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[intermediate]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=154</guid>
		<description><![CDATA[Having and installing the certificate is a little different than using it.  This post will focus on how I integrated the certificate into the site and what additional nginx configuration I had to make to support that strategy.]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://www.nodroidsallowed.com/2009/09/11/adventures-in-ssl-part-i-shopping-around/">first post about SSL integration on my site</a>, I discussed how I came to a decision about a certificate issuer.  I chose <a href="http://www.digicert.com/">DigiCert</a>, and have been very happy with them.  One great bonus was their <a href="http://www.digicert.com/ssl-certificate-installation.htm">extensive list of instructions</a> for setting up the certs on almost any web server known to man.  So even though Part II of this series was intended to be about installation, I think DigiCert has that covered.  <a href="http://www.digicert.com/ssl-certificate-installation-nginx.htm">Their instructions for nginx</a> were spot on, so I wouldn&#8217;t be able to add anything meaningful to them anyway.</p>
<p>But buying and installing the certificate is a little different than using it.  This post will focus on how I integrated the certificate into the site and what additional <a href="http://nginx.net/">nginx</a> configuration I had to make to support that strategy.</p>
<p>After kicking it around for a while I realized I really have 2 options.  I can either convert the entire site to use https or convert as few pages as possible (e.g. just the login and register pages).  The argument for a limited use of https is that all else being equal, the web server will require a little more CPU to encrypt/decrypt the https traffic.  This is apparently an issue particularly with nginx as even the creator has said it can drag down performance for high-traffic sites.  Since I&#8217;m not expecting Amazon-level traffic, this wasn&#8217;t as big a deal to me.</p>
<p>Another argument for limiting the use of https is that some low-cost CDNs, such as <a href="http://aws.amazon.com/cloudfront/">Amazon CouldFront</a>, don&#8217;t support https traffic.  This was a concern for me.  I will eventually want to move my images, screencasts, stylesheets, and JS files to a CDN, so the fewer https pages I have the less of an issue this would be.</p>
<p>Related to this, some posts I read claimed that browsers will refuse to cache images, CSS, and scripts if they came across https.  In my testing with <a href="http://www.charlesproxy.com/">Charles</a> in Firefox and IE on Windows I <strong>did not</strong> experience that.  In other words, any files that could be cached by the brower were cached.  Yes, it was a limited test, but it covers a lot of the target base of my app.  I believe either this used to be the case and no longer is or it&#8217;s one of those old wive&#8217;s tales that people just assume is the case but have never really taken the time to test.</p>
<p>I saw a couple of benefits for using https for the whole site.  The first was that it simplified my application architecture.  For instance, say you have a login page that&#8217;s intended to be served over https but it includes a common header image that&#8217;s present on all pages.  That image has to also be served over https on the login page or the user will get a popup warning message that the page contains both secure and insecure content.  That message is at least annoying if not scary to some users, so it&#8217;s best to avoid it by ensuring that the image is served up via https.  But that means you may have a situation where you have 2 copies of that image so that it can be served up by both https and http.  Or your configuration might become more complex in order to support 2 virtual servers pointing at the same image file on disk.  Either way it&#8217;s a complicating factor that I wasn&#8217;t thrilled about wasting time on.  If the entire site is served over https this issue goes away.</p>
<p>Secondly, it would be easier to configure than having only some pages be served via https.  For instance, let&#8217;s say the login page is https.  If someone asks for that page via http, the server should be nice and redirect them to https.  But for almost all other pages it should allow regular http requests to process normally.  These exceptions are easy to handle for one or two pages, but for more than a couple that quickly becomes difficult to manage effectively.</p>
<p>Lastly, my application is targeted at kids in the 10 to 15 years old range.  For me, the more security the better.  As with any site that relies on cookies to identify logged in users, it&#8217;s theoretically possible to hijack someone&#8217;s session via the cookie value, and if that were to happen it would lead to some seriously bad press for me.  Again, if the entire site is accessed over https this issue goes away.</p>
<p>So as you can probably guess, I decided to serve the entire site over https.  The big question I haven&#8217;t answered here is what effects this had on performance.  I&#8217;ll discuss that the final installment in this series.  But for those also using nginx, below is an excerpt of the config changes I made to support this.  It should be self-explanatory, but leave me a comment if you need any help through it.</p>
<div class="ddl">
<pre>

# non-secure site - send all requests to https
server {

        server_name www.mysite.com mysite.com;
        listen 80;

        location / {
           rewrite ^/(.*)$ https://www.mysite.com/$1 permanent;
        }
}

# secure site
server {

        server_name www.mysite.com mysite.com;

        listen 443;
        ssl on;
        ssl_certificate /path/to/pem/file;
        ssl_certificate_key /path/to/key/file;
        .....
}
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2009/11/11/adventures-in-ssl-part-ii-integration-strategy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Double-Decker Train Conductor Problem</title>
		<link>http://www.nodroidsallowed.com/2009/11/05/the-double-decker-train-conductor-problem/</link>
		<comments>http://www.nodroidsallowed.com/2009/11/05/the-double-decker-train-conductor-problem/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 04:40:52 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[beginner]]></category>
		<category><![CDATA[pattern]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=147</guid>
		<description><![CDATA[One of the things I love about being a software developer is the fractal nature of our work.  When we design a system we are almost always taking some piece of the universe and attempting to turn it into a model that can run inside a computer.]]></description>
			<content:encoded><![CDATA[<p>One of the things I love about being a software developer is the fractal nature of our work.  When we design a system we are almost always taking some piece of the universe and attempting to deconstruct it and model it so that it can run inside a computer.  Examples of good (or bad) design are all around us, and our work demands that we draw on these examples to create a working piece of software.  And software itself is nothing more than a bunch of bits and registers and some electricity that&#8217;s pretending to be more than the sum of its parts.</p>
<p>So I found myself reading <a href="http://www.amazon.com/Coders-at-Work-Peter-Seibel/dp/1430219483">Coders at Work</a> on the 8:06 train the other day.  I don&#8217;t usually catch the 8:06.  The 8:06 is a double-decker train.  And watching the conductor come through to collect our tickets I realized he represented a real-world example of a mutex.</p>
<p>This day there was only 1 conductor for both levels of the double-decker.  It dawned on me that it would be very easy for someone to avoid having to pay by hanging out in the upper level and waiting for the conductor to collect the tickets from the lower level, then sneaking down to the lower level while the conductor moves to the upper level.  </p>
<p>The lone conductor represented a flawed algorithm.  There was no lock on the resource (exit door = I/O stream?).  Adding another conductor could solve the leakage problem and lock the resource.  But that would limit (or serialize) the free flow of passengers to and from the car.</p>
<p>I could probably go on exaggerating this example for while but I think you probably get the point.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2009/11/05/the-double-decker-train-conductor-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook Status Updates and Infinite Session Keys</title>
		<link>http://www.nodroidsallowed.com/2009/10/09/facebook-status-updates-and-infinite-session-keys/</link>
		<comments>http://www.nodroidsallowed.com/2009/10/09/facebook-status-updates-and-infinite-session-keys/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 15:22:11 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[intermediate]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=139</guid>
		<description><![CDATA[All these claims that bajillions of people are creating Facebook apps and not a single one of them that are updating a user’s status offline can document it?  ARRRGGG!]]></description>
			<content:encoded><![CDATA[<p>Anyone have the first clue as to why Facebook’s developer documentation sucks so hard?</p>
<p>I was developing a simple Facebook application for one of my company’s clients that required me to update a user’s status via a scheduled background process.  <a href="http://wiki.developers.facebook.com/index.php/Authorizing_Applications#About_Session_Keys">The developer documentation</a> lead me down all kinds of paths by referencing infinite session keys and the &#8220;keep me logged in&#8221; check box.  So I scoured the internets for some examples, only to find that there aren’t many.  All these claims that bajillions of people are creating Facebook apps and not a single one of them that are updating a user’s status offline can document it?  ARRRGGG!</p>
<p>So, here is what I hope will save someone else a ton of time – a real life, working code sample for updating a user’s Facebook status offline.  Careful – make no sudden moves or you might scare this rare beast back into hiding.</p>
<p>Our app is requesting two <a href="http://wiki.developers.facebook.com/index.php/Extended_permissions">extended permissions</a> &#8211; &#8220;offline_access&#8221; and &#8220;status_update&#8221;.  This is also using <a href="http://www.haughin.com/code/facebook/">Elliot Haughin’s Facebook plugin</a> for <a href="http://codeigniter.com/">CodeIgniter</a>.  Elliot&#8217;s package includes an older version of the <a href="http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz">Facebook PHP Library</a>, so I had to grab the latest version from Facebook and drop it in place.  Other than that it was easy to integrate this into my app.</p>
<div class="ddl">
<pre>
//http://wiki.developers.facebook.com/index.php/Users.hasAppPermission
//must be one of:
//   email, read_stream, publish_stream, offline_access, status_update, photo_upload,
//   create_event, rsvp_event, sms, video_upload, create_note, share_item
if( $this->facebook_connect->client->users_hasAppPermission("offline_access", $fbUID) &#038;&#038;
    $this->facebook_connect->client->users_hasAppPermission("status_update", $fbUID) ){
    $this->facebook_connect->client->users_setStatus("some status message", $fbUID);
}
</pre>
</div>
<p>Seriously, that’s it!  All those posts, all that searching – for 3 lines of code!  The key point that was conveniently left out of other articles is that there is no &#8220;session key&#8221; required now.  Facebook is smart enough to know that the user granted the app permission for offline_access and status_update, so you only need to send the user’s Facebook ID.  Moley.</p>
<p>Another annoyance.  They make a big deal out of the fact that <a href="http://wiki.developers.facebook.com/index.php/API">they provide a REST-ful interface</a>, but none of the <a href="http://wiki.developers.facebook.com/index.php/Users.setStatus">examples in their documentation</a> show the format of the REST request (although they do at least provide the <a href="http://api.facebook.com/restserver.php">REST server URL</a> and a handy hint to include the &#8220;Content-Type: application/x-www-form-urlencoded&#8221; header).  Yes, I get it, you want me to use the PHP Library, which is nicely designed.  But for quick and dirty testing I like to whip up some <a href="http://curl.haxx.se/">curl</a> commands.  If I don’t know how to format the XML I can’t easily do that.  Bah!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2009/10/09/facebook-status-updates-and-infinite-session-keys/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>NULL is NOT a valid state</title>
		<link>http://www.nodroidsallowed.com/2009/10/02/null-is-not-a-valid-state/</link>
		<comments>http://www.nodroidsallowed.com/2009/10/02/null-is-not-a-valid-state/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 02:09:24 +0000</pubDate>
		<dc:creator>vdibart</dc:creator>
				<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://www.nodroidsallowed.com/?p=133</guid>
		<description><![CDATA[I'm amazed at the amount of code that I see that contains uninitialized variables.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m amazed at the amount of code that I see that contains uninitialized variables.  I can&#8217;t think of a bigger bang-for-the-buck habit you can fall into than taking an extra 2 seconds to properly initialize whatever variable you&#8217;ve created.  Look, I know a lot of ORM layers use NULL variables as a flag to insert/select/update null values.  I get it.  I don&#8217;t love it, but I get it.  Other than that, I can&#8217;t think of a single reason to not initialize your variables.  Unless you love NullPointerExceptions, or security exploits, or constantly having to check for null before you call a method on an object you just got back, or who know whatever else people have done to themselves because they were to lazy to add &#8221; = 0;&#8221; after their variable declarations.  Coding is hard enough as it is.  This just makes it harder.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nodroidsallowed.com/2009/10/02/null-is-not-a-valid-state/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.300 seconds -->
