<?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>Nick O&#039;Neill &#187; Programming</title>
	<atom:link href="http://nickoneill.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://nickoneill.com</link>
	<description>My personal ramblings on entrepreneurship and online publishing.</description>
	<lastBuildDate>Tue, 07 Feb 2012 17:46:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Twitter Bootstrap Themes Are Coming</title>
		<link>http://nickoneill.com/twitter-bootstrap-themes-2012-02/</link>
		<comments>http://nickoneill.com/twitter-bootstrap-themes-2012-02/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 18:28:19 +0000</pubDate>
		<dc:creator>Nick O'Neill</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[Themes]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://nickoneill.com/?p=1317</guid>
		<description><![CDATA[There's no doubt that Twitter Bootstrap themes will become a popular service for developers around the globe. ]]></description>
			<content:encoded><![CDATA[<p><img src="http://nickoneill.com/wordpress/wp-content/uploads/twitter-bootstrap-icon.png" alt="" title="Twitter Bootstrap Icon" width="300" height="200" class="alignright size-full wp-image-1318" />Twitter Bootstrap, a framework for quickly developing front-end web interfaces, has permanently changed the way web applications are built.  Not surprisingly, in the few months that Bootstrap has been available, it has risen to become the most popular repository on Github of all-time.  As such, it&#8217;s only expected that a cottage industry is about to emerge from this: <em>twitter bootstrap themes</em>.</p>
<h2>How It Will Happen</h2>
<p>Yesterday while grabbing coffee, <a href='https://twitter.com/#!/pm' target='_blank'>Paul McKellar</a>, entrepreneur in residence at SVAngel, presented a great idea when I brought up the concept of Twitter bootstrap themes: serving up CSS files on a per-request basis.  It&#8217;s a model that <a href='https://typekit.com/plans' target='_blank'>Typekit has been using</a> for a while now: charge people based on the number of pageviews they get to their site.  It&#8217;s a significant contrast to WordPress Themes which have historically been priced on a per theme basis.</p>
<p>Clearly WordPress themes have a much greater audience: millions of people use wordpress to power their blogging activity.  However there are countless startups that are using Twitter Bootstrap as a quick way to get up and running without having to wait on a design team.  Take <a href='http://www.swole.me/' target='_blank'>Swole.me</a> as an example.  I found them through Twitter last night and immediately recognized the design.  If you want to know other sites that leverage <a href='http://twitter.github.com/bootstrap/' target='_blank'>Twitter Bootstrap</a>, you can check out <a href='http://builtwithbootstrap.com/' target='_blank'>this blog</a> which is dedicated to covering all the sites built with the framework.</p>
<p>By charging on a pageview basis, theme creators could quickly start generating revenue without much risk to the developers who simply want to get ideas out there.  Obviously there&#8217;s always the opportunity to charge a flat-fee, but this market is not yet as large as wordpress.  I wouldn&#8217;t be surprised if it became just as large though: developers and hobbyists are the ones responsible for the success of WordPress.</p>
<p>The market is definitely similar: people who want to quickly get a nice-looking site up and running without a lot of configuration.  Granted, Bootstrap doesn&#8217;t exactly have a powerful back-end to power their system but that&#8217;s also the beauty of the product.  With the rapid adoption of Twitter Bootstrap, I&#8217;m willing to make a significant wager that we&#8217;ll see a emergence of a cottage industry built around Twitter Bootstrap themes.  </p>
]]></content:encoded>
			<wfw:commentRss>http://nickoneill.com/twitter-bootstrap-themes-2012-02/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming For Android Sucks</title>
		<link>http://nickoneill.com/programming-for-android-sucks-2011-12/</link>
		<comments>http://nickoneill.com/programming-for-android-sucks-2011-12/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 21:57:00 +0000</pubDate>
		<dc:creator>Nick O'Neill</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://nickoneill.com/?p=1142</guid>
		<description><![CDATA[What platform has weak documentation, a virtual simulator that takes minutes to load, and takes three times as long to program for? That's right: Android.]]></description>
			<content:encoded><![CDATA[<p>What platform has <del datetime="2011-12-08T21:53:08+00:00">crappy</del> weak documentation, a virtual simulator that takes minutes to load, and takes three times as long to program for? That&#8217;s right: Android.  The discussion that has flared up following Eric Schmidt&#8217;s conversation at Le Web yesterday is an important one as it&#8217;s a conversation that is occurring within startups around the world.</p>
<p>If you&#8217;re a new mobile startup, your primary desire will be to deliver a service that works on both Apple devices and Android devices.  Unfortunately, this is unrealistic from a cost perspective.  The first version you release probably won&#8217;t be successful and the last thing you want to be doing is iterating on multiple platforms simultaneously.  Yet just about every person you meet will more than likely have a phone powered by the opposite platform than the one you built for.  That&#8217;s just the way it goes.</p>
<p>With a larger audience than iOS, there&#8217;s no doubt that building for Android is insanely compelling.  While developers may not enjoy building on Android (and may even be <a href='http://daringfireball.net/linked/2011/12/07/schmidt' target='_blank'>insulted by Schmidt&#8217;s statements on the matter</a>), the business potential is too great to ignore.  Developers are still ignoring it though.  Why? Programming for Apple is awesome.</p>
<p>My own experience with building on iPhone was great.  In general you can pretty much build an app and it will run across multiple versions of iOS with few modifications.  Additionally, the documentation provided by Apple is incredibly thorough.  Given that all great programmers are lazy by nature, Apple&#8217;s general consistency across platforms makes programming a joy.  With Android, you are going to have to make exceptions for the numerous types of phones out in the market (the fragmentation problem).  </p>
<p>Developers can complain all they want though. If you&#8217;re a funded startup building a consumer application, you are going to have to build an Android app at some point.  Yes, Instagram has built an iPhone-only community.  There are also plenty of others that are exclusive to iOS.  Bootstrapped companies will always be forced to go one route and for now, iPhone still provides a compelling route.  But if you are working for a well-funded company, there&#8217;s pretty much no option: Android is a requirement.</p>
<p>Hopefully Google gets their act together and can make a platform which provides a more pleasant experience for developers.  Otherwise there will continue to be a love-hate relationship between developers and Android.  </p>
]]></content:encoded>
			<wfw:commentRss>http://nickoneill.com/programming-for-android-sucks-2011-12/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hey MongoDB Haters: The Problem Isn&#8217;t Mongo, It&#8217;s You</title>
		<link>http://nickoneill.com/hey-mongodb-haters-the-problem-isnt-mongo-its-you-2011-11/</link>
		<comments>http://nickoneill.com/hey-mongodb-haters-the-problem-isnt-mongo-its-you-2011-11/#comments</comments>
		<pubDate>Mon, 07 Nov 2011 18:04:51 +0000</pubDate>
		<dc:creator>Nick O'Neill</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Databases]]></category>
		<category><![CDATA[Engineering]]></category>
		<category><![CDATA[MongoDB]]></category>

		<guid isPermaLink="false">http://nickoneill.com/?p=1079</guid>
		<description><![CDATA[I spent the weekend reading over all the conversations on Hacker News (effectively summarized in this post) about how MongoDB had failed this one company, and all the follow-on conversation about why or why not to use Mongo as a database solution. Fortunately there are often some very rational people in the comments on Hacker [...]]]></description>
			<content:encoded><![CDATA[<p>I spent the weekend reading over all the conversations on Hacker News (effectively <a href='http://luigimontanez.com/2011/mongodb-2.0-should-have-been-1.0/' target='_blank'>summarized in this post</a>) about how MongoDB had failed this one company, and all the follow-on conversation about why or why not to use Mongo as a database solution.  Fortunately there are often some very rational people in the comments on Hacker News, but I feel like there is one key takeaway: developers and engineers will always be overcoming challenges no matter what system they select.  Each system comes with its own set of problems, some developers just like bitching about those problems more than others <img src='http://nickoneill.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Unfortunately for most developers, your application will never get to the size where picking one database over the other will even matter.  At Holler.com I went with MongoDB because a couple friends recommended it and it was relatively easy to code for.  I also like their approach to structuring data as opposed to the standard MySQL way that I&#8217;ve been using for 10 years.  Will it have problems at some point?  I hope so!  I also hope that we have a team in place who can react to and appropriately resolve the problems (also hopefully prevent problems before they occur).</p>
<p>If you decide to select a data store that is not yet proven, there&#8217;s a good chance you are going to face some serious hurdles as your system expands.  The biggest problem that you&#8217;ll face is the lack of documentation surrounding the problem as not as many people have overcome the hurdles of scaling with some of the newer NoSQL solutions.  Five years ago developers started going over how to effectively scale MySQL and now it has become common sense: how to shard, use master/slave setups, etc.  There are even books on the topic.  </p>
<p>The problem for many developers and pretty much all companies, is that there is typically a lack of resources to tackle a problem.  When the developer ignores the warning signs that things will eventually fail because the business wants to keep adding features (as it sounds was the case with the anonymous MongoDB hater this weekend), it&#8217;s pretty much guaranteed that problems will ensue.  The data gets corrupted, servers go down, all hell breaks loose <img src='http://nickoneill.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  It&#8217;s really the job of intelligent engineers to figure out how to solve these problems and more importantly how to avoid as many of them as possible.</p>
<p>The most intelligently designed systems fail at some point, the key however is figuring out how to avoid having failures bring entire systems down.  Fortunately most people programming MongoDB are not developing commercial aircraft, and having a DB get corrupted is not really the end of the world (or somebody&#8217;s life).  There&#8217;s a <a href='http://techblog.netflix.com/2010/12/5-lessons-weve-learned-using-aws.html' target='_blank'>blog post by Netflix</a> that has been re-shared numerous times over the years because of their strategy of killing systems at random and it illustrates a great engineering solution to less reliable systems:</p>
<blockquote><p>
We’ve sometimes referred to the Netflix software architecture in AWS as our Rambo Architecture. Each system has to be able to succeed, no matter what, even all on its own. We’re designing each distributed system to expect and tolerate failure from other systems on which it depends.</p>
<p>If our recommendations system is down, we degrade the quality of our responses to our customers, but we still respond. We’ll show popular titles instead of personalized picks. If our search system is intolerably slow, streaming should still work perfectly fine.</p>
<p>One of the first systems our engineers built in AWS is called the Chaos Monkey. The Chaos Monkey’s job is to randomly kill instances and services within our architecture. If we aren’t constantly testing our ability to succeed despite failure, then it isn’t likely to work when it matters most – in the event of an unexpected outage.
</p></blockquote>
<p>Yes, systems break, but in theory, the whole system won&#8217;t go down.  However their engineers have tested the systems and have figured out how to generate reliability on an unreliable platform.  At the end of the day it&#8217;s not about the database you chose alone, but instead effectively building a reliable system based on the technologies you happened to choose to accomplish the job.  </p>
<p>In my personal experience, MongoDB has been great and using a service like <a href='http://mongohq.com/' target='_blank'>MongoHQ</a> has meant that I can focus less on operations and spent my time building our app.  While our system isn&#8217;t 100% fault tolerant since I&#8217;m the only person programming right now, offloading much of the operations to outside services has made my life a whole lot easier.  When the time comes to solve the problems of scaling, I will be ready to tackle the problem along with any other engineers who are on our team at that time!</p>
<p>As for which database you select for your own startup, my own theory is that picking one with a sizable community is always the way to go.  That way you have people available who have probably faced the same challenges you have whenever you face them.  MongoDB happens to have a very active community which is why adoption continues to grow.  MySQL and other SQL solutions also continue to have large communities as well.</p>
<p>No matter what you build though, you&#8217;re definitely going to run into problems just like those who have been complaining about MongoDB.  With newer technologies you&#8217;ll probably face more problems but it doesn&#8217;t mean they&#8217;re bad solutions.  It&#8217;s your job to work around them and help make your entire system more reliable!!</p>
]]></content:encoded>
			<wfw:commentRss>http://nickoneill.com/hey-mongodb-haters-the-problem-isnt-mongo-its-you-2011-11/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How To Setup A New Mac For PHP Web Development</title>
		<link>http://nickoneill.com/mac-php-development-2011-09/</link>
		<comments>http://nickoneill.com/mac-php-development-2011-09/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 16:00:54 +0000</pubDate>
		<dc:creator>Nick O'Neill</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://nickoneill.com/?p=1019</guid>
		<description><![CDATA[A complete guide on how to get your macbook configured for php development.]]></description>
			<content:encoded><![CDATA[<p>Inspired by <a href='http://37signals.com/svn/posts/2998-setting-up-a-new-machine-for-ruby-development' target='_blank'>37 Signals post</a> on how to set up a new laptop for Ruby development, I thought it would be worthwhile sharing how I configure my own laptop in preparation for development.  It&#8217;s a process I had to go through over the past 48 hours as I was forced to wipe my entire hard drive when installing the new Mac OSX Lion.  </p>
<p>My current project, <a href='http://holler.com'>Holler.com</a>, has been built entirely by me with the help of a front-end web developer (<a href='http://www.johannesma.com/' target='_blank'>Johannes Ma</a>) who cutup the creative director&#8217;s (<a href='http://twitter.com/dannpetty' target='_blank'>Dann Petty</a>) PSD files.  The project has a back-end in PHP, a Mongo database currently hosted with <a href='http://mongohq.com' target='_blank'>MongoHQ</a>, an iPhone app, Git for source control, <a href='https://github.com/capistrano/capistrano/wiki/' target='_blank'>Capistrano</a> for automated deployment, <a href='http://www.pubnub.com/' target='_blank'>Pubnub</a> for real-time messaging, <a href='http://urbanairship.com/' target='_blank'>UrbanAirship</a> for push notifications, and <a href='http://indextank.com/' target='_blank'>IndexTank</a> for search indexing.  </p>
<p>I decided to offload most of everything to third-parties because I don&#8217;t want to be responsible for managing multiple moving parts once the app is live.  That&#8217;s a business decision, not a computer science decision.  It will be interesting to see how that decision plays out.  While I&#8217;ll go into more detail about Holler in a future post, I figured I&#8217;d walk any developer readers through a quick overview of how I set up my laptop.</p>
<ul>
<li><em>Install dropbox</em> &#8211; Aside from local development projects that I simply sync through github, dropbox stores all of my files.  I need to have this installed to get up and running.  The only downside is that it can take upwards of 24 hours for my files to get downloaded when first installed.  You could probably run a local backup if you wanted to accelerate this step, but then why would I have dropbox in the first place?</li>
<li><em>Install Solarized theme</em> &#8211; I like pretty colors.  That&#8217;s why I use the <a href='http://ethanschoonover.com/solarized' target='_blank'>Solarized theme</a> in the Mac terminal and in textmate.</li>
<li><em>Enable Super User</em> &#8211; Apparently Apple turns off the ability to run the <em>sudo</em>/<em>su</em> command in the terminal by default.  As such you have to manually turn it on.  Here&#8217;s a <a href='http://support.apple.com/kb/ht1528' target='_blank'>relatively recent how to article</a> in the Apple knowledge base.  If you are running Lion, the command sequence is slightly different but you can just look it up in the help area after opening &#8220;System Preferences&#8221; and clicking on &#8220;Users &amp; Groups&#8221;.</li>
<li><em>Set up apache</em> &#8211; While it sounds like <a href='http://pow.cx/' target='_blank'>Pow</a>, the app originally linked to in the 37Signals post, is useful for ruby developers, I&#8217;m still using PHP (I know, old school!).  Maybe one day I&#8217;ll make the jump, but in the meantime, I&#8217;m using good-ole apache for running my apps.  This process entails <a href='http://foundationphp.com/tutorials/vhosts_leopard.php' target='_blank'>editing your local hosts file, turning on virtual host support</a>, uncommenting the php module and virtual host support in httpd.conf, setting AllowOverride to All (<a href='http://blog.enunes.org/2008/09/how-to-enable-htaccess-in-mac-os-x-105.html' target='_blank'>to support .htaccess files</a>), and restarting apache.  Pretty quick if you know your way around apache.</li>
<li><a href='http://help.github.com/mac-set-up-git/' target='_blank'>Install and configure git</a></li>
<li><em>Get Textmate</em> &#8211; I use <em>vi</em> for all my terminal-based editing, however I prefer doing most of my web development in Textmate.  After using XCode&#8217;s comprehensive IDE, I have to say that most text editors are feeling pretty pretty weak now.</li>
<li><em>Install Photoshop and XCode</em> &#8211; I use photoshop for all photo editing and XCode for all my iPhone development stuff.</li>
<li><em>Install macports</em> &#8211; I actually don&#8217;t use macports for much but it helps the mongodb install process a lot easier.  I like having a local db set up when doing my development.  If I was using MySQL I&#8217;d install that as well.</li>
<li><em>Install mongodb</em> &#8211; Now that macports is installed I install <a href='http://www.mongodb.org/display/DOCS/Building+for+OS+X' target='_blank'>all the required packages</a> before installing mongodb with <em>sudo port install mongodb</em>.</li>
<li><em>Install pear</em> &#8211; I have a few pear modules installed, including the mongodb driver for PHP so <a href='http://clickontyler.com/blog/2008/01/how-to-install-pear-in-mac-os-x-leopard/' target='_blank'>I install that</a>.  Also, remember that you need to add mongo to the php.ini file by adding the line <em>extension=mongo.so</em>.</li>
<li><em>Install mbstring</em> &#8211; I&#8217;m personally a big fan of the mbstring module for all my foreign character related stuff.  While I&#8217;m sure there&#8217;s a more efficient way of handling unicode stuff, mbstring has worked brilliantly for all my past projects.</li>
</ul>
<p>Once I&#8217;m done with those steps, I have pretty much got my entire development environment up and running!  Now all that&#8217;s left is imagination and persistence to building the next great thing (as long as you want it to be powered by PHP <img src='http://nickoneill.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> )  Have any tips on setting things up or tool that make your life easier?  Feel free to post those in the comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://nickoneill.com/mac-php-development-2011-09/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

