<?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>berbs.us &#187; Web Development</title>
	<atom:link href="http://berbs.us/tag/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://berbs.us</link>
	<description>a blog by jason berberich</description>
	<lastBuildDate>Fri, 30 Jul 2010 20:00:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Getting Stuck on Tools</title>
		<link>http://berbs.us/2008/06/getting-stuck-on-tools/</link>
		<comments>http://berbs.us/2008/06/getting-stuck-on-tools/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 23:10:00 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Freelance]]></category>
		<category><![CDATA[Movable Type]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2008/06/getting-stuck-on-tools/</guid>
		<description><![CDATA[I have a confession to make. When I start a new work or freelance project, I often become obsessed with the search to find the perfect tool to help me get the job done. For some reason, I love the process of researching, testing, and comparing software and web applications and I jump at the [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2007/06/movable-type-4-vs-wordpress-22/' rel='bookmark' title='Permanent Link: Movable Type 4 vs WordPress 2.2'>Movable Type 4 vs WordPress 2.2</a></li>
<li><a href='http://berbs.us/2006/07/kickin-the-tires-on-drupal/' rel='bookmark' title='Permanent Link: Kick’in the Tires on Drupal'>Kick’in the Tires on Drupal</a></li>
<li><a href='http://berbs.us/2006/09/modx-a-different-kind-of-php-cms/' rel='bookmark' title='Permanent Link: MODx: A Different Kind of PHP CMS'>MODx: A Different Kind of PHP CMS</a></li>
<li><a href='http://berbs.us/2005/08/website-redesign-phase-ii/' rel='bookmark' title='Permanent Link: Website Redesign: Phase II'>Website Redesign: Phase II</a></li>
<li><a href='http://berbs.us/2005/08/playing-with-movable-type-32-beta-4/' rel='bookmark' title='Permanent Link: Playing With Movable Type 3.2 Beta 4'>Playing With Movable Type 3.2 Beta 4</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a rel="nofollow" href="http://www.flickr.com/photos/28481088@N00/1577594077/" ><img class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" src="http://farm3.static.flickr.com/2379/1577594077_bf7f230e9b_m.jpg" alt="Uploaded to Flickr by tanakawho" width="191" height="240" /></a></p>

<p>I have a confession to make. When I start a new work or freelance project, I often become obsessed with the search to find the <em>perfect</em> tool to help me get the job done. For some reason, I <strong>love</strong> the process of researching, testing, and comparing software and web applications and I jump at the chance to learn, explore, and experiment. I know it benefits me in the long run, but it can be quite time consuming and wasteful at the time. And to be completely honest, it’s one of my favorite and most justifiable ways to procrastinate.</p>

<h3>An Example</h3>

<p>So I’ve got a business idea I’ve been kicking around for awhile that I finally want to start working on. I’ll need to have a website up and running eventually, but there are <em>plenty</em> of more important things that need to get done in the mean time. Still, I find myself drawn to the search for what <em>might</em> be the best content management system (CMS) for my <em>perceived</em> needs. Here’s a rundown of some of the packages and tools I’ve considered, and why.</p>

<ul>
    <li><strong><a href="http://wordpress.org/" >WordPress</a></strong>: I considered WordPress briefly, as it is a really great blogging platform. It’s got basic CMS capabilities for managing a site, but not enough flexibility for what I’m thinking of doing.</li>
    <li><strong><a href="http://movabletype.org/" >Movable Type</a></strong>: I’ve got years of experience with Movable Type, since I use it to manage the back end of this blog, as well as a couple others. Movable Type 4 introduced some really good CMS features, so this one is a real contender.</li>
    <li><strong><a href="http://modxcms.com/" >MODx</a></strong>: I use MODx to manage a couple of websites at work, and while I was <a href="http://berbs.us/2006/09/modx-a-different-kind-of-php-cms/" >initially very excited</a> about it, I grew tired of installing plug-ins and hacking PHP code to get things to work the way I wanted. While I know this one is capable, it’s not high up on my list.</li>
    <li><strong><a href="http://expressionengine.com/" >ExpressionEngine</a></strong>: Years ago I used an older version of ExpressionEngine to manage my church’s website. The site was a mess behind the scenes, something I partially attributed to EE’s design, but I know realize I simply didn’t know what I was doing. Based on PHP and MySQL, it’s both a strong blogging engine and content management system. It’s also the only commercial software on my list that charges for a license.</li>
    <li><strong><a href="http://www.typolight.org/" >TYPOlight</a></strong>: This one came up during my search, but I haven’t really invested much time looking at its details. It looks promising though.</li>
    <li><strong><a href="http://drupal.org/" >Drupal</a></strong>: Drupal seems to be <strong>the</strong> heavyweight PHP-based CMS. It has tons of features and is very extensible, but seems to have a big learning curve.</li>
    <li><strong><a href="http://www.djangoproject.com/" >Django</a></strong>: I’ve even considered building my site’s back end myself using a popular web development framework called Django. I’ve been wanting to learn the <a href="http://python.org/" >Python</a> programming language for some time now, and this would give me the perfect excuse. And since Django was initially built to manage the <a href="http://www2.ljworld.com/" >Lawrence Journal-World</a> website, I’m sure I could get it to do pretty much whatever I want — at least after I teach myself Python and how the framework itself works…</li>
    <li><strong><a href="http://rubyonrails.org/" >Ruby on Rails</a></strong>: I’ve built a couple of web applications using the Ruby on Rails development framework, so the though of using it for my site has also briefly crossed my mind. Deployment is still painful compared to PHP or Python applications though, so I haven’t given it serious thought.</li>
</ul>

<h3>The Point?</h3>

<p>My point is that it’s often easier to us (me) to <em>feel</em> like we’re (I’m) making progress on a project by diving into a fun but trivial part of it instead of doing the real and hard work. In my case, while my business website’s <strong>content</strong> will be extremely important in influencing potential customers to go with me instead of someone else, the <strong>content management system</strong> will have little bearing on how many customers I’ll get and how much money I’ll make.</p>

<p>Sure, I can make an argument that a framework like Django or Rails will give me maximum flexibility in workflow and integration with 3rd party tools and services, and that it’ll give me a competitive advantage. It’s not the <em>core</em> of my business idea though, so the more time I spend on peripheral activities means less time I have for real business development.</p>

<p>Still, I think it’s a very grey area. Researching and trying content management systems, billing and invoice apps, and wikis isn’t the same as writing copy for the website or doing marketing, but it’s still a hell of a lot more productive than reading <a rel="nofollow" href="http://digg.com" >digg</a> or RSS feeds on Google Reader. That’s how I justify it, anyway.</p>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2007/06/movable-type-4-vs-wordpress-22/' rel='bookmark' title='Permanent Link: Movable Type 4 vs WordPress 2.2'>Movable Type 4 vs WordPress 2.2</a></li>
<li><a href='http://berbs.us/2006/07/kickin-the-tires-on-drupal/' rel='bookmark' title='Permanent Link: Kick’in the Tires on Drupal'>Kick’in the Tires on Drupal</a></li>
<li><a href='http://berbs.us/2006/09/modx-a-different-kind-of-php-cms/' rel='bookmark' title='Permanent Link: MODx: A Different Kind of PHP CMS'>MODx: A Different Kind of PHP CMS</a></li>
<li><a href='http://berbs.us/2005/08/website-redesign-phase-ii/' rel='bookmark' title='Permanent Link: Website Redesign: Phase II'>Website Redesign: Phase II</a></li>
<li><a href='http://berbs.us/2005/08/playing-with-movable-type-32-beta-4/' rel='bookmark' title='Permanent Link: Playing With Movable Type 3.2 Beta 4'>Playing With Movable Type 3.2 Beta 4</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2008/06/getting-stuck-on-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google App Engine: Embrace the Constraints</title>
		<link>http://berbs.us/2008/04/google-app-engine-embrace-the-constraints/</link>
		<comments>http://berbs.us/2008/04/google-app-engine-embrace-the-constraints/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 17:00:00 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2008/04/google-app-engine-embrace-the-constraints/</guid>
		<description><![CDATA[Google made a big announcement Monday night that has the web development community talking. They announced and released a preview version of App Engine, a set of tools that lets you quickly build web applications and deploy them to Google’s infrastructure for instant scalability. I want to talk a bit about why it is important [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2006/10/tip-of-the-day-customize-your-google-homepage/' rel='bookmark' title='Permanent Link: Tip of the Day: Customize Your Google Homepage'>Tip of the Day: Customize Your Google Homepage</a></li>
<li><a href='http://berbs.us/2008/02/book-review-the-big-switch-rewiring-the-world-from-edison-to-google/' rel='bookmark' title='Permanent Link: Book Review — The Big Switch: Rewiring the World, from Edison to Google'>Book Review — The Big Switch: Rewiring the World, from Edison to Google</a></li>
<li><a href='http://berbs.us/2004/09/a9-the-new-google-rival/' rel='bookmark' title='Permanent Link: A9 — The New Google Rival'>A9 — The New Google Rival</a></li>
<li><a href='http://berbs.us/2009/12/google-public-dns-fud/' rel='bookmark' title='Permanent Link: Google Public DNS and FUD'>Google Public DNS and FUD</a></li>
<li><a href='http://berbs.us/2007/04/my-thoughts-on-google-web-history/' rel='bookmark' title='Permanent Link: My Thoughts on Google Web History'>My Thoughts on Google Web History</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" src="http://media.berbs.us/images/google-appengine.gif" alt="Google App Engine" width="272" height="80" /></span>
Google made a big announcement Monday night that has the web development community talking. They announced and released a preview version of <a rel="nofollow" href="http://code.google.com/appengine/" >App Engine</a>, a set of tools that lets you quickly build web applications and deploy them to Google’s infrastructure for <strong>instant</strong> scalability. I want to talk a bit about why it is important to web entrepreneurs, and why Amazon’s web services division doesn’t need to be worried — <em>yet</em>.</p>

<p><span id="more-398"></span></p>

<h3>What the Google App Engine Is (In Plain English)</h3>

<p>At its core, App Engine a limited, public interface to the technologies Google uses to power most of its web applications, including search, Gmail, and Google Maps, and many others. These technologies include the <a rel="nofollow" href="http://labs.google.com/papers/gfs.html" >Google File System</a> and <a rel="nofollow" href="http://labs.google.com/papers/bigtable.html" >Bigtable</a>, the company’s home-grown software that allows their products to run reliably across thousands of distributed computers for millions of users. In other words, App Engine lets <em>you</em> use Google’s hardware and software to create web applications that can <em>seamlessly</em> handle a handful of users one day and <strong>millions</strong> the next.</p>

<p>It you’re not familiar with web application development, you might not understand the difficulty in getting a program to <em>scale</em> —  to perform as well under high loads as it does with just a few users. Because web apps are usually developed on a single machine, deploying and running a production version to one server is extremely easy. It’s when you need to start adding more hardware resources — web servers, database servers, load balancers, etc. — that things start getting complicated and costly. It’s doable, for sure — just look at popular sites like Facebook, Youtube, Myspace, and Google itself. But, it requires a lot of expertise and <strong>a lot</strong> of money to do things right. For these reasons, web start-ups wisely hold-off on optimizing their applications until the demand is actually there. <a href="http://www.twitter.com" >Twitter</a>, facing <em>constant</em> scaling problems over the last year, is a <a href="http://highscalability.com/scaling-twitter-making-twitter-10000-percent-faster" >perfect case study</a>. So, to developers, App Engine means they don’t need to worry about these scaling problems — <strong>at all</strong>.</p>

<h3>It’s All About the Constraints</h3>

<p>The way Google’s distributed infrastructure and App Engine are designed creates some pretty strict constraints for applications running on them. This automatically rules out a bunch of programs that are simply too complex to run on it — mainly ones that require access to the operating system and those that need processes to run independent of users’ interaction with the web app (think scheduled tasks, long running scripts, etc.). The High Scalability blog has <a href="http://highscalability.com/google-appengine-first-look" >an excellent overview of the technical side of App Engine</a>:</p>

<blockquote>Everything that could have tied you to a machine is tossed. No disk access, no threads, no sockets, no root, no system calls, no nothing but service based access. Services are king because they are easily made scalable by load balancing and other tricks of the trade that are easily turned behind the scenes, without any application awareness or involvement.
…
What isn’t scalable about AppEngine is the scalability of the complexity of the applications you can build. It’s a simple request response system. I didn’t notice a cron service, for example. Since you can’t write your own services a cron service would give you an opportunity to get a little CPU time of your own to do work. To extend this notion a bit what I would like to see as an event driven state machine service that could drive web services. If email needs to be sent every hour, for example, who will invoke your service every hour so you can get the CPU to send the email? If you have a long running seven step asynchronous event driven algorithm to follow, how will you get the CPU to implement the steps? This may be Google’s intent. Or somewhere in the development cycle we may get more features of this sort. But for now it’s a serious weakness.</blockquote>

<p>On the other hand, these exact same constraints make you develop in such a way that your code can <strong>instantly</strong> go from running on a single development machine to being served from thousands of servers from Google’s farm of computers. Some developers can’t, or won’t, live with Google’s forced limitations, either out of principle, or because their application requires a more complex environment. But for the wide range of potential web apps that <em>do</em> meet the App Engine requirements, it provides a unique opportunity to launch a product without worrying about how to grow the back-end as demand increases. Google does it for you — automatically.</p>

<h3>What You Get as a Developer</h3>

<ol>
    <li><strong>A Python Application Environment</strong>: Currently, you can <em>only</em> develop and deploy apps to the App Engine that are written in the <a href="http://python.org/" >Python</a> programming language. Python is heavily used by Google for its products and internal applications, so this limitation only makes sense. There are going to be a lot of PHP developers turned away by this, but Python is a wonderful and powerful scripting language that can be picked up easily by anyone familiar with Ruby or Perl. It also means you can develop using the excellent <a href="http://www.djangoproject.com/" >Django Web framework</a> — a huge plus. Google also provides a free <a rel="nofollow" href="http://code.google.com/appengine/downloads.html" >App Engine software development kit</a> that, when downloaded and installed on your computer, <em>locally</em> simulates your app running on Google’s systems. Then, when you’re ready to deploy your application to App Engine, a single command does all of the work for you. Very slick.</li>
    <li><strong>A Secure Application Sandbox</strong>: This piece securely isolates your program from all others running on Google’s servers, and enforces the App Engine constraints by providing only limited access to the operating system. This does prevent you from calling command line scripts and other programs, but means that your app is independent of hardware, operating systems, and other typical dependencies. That means it can run as easily on 1,000 web servers as it can on one.</li>
    <li><strong>A Reliable Datastore</strong>: App Engine <a rel="nofollow" href="http://code.google.com/appengine/docs/datastore/" >provides a simple method for storing structured data</a>, which is based on Google’s <a rel="nofollow" href="http://video.google.com/videoplay?docid=7278544055668715642" >BigTable distributed storage system</a> (video link). It sacrifices many of the features of traditional relational database systems like MySQL, Microsoft SQL Server, and Oracle for speed, simplicity, and reliability. It is similar in design to <a href="http://berbs.us/2007/12/amazons-simpledb-instantly-scalable-database-delivered-as-a-service/" >Amazon’s SimpleDB</a> product, and shares many of its advantages and disadvantages.</li>
    <li><strong>Google Account Integration</strong>: App Engine makes it extremely easy to <a rel="nofollow" href="http://code.google.com/appengine/docs/users/" >use Google Account logins</a> to authenticate users to your application. You can roll your own method if you like, but this offers a quick and secure way of doing it for both the developer and end users (they won’t need to create yet another account).</li>
    <li><strong>URL Fetching and Mail Services</strong>: Much as you’d expect, the <a rel="nofollow" href="http://code.google.com/appengine/docs/mail/" >mail API</a> gives your application a way to send out email messages. The <a rel="nofollow" href="http://code.google.com/appengine/docs/urlfetch/" >URL Fetch API</a> is simple, but <em>key</em>. It’s how applications running on App Engine can consume Atom/RSS and web services from 3rd parties to extend their functionality.</li>
</ol>

<h3>Why App Engine Isn’t Amazon Web Services</h3>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" src="http://media.berbs.us/images/aws_logo.gif" alt="Amazon Web Services" width="150" height="60" /></span>
As I <em>hope</em> I’ve made clear by now, there is a certain sweet-spot of web applications that can run within the current incarnation of App Engine. The environment <em>isn’t</em> a general-purpose utility computing platform where you “rent” computing resources based on usage. On the other hand, the <a rel="nofollow" href="http://www.amazon.com/gp/browse.html?node=3435361" >Amazon Web Services</a> are <em>exactly</em> this. Each of Amazon’s services work well together, but are separate so that you can pick and choose which ones to integrate into your program. If you want a cheap way to store files, <a href="http://berbs.us/2006/08/amazon-s3-utility-computing-in-practice/" >Simple Storage Service</a> is for you. If you just need a simple way of storing structured data, you can pick-up <a href="http://berbs.us/2007/12/amazons-simpledb-instantly-scalable-database-delivered-as-a-service/" >SimpleDB</a>.</p>

<p><a href="http://berbs.us/2006/08/early-look-amazon-elastic-compute-cloud-ec2/" >Amazon’s Elastic Computing Cloud</a> service is the one that people are wanting to compare App Engine to, but that is, in fact, <em>completely</em> different. The EC2 provides a virtualized infrastructure that lets you build your environment <em>exactly</em> how you want. You upload your own Linux image, configured with the settings and applications you want. This could be a web app, but it could also be anything from transcoding audio or video files, performing scientific data analysis, or batch processing tax returns. There are absolutely no limitations to what you can or can’t do, with the one caveat that running databases on EC2 is not recommended since the server instances are transient by nature.</p>

<p>The upside to Amazon’s web services is <strong>flexibility</strong> — you can pick and choose the ones you want to use. The downside is <em>complexity</em>, particularly with the EC2 service. Sure, you have the ability to add or remove server instances on demand, but it’s <strong>your responsibility</strong> to monitor this situation and create the mechanism for automating the process. Software such as <a rel="nofollow" href="http://code.google.com/p/scalr/" >Scalr</a> can ease this burden dramatically, but I imagine there are a fair number of <em>really</em> small companies that would prefer to never have to even think about the scaling problem.</p>

<h3>Summing it Up</h3>

<p>App Engine isn’t going to be the solution every web developer is looking for, but I believe that’s actually a Good Thing. By focusing on a narrow use case and keeping things simple, Google will end up creating a better experience for developers. For developers requiring something with greater flexibility and control, the Amazon web services and other competitors remain extremely good options.</p>

<p>Also, remember that the App Engine is a <strong>preview release</strong>. That means Google wanted to get it out the door and get feedback as soon as possible. It also means that they’re willing to add or change features to meet the needs of developers. So, some of the current pain-points might be addressed in the near future.</p>

<h4>Further Reading</h4>

<ul>
    <li><a rel="nofollow" href="http://googleblog.blogspot.com/2008/04/developers-start-your-engines.html" >Developers, start your engines</a></li>
    <li><a href="http://radar.oreilly.com/archives/2008/04/app-engine-host-your-python-apps-with-google.html" >App Engine: Host Your Apps with Google</a></li>
    <li><a rel="nofollow" href="http://www.youtube.com/watch?v=3Ztr-HhWX1c" >Campfire One: Introducing Google App Engine (pt. 1)</a> (YouTube video)</li>
    <li><a rel="nofollow" href="http://www.youtube.com/watch?v=bfgO-LXGpTM" >Developing and deploying an application on Google App Engine</a> (YouTube video)</li>
    <li><a href="http://www.techcrunch.com/2008/04/07/google-jumps-head-first-into-web-services-with-google-app-engine/" >Google Jumps Head First Into Web Services With Google App Engine</a></li>
    <li><a href="http://www.readwriteweb.com/archives/google_cloud_control.php" >Google App Engine: Cloud Control to Major Tom</a></li>
    <li><a href="http://gigaom.com/2008/04/08/app-engine-competition-is-good-for-everyone/" >App Engine: Competition Is Good for Everyone</a></li>
    <li><a href="http://www.readwriteweb.com/archives/google_app_engine_history_or_monopoly.php" >Google App Engine: History’s Next Step or Monopolistic Boondoggle?</a></li>
    <li><a href="http://www.scripting.com/stories/2008/04/08/earlyNotesOnGoogleapps.html" >Early notes on GoogleApps</a></li>
    <li><a href="http://arstechnica.com/news.ars/post/20080408-analysis-google-app-engine-alluring-will-be-hard-to-escape.html" >Analysis: Google App Engine alluring, will be hard to escape</a></li>
    <li><a rel="nofollow" href="http://blogs.smugmug.com/don/2008/04/08/thoughts-on-google-appengine/" >Thoughts on Google App Engine</a></li>
</ul>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2006/10/tip-of-the-day-customize-your-google-homepage/' rel='bookmark' title='Permanent Link: Tip of the Day: Customize Your Google Homepage'>Tip of the Day: Customize Your Google Homepage</a></li>
<li><a href='http://berbs.us/2008/02/book-review-the-big-switch-rewiring-the-world-from-edison-to-google/' rel='bookmark' title='Permanent Link: Book Review — The Big Switch: Rewiring the World, from Edison to Google'>Book Review — The Big Switch: Rewiring the World, from Edison to Google</a></li>
<li><a href='http://berbs.us/2004/09/a9-the-new-google-rival/' rel='bookmark' title='Permanent Link: A9 — The New Google Rival'>A9 — The New Google Rival</a></li>
<li><a href='http://berbs.us/2009/12/google-public-dns-fud/' rel='bookmark' title='Permanent Link: Google Public DNS and FUD'>Google Public DNS and FUD</a></li>
<li><a href='http://berbs.us/2007/04/my-thoughts-on-google-web-history/' rel='bookmark' title='Permanent Link: My Thoughts on Google Web History'>My Thoughts on Google Web History</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2008/04/google-app-engine-embrace-the-constraints/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Animated Holiday Greeting from Idea to Reality in Less Than Two Weeks</title>
		<link>http://berbs.us/2007/12/an-animated-holiday-greeting-from-idea-to-reality-in-less-than-two-weeks/</link>
		<comments>http://berbs.us/2007/12/an-animated-holiday-greeting-from-idea-to-reality-in-less-than-two-weeks/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 23:40:00 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Work]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2007/12/an-animated-holiday-greeting-from-idea-to-reality-in-less-than-two-weeks/</guid>
		<description><![CDATA[I don’t think I’ve officially mentioned this on my blog before, but one of the two businesses I helped startup is a company called Greeneye e-Manifest. What we do, in a nutshell, is make very easy for Canadian trucking companies to submit an electronic manifest of what’s in their trailers, and where it’s coming from, [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2007/01/heres-an-idea-customer-service-callbacks/' rel='bookmark' title='Permanent Link: Here’s an Idea: Customer Service Callbacks'>Here’s an Idea: Customer Service Callbacks</a></li>
<li><a href='http://berbs.us/about/' rel='bookmark' title='Permanent Link: About'>About</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span class="mt-enclosure mt-enclosure-image"><img alt="Greeneye e-Manifest" src="http://media.berbs.us/images/greeneye-logo.gif" width="200" height="111" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;"/></span></p>

<p>I don’t think I’ve officially mentioned this on my blog before, but one of the two businesses I helped startup is a company called <a href="http://www.emanifest.ca/" >Greeneye e-Manifest</a>. What we do, in a nutshell, is make very easy for Canadian trucking companies to submit an electronic manifest of what’s in their trailers, and where it’s coming from, and where it’s going to. We have a website where they can create and send these documents themselves, or we’ll do it for them from a fax or a phone call.</p>

<p>So, anyway, we’ve had a pretty good year with Greeneye, and now have upwards of 750 trucking companies as customers. We wanted to send out a little thank you to each of them, but wanted to do something a little different than the traditional Christmas card. So, two weeks ago, we came up with the idea of doing a little holiday cartoon. One of our guys found an amazing Flash animator named <a href="http://www.vladkolarov.com/" >Vlad Kolarov</a> who said he’d be able to get us a finished product in less than a week. Once we got the thumbs up to go ahead from our owner, three of us had a complete storyboard for the animation drawn up on a whiteboard in less than an hour. Then, I sent a quick design spec for some promotional graphics to <a href="http://www.caseyjelinski.com/" >Casey Jelinski</a>, a freelance designer we’ve had the pleasure working with on a number of our marketing documents. After a few revisions from both Vlad and Casey, I had the final pieces in my inbox this past Monday.</p>

<p>During all of this, I worked on the landing page where this animation would live, as well as the design of the email we’d be sending out. I signed up for a great web service called <a href="http://www.mailchimp.com" >MailChimp</a> that would let us easily send out our greeting to customers while minimizing the chances of it getting treated as spam. It also produces some really nice reports that give  all sorts of stats on the number of people clicking through the email to our website. I highly recommend it.</p>

<p>After lots of testing and tweaking, I had everything finished and ready to go about 3:30am Thursday morning. MailChimp started sending out our greeting at 9:45am Thursday, and since then, it’s been fun watching the reaction. You can check it out for yourself by visiting this page: <a href="http://www.emanifest.ca/holiday/?utm_source=berbsus&amp;utm_medium=web&amp;utm_campaign=holiday" >Happy Holidays from Greeneye e-Manifest</a>.</p>

<p>This whole process highlights one of the many things I <em>love</em> about working at a small business: We had an idea, and we executed it in less time than it would take someone at a corporation to even get approval for the project. It sure helps to be working with great people and flexible freelancers!</p>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2007/01/heres-an-idea-customer-service-callbacks/' rel='bookmark' title='Permanent Link: Here’s an Idea: Customer Service Callbacks'>Here’s an Idea: Customer Service Callbacks</a></li>
<li><a href='http://berbs.us/about/' rel='bookmark' title='Permanent Link: About'>About</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2007/12/an-animated-holiday-greeting-from-idea-to-reality-in-less-than-two-weeks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Practices Through Frameworks</title>
		<link>http://berbs.us/2007/10/best-practices-through-frameworks/</link>
		<comments>http://berbs.us/2007/10/best-practices-through-frameworks/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 20:25:00 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Insights]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2007/10/best-practices-through-frameworks/</guid>
		<description><![CDATA[The increasing number of web frameworks means that design and development best practices are accessible to more people than ever before and are a sign of a maturing industry. The primary goal of most web development frameworks is to save development time. Since most programming projects share a good deal of redundant code (database connectivity, [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2006/01/web-frameworks-or-how-i-learned-to-stop-worrying-about-php-and-love-ruby/' rel='bookmark' title='Permanent Link: Web Frameworks or: How I learned to stop worrying about PHP and love Ruby'>Web Frameworks or: How I learned to stop worrying about PHP and love Ruby</a></li>
<li><a href='http://berbs.us/2006/01/swat-another-php-web-framework/' rel='bookmark' title='Permanent Link: Swat — Another PHP Web Framework'>Swat — Another PHP Web Framework</a></li>
<li><a href='http://berbs.us/2005/12/ruby-on-rails-10-goes-live/' rel='bookmark' title='Permanent Link: Ruby on Rails 1.0 Goes Live'>Ruby on Rails 1.0 Goes Live</a></li>
<li><a href='http://berbs.us/2006/01/ruby-on-rails-is-a-go/' rel='bookmark' title='Permanent Link: Ruby on Rails is a Go!'>Ruby on Rails is a Go!</a></li>
<li><a href='http://berbs.us/2008/06/getting-stuck-on-tools/' rel='bookmark' title='Permanent Link: Getting Stuck on Tools'>Getting Stuck on Tools</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The increasing number of web frameworks means that design and development best practices are accessible to more people than ever before and are a sign of a maturing industry.</p>

<p>The primary goal of most web development frameworks is to save development time. Since most programming projects share a good deal of redundant code (database connectivity, error handling, form validation and processing, etc.), that type of functionality can quite easily be extracted and put into a framework for reuse later.</p>

<p><span class="mt-enclosure mt-enclosure-image"><img alt="Ruby on Rails logo" src="http://media.berbs.us/images/rubyonrails-logo.gif" width="110" height="140" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;"/></span></p>

<p>This drastic time savings was one of the initial draws for the <a href="http://www.rubyonrails.com" >Ruby on Rails</a> framework when it started gaining popularity a few years ago. Because Rails’ was created to be “opinionated” software, the framework makes a lot of choices for you and makes a lot of other decisions really obvious. In other words, Rails makes it easy to do the “right” thing and forces you to do some extra work if you want to go against that. Developers can (and do) debate the merits of injecting opinion into software, but to me it means that I can quickly get exposed to a ton of best practices that will make me a better programmer as a result.</p>

<p>One area of web design that has only recent seen movement toward standardized frameworks is in <abbr title="Cascading Style Sheets">CSS</abbr> for web design. It turns out that if you create enough multi-column page layouts using CSS, you end up creating similar foundations for each of the design projects. That’s where new CSS frameworks like <a rel="nofollow" href="http://code.google.com/p/blueprintcss/" >Blueprint</a> can save lots of time and help to create a very stable baseline to build upon.</p>

<p><span class="mt-enclosure mt-enclosure-image"><img alt="Blueprint CSS" src="http://media.berbs.us/images/blueprint.gif" width="420" height="104" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;"/></span></p>

<p>Blueprint’s sweet spot is for designers who need to create grid-based multi-column website layouts. Setting this up on your own <em>correctly</em> takes some time and a lot of knowledge and experience, but Blueprint makes it about as easy as you can hope for it to be. You just <a rel="nofollow" href="http://code.google.com/p/blueprintcss/downloads/list" >download </a> the framework, unzip it into a subdirectory where you keep your site’s CSS, and add an <em>@import</em> statement to your page to start using it.</p>

<p>Using Blueprint as a foundation for your site’s styles mean you’ll not only get it up and running in less time, but you’ll automatically have access to CSS best practices created by designers such as <a href="http://jeffcroft.com/" >Jeff Croft</a>, <a href="http://meyerweb.com/eric" >Eric Meyer</a>, <a href="http://playgroundblues.com/" >Nathan Borror</a>, and <a href="http://mintchaos.com/" >Christian Metts</a>. This makes the prospect of designing good looking, bulletproof CSS layouts a reality for a lot of web designers.</p>

<p><span class="mt-enclosure mt-enclosure-image"><img alt="Zend Framework" src="http://media.berbs.us/images/zend_framework_logo.gif" width="151" height="97" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;"/></span></p>

<p>Another web development framework that I’ve been keeping my eyes on is the <a href="http://framework.zend.com/" >Zend Framework</a> for use with <a href="http://devzone.zend.com/tag/PHP5" >PHP5</a>. Created and hosted by <a href="http://www.zend.com/" >Zend Technologies</a>, the major contributor to the PHP language and creator of many popular PHP related software products, I consider the Zend Framework to be the closest thing there is to an “official” PHP framework.</p>

<p>There has been a flood of new competing PHP development frameworks since Ruby on Rails made its debut: I count <a href="http://en.wikipedia.org/wiki/List_of_web_application_frameworks#PHP"  rel="nofollow">17</a> major ones listed on a Wikipedia compilation. I think I know why there are so many, though I think most of them are unnecessary and even <em>harmful</em> to the future growth of PHP and the community. I believe the reason is that PHP has a very low barrier to entry: It’s available on pretty much every web host and the basics are very easy to learn. Because of that second one, there’s a very pervasive “build it yourself” mentality in the PHP crowd that causes many developers to write software from scratch instead of adopting and extending an existing project.</p>

<p>Back to problem of having too many PHP frameworks. Some will tell you that having more to choose from is better — these are the same people that build software with page after page of features. Think about it from the perspective of a new developer though. With 17+ web frameworks to pick from, where do you start, and how do you compare? Unfortunately, chances are that you probably <em>won’t</em>. It’s the classic <a rel="nofollow" href="http://www.ted.com/index.php/talks/view/id/93" >Paradox of Choice</a>: Faced with too many choices, you most likely won’t pick <em>any</em> of them. In this case, you might even go off to create your own web development framework.</p>

<p>So, my hope with the Zend Framework is that it’s able to channel much of the energy currently going into most of the other PHP frameworks. It’s well designed, well tested, has a <a href="http://framework.zend.com/license" >business friendly open source license</a>, and offers <a href="http://framework.zend.com/manual/components" >tons of components</a> available for use. I think it’s the obvious framework choice for PHP programmers.</p>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2006/01/web-frameworks-or-how-i-learned-to-stop-worrying-about-php-and-love-ruby/' rel='bookmark' title='Permanent Link: Web Frameworks or: How I learned to stop worrying about PHP and love Ruby'>Web Frameworks or: How I learned to stop worrying about PHP and love Ruby</a></li>
<li><a href='http://berbs.us/2006/01/swat-another-php-web-framework/' rel='bookmark' title='Permanent Link: Swat — Another PHP Web Framework'>Swat — Another PHP Web Framework</a></li>
<li><a href='http://berbs.us/2005/12/ruby-on-rails-10-goes-live/' rel='bookmark' title='Permanent Link: Ruby on Rails 1.0 Goes Live'>Ruby on Rails 1.0 Goes Live</a></li>
<li><a href='http://berbs.us/2006/01/ruby-on-rails-is-a-go/' rel='bookmark' title='Permanent Link: Ruby on Rails is a Go!'>Ruby on Rails is a Go!</a></li>
<li><a href='http://berbs.us/2008/06/getting-stuck-on-tools/' rel='bookmark' title='Permanent Link: Getting Stuck on Tools'>Getting Stuck on Tools</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2007/10/best-practices-through-frameworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Movable Type 4 vs WordPress 2.2</title>
		<link>http://berbs.us/2007/06/movable-type-4-vs-wordpress-22/</link>
		<comments>http://berbs.us/2007/06/movable-type-4-vs-wordpress-22/#comments</comments>
		<pubDate>Wed, 06 Jun 2007 14:40:06 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Movable Type]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2007/06/movable-type-4-vs-wordpress-22/</guid>
		<description><![CDATA[Just the other day I was considering moving this blog into WordPress instead of the various versions of Movable Type I've been using to run this thing for almost four years now. There were a few reasons I was thinking about doing this: I'm a tweaker, and like to try new things I've used WordPress [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2004/05/tempting-fate-with-movable-type-30/' rel='bookmark' title='Permanent Link: Tempting Fate With Movable Type 3.0'>Tempting Fate With Movable Type 3.0</a></li>
<li><a href='http://berbs.us/2004/09/movable-type-upgrade/' rel='bookmark' title='Permanent Link: Movable Type Upgrade'>Movable Type Upgrade</a></li>
<li><a href='http://berbs.us/2005/01/required-reading-for-movable-type-users/' rel='bookmark' title='Permanent Link: Required Reading for Movable Type Users'>Required Reading for Movable Type Users</a></li>
<li><a href='http://berbs.us/2005/08/playing-with-movable-type-32-beta-4/' rel='bookmark' title='Permanent Link: Playing With Movable Type 3.2 Beta 4'>Playing With Movable Type 3.2 Beta 4</a></li>
<li><a href='http://berbs.us/2006/09/how-to-generate-a-yahoo-sitemap-with-movable-type/' rel='bookmark' title='Permanent Link: How to Generate a Yahoo Sitemap with Movable Type'>How to Generate a Yahoo Sitemap with Movable Type</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img alt="mt4-logo.gif" src="http://media.berbs.us/images/mt4-logo.gif" width="255" height="43" style="float:right; margin-left: 5px;" /></p>

<p>Just the other day I was considering moving this blog into <a href="http://wordpress.org/" >WordPress</a> instead of the various versions of <a href="http://movabletype.org/" >Movable Type</a> I’ve been using to run this thing for almost four years now. There were a few reasons I was thinking about doing this:</p>

<ol>
<li>I’m a tweaker, and like to try new things</li>
<li>I’ve used WordPress to manage several other personal blogs, and have been very impressed</li>
<li>I know PHP much better than I know Perl, so digging around and making changes to WP would be a lot easier</li>
<li>A lot of other web developers made the move to WordPress a couple of years ago, so there are tons of new and interesting plug-ins available</li>
<li>It’s <a href="http://codex.wordpress.org/License" >released under the GPL</a> open source license, which ensures it’ll always be free, in both senses of the word.</li>
</ol>

<p>So although I like WordPress and will continue to use it for the other sites I run, I’m glad I didn’t make the switch on berbs.us quite yet. Just yesterday, <a href="http://www.sixapart.com" >Six Apart</a> announced <a href="http://www.movabletype.com/mt4/" >Movable Type 4</a>, their first big release of the blogging software in about three years. A of the 50 new features got my attention and are making me excited to download and try out the <a href="http://www.movabletype.org/beta/known_issues.html" >beta</a>:</p>

<ol>
<li><strong>A New User Interface:</strong> Movable Type has had the same basic administration interface for as long as I’ve been using it. There have been improvements and tweaks, sure, but no big leaps in the experience have been made for a long time. Version 4 sports a completely redesigned UI, and looks like it’ll be very easy to use.
<a rel="nofollow" href="http://www.flickr.com/photos/berberich/532760392/"  title="Photo Sharing"><img src="http://farm2.static.flickr.com/1366/532760392_e73ee25cd2.jpg" width="500" height="380" alt="Movable Type 4 User Interface" /></a>
</li>
<li><strong>OpenID:</strong> MT4 includes built-in support for <a href="http://openid.net/" >OpenID</a>, the distributed authentication system that is gaining traction and may someday be <em>the</em> method you use to login to websites.</li>
<li><strong>Content Management:</strong> The new version of Movable Type will include ways to create and manage non-blog content for your website. This is a really big deal for me (more below).</li>
<li><strong>Open Source:</strong> Movable Type 4 will be made available <a href="http://www.movabletype.org/opensource/" >under the GPL license</a> sometime later this summer. That means it’s not only free to use, you’re free to make modifications and improvements to give back to the community. There will still be a paid commercial version for businesses, schools, and others who need official support.</li>
</ol>

<p>One of my biggest accomplishments while working at <a href="http://www.edutech.nodak.edu/" >EduTech</a> was a complete website redesign that used Movable Type as its content management system. The initial setup was <em>not easy</em> — I think it involved something like 10 different weblogs for each of the different sections of the site. It also meant using a lot of complicated PHP template files that still causes my head to hurt just thinking about it. I’ll just say this: If I were doing that project again today, I would not use Movable Type 3 to manage a complex website.</p>

<p>Movable Type 4 seems to be a completely different animal though. With the built-in ability to create and organize regular web pages, it could turn out to be a very capable light-weight <abbr title="Content Management System">CMS</abbr>. </p>

<p>I’ve been using <a href="http://modxcms.com/" >MODx CMS</a> for several projects at my current job (which I’m still not at liberty to officially announce on my blog yet) with some success. There’s absolutely no integration with our Movable Type blogs though, which means two completely different interfaces for managing different parts of the site. It’d be great to bring everything in under the same system, and MT4 <em>just</em> might give me that opportunity.</p>

<p>I’m thinking of using <a href="http://www.allpeoplematter.org" >our church website</a> as a testing case for Movable Type 4. I still haven’t made any changes to it after I considered moving it to <a href="http://berbs.us/2006/07/kickin-the-tires-on-drupal/" >Drupal</a> and <a href="http://berbs.us/2006/09/modx-a-different-kind-of-php-cms/" >MODx</a> last year, so this would be the perfect opportunity to see what MT4 is capable of.</p>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2004/05/tempting-fate-with-movable-type-30/' rel='bookmark' title='Permanent Link: Tempting Fate With Movable Type 3.0'>Tempting Fate With Movable Type 3.0</a></li>
<li><a href='http://berbs.us/2004/09/movable-type-upgrade/' rel='bookmark' title='Permanent Link: Movable Type Upgrade'>Movable Type Upgrade</a></li>
<li><a href='http://berbs.us/2005/01/required-reading-for-movable-type-users/' rel='bookmark' title='Permanent Link: Required Reading for Movable Type Users'>Required Reading for Movable Type Users</a></li>
<li><a href='http://berbs.us/2005/08/playing-with-movable-type-32-beta-4/' rel='bookmark' title='Permanent Link: Playing With Movable Type 3.2 Beta 4'>Playing With Movable Type 3.2 Beta 4</a></li>
<li><a href='http://berbs.us/2006/09/how-to-generate-a-yahoo-sitemap-with-movable-type/' rel='bookmark' title='Permanent Link: How to Generate a Yahoo Sitemap with Movable Type'>How to Generate a Yahoo Sitemap with Movable Type</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2007/06/movable-type-4-vs-wordpress-22/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook Loves Developers, and I Love Facebook</title>
		<link>http://berbs.us/2007/05/facebook-loves-developers-and-i-love-facebook/</link>
		<comments>http://berbs.us/2007/05/facebook-loves-developers-and-i-love-facebook/#comments</comments>
		<pubDate>Fri, 25 May 2007 14:55:48 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2007/05/facebook-loves-developers-and-i-love-facebook/</guid>
		<description><![CDATA[My Facebook lovefest continues. Late yesterday they announced the latest version of the Facebook Platform, which opens up the site (and its millions and millions of users) for 3rd parties to build on. If that doesn't mean anything to you, just know this: It's a very big deal. TechCrunch calls Facebook the "Anti-MySpace", and for [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2007/04/thrift-facebook-open-source-tool/' rel='bookmark' title='Permanent Link: Thrift: Facebook Open Source Tool'>Thrift: Facebook Open Source Tool</a></li>
<li><a href='http://berbs.us/2007/04/fast-company-on-mark-zuckerberg-and-facebook/' rel='bookmark' title='Permanent Link: Fast Company on Mark Zuckerberg and Facebook'>Fast Company on Mark Zuckerberg and Facebook</a></li>
<li><a href='http://berbs.us/2007/06/facebook-myspace-and-class-divisions/' rel='bookmark' title='Permanent Link: Facebook, MySpace, and Class Divisions'>Facebook, MySpace, and Class Divisions</a></li>
<li><a href='http://berbs.us/2008/04/google-app-engine-embrace-the-constraints/' rel='bookmark' title='Permanent Link: Google App Engine: Embrace the Constraints'>Google App Engine: Embrace the Constraints</a></li>
<li><a href='http://berbs.us/2006/10/the-salesforce-blitzkrieg/' rel='bookmark' title='Permanent Link: The Salesforce Blitzkrieg'>The Salesforce Blitzkrieg</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img alt="facebook-platform.jpg" src="http://media.berbs.us/images/facebook-platform.jpg" alt="Facebook Platform: Deep Integration" width="552" height="277" /></p>

<p>My Facebook <a href="http://berbs.us/2007/04/thrift-facebook-open-source-tool/" >lovefest</a> <a href="http://berbs.us/2007/04/fast-company-on-mark-zuckerberg-and-facebook/" >continues</a>. Late yesterday they <a href="http://www.techcrunch.com/2007/05/24/facebook-launches-facebook-platform-they-are-the-anti-myspace/" >announced the latest version</a> of the <a rel="nofollow" href="http://developers.f8.facebook.com/" >Facebook Platform</a>, which opens up the site (and its millions and millions of users) for 3rd parties to build on. If that doesn’t mean anything to you, just know this: <strong>It’s a very big deal</strong>.</p>

<p>TechCrunch calls Facebook the “Anti-MySpace”, and for good reason. MySpace gives users the <em>appearance</em> of openness by letting them make their pages look as crappy as they want, but does almost everything they can to prevent users from interacting with outside sites and services. For example, when it <a href="http://www.techdirt.com/articles/20051223/1027248_F.shtml" >temporarily blocked Youtube videos</a> back in 2005, and more recently, when it <a rel="nofollow" href="http://news.com.com/2100-1026_3-6175272.html" >blocked Photobucket content</a> before buying them a month later.</p>

<p>While Facebook doesn’t let users change the way pages look (one of its best features, in my opinion), it instead opens itself up to 3rd party developers with a really impressive API that’s got <a rel="nofollow" href="http://developers.f8.facebook.com/documentation.php" >great documentation</a>. Existing applications can now be integrated right into the platform so they look and feel like they’re part of the site, and entirely new apps and business ideas can (and will) be created to reach Facebook users.</p>

<p>I <em>love</em> how Zuckerberg is thinking long-term with Facebook. He could have easily sold the company and cashed out, or littered the site with tons of ads, but he didn’t. Instead, he’s building a platform that will make Facebook one of the most powerful (and money-making) sites for years to come. He’s doing everything right, as best I can tell. Pure genius.</p>

<p>Since Facebook/<a href="http://www.twitter.com" >Twitter</a> integration has <em>already</em> been done on the new platform (it’s one of the first 3rd party apps), next I’m hoping to see a <a rel="nofollow" href="http://flickr.com/photos/berberich" >Flickr</a> application that will act as a drop-in replacement for the Facebook photo app. I’m sure someone is already working on it.</p>

<p>I’ve already got a few good Facebook app ideas in my head that could make a ton of cash if correctly executed. Of course, my lack of time will prevent me from starting anything, but that’s a different story…</p>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2007/04/thrift-facebook-open-source-tool/' rel='bookmark' title='Permanent Link: Thrift: Facebook Open Source Tool'>Thrift: Facebook Open Source Tool</a></li>
<li><a href='http://berbs.us/2007/04/fast-company-on-mark-zuckerberg-and-facebook/' rel='bookmark' title='Permanent Link: Fast Company on Mark Zuckerberg and Facebook'>Fast Company on Mark Zuckerberg and Facebook</a></li>
<li><a href='http://berbs.us/2007/06/facebook-myspace-and-class-divisions/' rel='bookmark' title='Permanent Link: Facebook, MySpace, and Class Divisions'>Facebook, MySpace, and Class Divisions</a></li>
<li><a href='http://berbs.us/2008/04/google-app-engine-embrace-the-constraints/' rel='bookmark' title='Permanent Link: Google App Engine: Embrace the Constraints'>Google App Engine: Embrace the Constraints</a></li>
<li><a href='http://berbs.us/2006/10/the-salesforce-blitzkrieg/' rel='bookmark' title='Permanent Link: The Salesforce Blitzkrieg'>The Salesforce Blitzkrieg</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2007/05/facebook-loves-developers-and-i-love-facebook/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Thrift: Facebook Open Source Tool</title>
		<link>http://berbs.us/2007/04/thrift-facebook-open-source-tool/</link>
		<comments>http://berbs.us/2007/04/thrift-facebook-open-source-tool/#comments</comments>
		<pubDate>Thu, 05 Apr 2007 03:45:51 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2007/04/thrift-facebook-open-source-tool/</guid>
		<description><![CDATA[Facebook released some of its home-grown software architecture as open source a few days ago. They've called it Thrift, and can be downloaded from their developer site for free. Browsing through Thrift's whitepaper (PDF), I'm still trying to completely understand it. It appears to provide a consistent way for different programming languages (PHP, Python, Ruby, [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2007/05/facebook-loves-developers-and-i-love-facebook/' rel='bookmark' title='Permanent Link: Facebook Loves Developers, and I Love Facebook'>Facebook Loves Developers, and I Love Facebook</a></li>
<li><a href='http://berbs.us/2007/04/fast-company-on-mark-zuckerberg-and-facebook/' rel='bookmark' title='Permanent Link: Fast Company on Mark Zuckerberg and Facebook'>Fast Company on Mark Zuckerberg and Facebook</a></li>
<li><a href='http://berbs.us/2004/06/open-source-software-and-the-future-of-business/' rel='bookmark' title='Permanent Link: Open Source Software and the Future of Business'>Open Source Software and the Future of Business</a></li>
<li><a href='http://berbs.us/2007/11/the-open-handset-alliance-or-why-open-standards-are-for-losers/' rel='bookmark' title='Permanent Link: The Open Handset Alliance, or Why Open Standards are for Losers'>The Open Handset Alliance, or Why Open Standards are for Losers</a></li>
<li><a href='http://berbs.us/2007/10/kindersay-free-online-videos-that-help-your-preschooler-learn-new-words/' rel='bookmark' title='Permanent Link: Kindersay: Free Online Videos that Help Your Preschooler Learn New Words'>Kindersay: Free Online Videos that Help Your Preschooler Learn New Words</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a rel="nofollow" href="http://www.facebook.com" >Facebook</a> released some of its home-grown software architecture as open source a few days ago. They’ve called it <a rel="nofollow" href="http://developers.facebook.com/thrift/" >Thrift</a>, and can be downloaded from their <a rel="nofollow" href="http://developers.facebook.com/" >developer site</a> for free.</p>

<p>Browsing through <a rel="nofollow" href="http://developers.facebook.com/thrift/thrift-20070401.pdf" >Thrift’s whitepaper</a> (PDF), I’m still trying to completely understand it. It appears to provide a consistent way for different programming languages (PHP, Python, Ruby, Java, C++) to communicate with each other. In other words, it lets you build a web application by using the best programming language for a particular task, then tie the pieces together in a clean way.</p>

<p>I think Facebook’s site is the best testimonial that Thrift framework could ever get. I’ve been using the social networking app for awhile now, and it’s always fast, and always online (compare that with <a rel="nofollow" href="http://www.myspace.com" >MySpace</a>). Hopefully some other entrepreneurs will be able to make good use of this tool too.</p>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2007/05/facebook-loves-developers-and-i-love-facebook/' rel='bookmark' title='Permanent Link: Facebook Loves Developers, and I Love Facebook'>Facebook Loves Developers, and I Love Facebook</a></li>
<li><a href='http://berbs.us/2007/04/fast-company-on-mark-zuckerberg-and-facebook/' rel='bookmark' title='Permanent Link: Fast Company on Mark Zuckerberg and Facebook'>Fast Company on Mark Zuckerberg and Facebook</a></li>
<li><a href='http://berbs.us/2004/06/open-source-software-and-the-future-of-business/' rel='bookmark' title='Permanent Link: Open Source Software and the Future of Business'>Open Source Software and the Future of Business</a></li>
<li><a href='http://berbs.us/2007/11/the-open-handset-alliance-or-why-open-standards-are-for-losers/' rel='bookmark' title='Permanent Link: The Open Handset Alliance, or Why Open Standards are for Losers'>The Open Handset Alliance, or Why Open Standards are for Losers</a></li>
<li><a href='http://berbs.us/2007/10/kindersay-free-online-videos-that-help-your-preschooler-learn-new-words/' rel='bookmark' title='Permanent Link: Kindersay: Free Online Videos that Help Your Preschooler Learn New Words'>Kindersay: Free Online Videos that Help Your Preschooler Learn New Words</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2007/04/thrift-facebook-open-source-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Favorite Firefox Extensions</title>
		<link>http://berbs.us/2007/02/my-favorite-firefox-extensions/</link>
		<comments>http://berbs.us/2007/02/my-favorite-firefox-extensions/#comments</comments>
		<pubDate>Sat, 24 Feb 2007 21:09:57 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2007/02/my-favorite-firefox-extensions/</guid>
		<description><![CDATA[One of my friends recently asked me what I’m using for extensions in Firefox 2, then suggested I share my list with the world. So, that’s exactly what I’m doing here. I’ll split them up by category so you can find the ones that apply to you. Improving the Firefox Interface Even though Firefox is [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2008/12/my-favorite-tech-things-for-2008/' rel='bookmark' title='Permanent Link: My Favorite Tech Things for 2008'>My Favorite Tech Things for 2008</a></li>
<li><a href='http://berbs.us/2010/03/extensions-vs-bookmarklets/' rel='bookmark' title='Permanent Link: Extensions vs Bookmarklets'>Extensions vs Bookmarklets</a></li>
<li><a href='http://berbs.us/2008/08/will-ubiquity-for-firefox-change-the-way-we-use-the-web/' rel='bookmark' title='Permanent Link: Will Ubiquity for Firefox Change the Way We Use the Web?'>Will Ubiquity for Firefox Change the Way We Use the Web?</a></li>
<li><a href='http://berbs.us/2004/10/great-software/' rel='bookmark' title='Permanent Link: Great Software'>Great Software</a></li>
<li><a href='http://berbs.us/2009/08/two-great-uses-for-dropbox/' rel='bookmark' title='Permanent Link: Three Great Uses For Dropbox'>Three Great Uses For Dropbox</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>One of my friends recently asked me what I’m using for extensions in <a rel="nofollow" href="http://www.mozilla.com/en-US/firefox/" >Firefox 2</a>, then suggested I share my list with the world. So, that’s exactly what I’m doing here. I’ll split them up by category so you can find the ones that apply to you.</p>

<h3>Improving the Firefox Interface</h3>

<p>Even though Firefox is amazing out of the box (or, more accurately, after the download), I use a few extensions to fill in some gaps.</p>

<h4><a href="http://adblockplus.org/en/" >Adblock Plus</a></h4>

<p><a href="http://adblockplus.org/en/" >Adblock Plus</a> blocks so many web ads, it’s <em>really</em> tough browsing on a computer where it’s not installed. It comes with a set of filter subscriptions that will automatically stay up-to-date so you only have to see the ads you really want to. Highly recommended.</p>

<h4><a href="http://downloadstatusbar.mozdev.org/" >Download Statusbar</a></h4>

<p>Firefox’s default download manager annoys the heck out of me, but <a href="http://downloadstatusbar.mozdev.org/" >Download Statusbar</a> fixes this. Just as its title says, it displays a download status bar at the bottom of the browser window to let you know when your files are completely retrieved.</p>

<h4><a href="https://addons.mozilla.org/firefox/1122/" >Tab Mix Plus</a></h4>

<p>I’m a huge fan of tabbed browsing, so I appreciate the extras offered by the <a href="https://addons.mozilla.org/firefox/1122/" >Tab Mix Plus</a> extension. Among other things, it color codes unread tabs, gives you the download status for each one, and lets you lock and protect tabs so you won’t close them accidentally.</p>

<h4><a href="https://addons.mozilla.org/firefox/1951/" >Fission</a></h4>

<p>One of the nice little touches I appreciate in Apple’s Safari browser is the address bar that doubles as a progress indicator. The <a href="https://addons.mozilla.org/firefox/1951/" >Fission</a> extension’s only job is to add this feature to Firefox, and it does it well.</p>

<h4><a href="http://roachfiend.com/archives/2006/08/28/errorzilla-useful-error-pages-for-firefox/" >ErrorZilla</a></h4>

<p><a href="http://roachfiend.com/archives/2006/08/28/errorzilla-useful-error-pages-for-firefox/" >ErrorZilla</a> replaces the default Firefox error page with a set of options, including going to a <a href="http://www.coralcdn.org/" >Coral Cache</a> version of the page (if it’s available), visiting the <a href="http://www.archive.org/web/web.php" >Wayback Machine</a>, or doing a trace route or ping to see if the web server is down. It comes in handy every so often.</p>

<h3>Power Tools</h3>

<p>Here are some other extensions that don’t fit into the above category:</p>

<h4><a href="http://greasemonkey.mozdev.org/" >Greasemonkey</a></h4>

<p><a href="http://greasemonkey.mozdev.org/" >Greasemonkey</a> is a little hard to describe. It lets you create little scripts that can modify pretty much any webpage right before it’s rendered in Firefox. You don’t have to actually write scripts yourself (there are <a href="http://userscripts.org/" >tons available for download</a>), though there’s a good <a href="http://diveintogreasemonkey.org/" >guide available for free</a> in case you get adventurous.</p>

<p>One of my favorite user scripts is one that creates a “smart” subscribe subscribe button for every page that has an RSS feed. If I’m already subscribed to that feed in Google Reader, it displays a little check mark letting me know I’ve already got it. A nice feature, especially when you have a couple of hundred subscriptions.</p>

<h4><a href="http://www.iopus.com/imacros/firefox/" >iMacros for Firefox</a></h4>

<p>To be honest, I have the <a href="http://www.iopus.com/imacros/firefox/" >iMacros</a> extension installed, but haven’t done much with it yet. I like the idea a lot though. It lets you write macros for a web page that automate repetitive tasks.</p>

<h4><a href="https://addons.mozilla.org/firefox/1033/" >PwdHash</a></h4>

<p><a href="https://addons.mozilla.org/firefox/1033/" >PwdHash</a> makes it easy to create site-specific passwords, giving you a higher level of security than if you just use a single password everyone.</p>

<h4><a href="https://addons.mozilla.org/firefox/4106/" >Operator</a></h4>

<p><a href="https://addons.mozilla.org/firefox/4106/" >Operator</a> exposes <a href="http://microformats.org/" >Microformats</a> present on pages and makes it easy to work with them. A little handy now, but Firefox 3 will probably have this sort of functionality built right in.</p>

<h4><a href="http://blog.codeeg.com/tails-firefox-extension-03/" >Tails</a></h4>

<p><a href="http://blog.codeeg.com/tails-firefox-extension-03/" >Tails</a> is another <a href="http://microformats.org/" >Microformat</a> reader, though this one is lighter-weight than Operator. Basically does the same thing though.</p>

<h3>Attention</h3>

<h4><a href="http://www.attentiontrust.org/node/414" >Attention Recorder</a></h4>

<p>Right up front, I admit this one is pretty geeky. There’s a small movement going on right now advocating the ownership of your personal attention data made as you use the web. I’ll write more about this at some point in the future. </p>

<p>For now though, <a href="http://www.attentiontrust.org/node/414" >Attention Recorder</a> captures your clickstream and browsing history in a file on your computer which you can do whatever you want with. You can also choose to upload this same data to a trusted 3rd party such as <a href="http://www.root.net/" >Root Vault</a> for storage and analysis.</p>

<h4><a rel="nofollow" href="http://del.icio.us/help/firefox/extension" >del.icio.us extension</a></h4>

<p>I’ve been storing my bookmarks and links of interest to <a rel="nofollow" href="http://del.icio.us/berberich" >my del.icio.us account</a> for almost two years now instead of saving them in Firefox. Not only are they now easier to search and available from any computer, there’s also the side benefit of sharing them with everyone else. I’m just that nice of a guy!</p>

<p>The <a rel="nofollow" href="http://del.icio.us/help/firefox/extension" >del.icio.us extension</a> makes it really easy to tag and save pages as you browse, and gives you quick access to your account when you need it.</p>

<h3>Web Development</h3>

<p>As you probably know, I’ve been big into web design and development for a while now. There are some <em>awesome</em> tools available for Firefox that makes the process easier. Here are some of my favorites.</p>

<h4><a href="http://www.getfirebug.com/" >Firebug</a></h4>

<p><a href="http://www.getfirebug.com/" >Firebug</a> is <strong>unbelievable</strong>. This tool has become invaluable in debugging CSS and JavaScript. You can easily see how styles cascade (or don’t) across your HTML elements and edit them on the fly to see how things look in the browser. It can also <a href="http://ajaxian.com/archives/ajax-debugging-with-firebug" >debug AJAX requests</a>, something that has personally helped me in my Ruby on Rails projects.</p>

<p>If you do any sort of web design or programming, do yourself a favor and download Firebug. It’s free, but it’s one extension I’d actually pay money for.</p>

<h4><a href="http://chrispederick.com/work/webdeveloper/" >Web Developer</a></h4>

<p>I’ve been using the <a href="http://chrispederick.com/work/webdeveloper/" >Web Developer</a> extension since 2004, and it has become an indispensable part of my web design toolkit. Some of its functionality is duplicated by Firebug, but there’s still a ton of other features there, including a “view generated source” option, which lets you view the HTML as it’s currently displayed in the browser window. This is one of those things that come in <em>really handy</em> when debugging AJAX and JavaScript that modify the <a href="http://www.w3.org/DOM/" >Document Object Model</a> after the page is actually downloaded from the server.</p>

<h4><a href="http://users.skynet.be/mgueury/mozilla/" >Html Validator</a></h4>

<p>I’ve become used to regularly <a href="http://validator.w3.org/" >validating</a> my HTML documents during development, and the <a href="http://users.skynet.be/mgueury/mozilla/" >Html Validator</a> extension makes this process automatic. Instead of manually going out to the W3C validator service, this extension will do the validation locally on your computer right after the page is rendered in Firefox. This can save a lot of time over the course of your project.</p>

<p>I’ll make one small note on this extension: I have run into some cases where this extension says a page has valid markup, but where the official validator picks out some problems. Even so, it’s still a good first line defense.</p>

<h4><a href="http://livehttpheaders.mozdev.org/" >Live HTTP Headers</a></h4>

<p>Useful mainly when doing web development/programming, <a href="http://livehttpheaders.mozdev.org/" >Live HTTP Headers</a> lets you take a peek at the conversation going on between your computer and the web servers it gets content from. You probably won’t use it on a daily basis, but it comes in handy in special cases.</p>

<h4><a href="http://www.designmeme.com/2006/06/19/professor-x-extension-for-firefox/" >Professor X</a></h4>

<p><a href="http://www.designmeme.com/2006/06/19/professor-x-extension-for-firefox/" >Professor X</a> lets you take a look at the content of a page’s “head” section without viewing the source. Nothing earth shattering here, but still a nice option to have.</p>

<h4><a href="http://tools.seobook.com/firefox/seo-for-firefox.html" >SEO For Firefox</a></h4>

<p>The <a href="http://tools.seobook.com/firefox/seo-for-firefox.html" >SEO For Firefox</a> extension adds a bunch of search engine optimization links and resources that’ll give you better insight into a page’s search rankings, along with a bunch of other useful info.</p>

<p>Well, there you go. I hope you found one or two tools that can help you out. If you’ve got a favorite extension, please let me know about it in the comments.</p>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2008/12/my-favorite-tech-things-for-2008/' rel='bookmark' title='Permanent Link: My Favorite Tech Things for 2008'>My Favorite Tech Things for 2008</a></li>
<li><a href='http://berbs.us/2010/03/extensions-vs-bookmarklets/' rel='bookmark' title='Permanent Link: Extensions vs Bookmarklets'>Extensions vs Bookmarklets</a></li>
<li><a href='http://berbs.us/2008/08/will-ubiquity-for-firefox-change-the-way-we-use-the-web/' rel='bookmark' title='Permanent Link: Will Ubiquity for Firefox Change the Way We Use the Web?'>Will Ubiquity for Firefox Change the Way We Use the Web?</a></li>
<li><a href='http://berbs.us/2004/10/great-software/' rel='bookmark' title='Permanent Link: Great Software'>Great Software</a></li>
<li><a href='http://berbs.us/2009/08/two-great-uses-for-dropbox/' rel='bookmark' title='Permanent Link: Three Great Uses For Dropbox'>Three Great Uses For Dropbox</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2007/02/my-favorite-firefox-extensions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Setting up Ruby on Rails and Using Capistrano to Deploy Ruby on Rails Applications to Media Temple Dedicated Virtual Server 3.0</title>
		<link>http://berbs.us/2007/02/setting-up-ruby-on-rails-and-using-capistrano-to-deploy-ruby-on-rails-applications-to-media-temple-dedicated-virtual-server-30/</link>
		<comments>http://berbs.us/2007/02/setting-up-ruby-on-rails-and-using-capistrano-to-deploy-ruby-on-rails-applications-to-media-temple-dedicated-virtual-server-30/#comments</comments>
		<pubDate>Tue, 06 Feb 2007 05:18:43 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2007/02/setting-up-ruby-on-rails-and-using-capistrano-to-deploy-ruby-on-rails-applications-to-media-temple-dedicated-virtual-server-30/</guid>
		<description><![CDATA[Note: This tutorial is now quite dated, so I would not recommend attempting to follow it. Instead, take a look at Media Temple's instructions for configuring Mongrel Clusters. I recently deployed a Ruby on Rails application to Media Temple's Dedicated Virtual Server 3.0 setup, and after running into a few problems along the way, eventually [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2006/10/media-temple-new-web-host-of-choice/' rel='bookmark' title='Permanent Link: Media Temple — New Web Host of Choice'>Media Temple — New Web Host of Choice</a></li>
<li><a href='http://berbs.us/2006/01/ruby-on-rails-is-a-go/' rel='bookmark' title='Permanent Link: Ruby on Rails is a Go!'>Ruby on Rails is a Go!</a></li>
<li><a href='http://berbs.us/2005/12/ruby-on-rails-10-goes-live/' rel='bookmark' title='Permanent Link: Ruby on Rails 1.0 Goes Live'>Ruby on Rails 1.0 Goes Live</a></li>
<li><a href='http://berbs.us/2006/12/this-blog-is-moving-to-media-temple/' rel='bookmark' title='Permanent Link: This blog is moving to Media Temple'>This blog is moving to Media Temple</a></li>
<li><a href='http://berbs.us/2006/10/refactoring-rails/' rel='bookmark' title='Permanent Link: Refactoring Rails'>Refactoring Rails</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>Note:</strong> This tutorial is now quite dated, so I would not recommend attempting to follow it. Instead, take a look at Media Temple’s instructions for configuring <a href="http://kb.mediatemple.net/questions/279/Ruby+on+Rails+using+Mongrel+Clusters" >Mongrel Clusters</a>.</p>

<p>I recently deployed a Ruby on Rails application to Media Temple’s <a href="http://www.mediatemple.net/webhosting/dv/" >Dedicated Virtual Server 3.0</a> setup, and after running into a few problems along the way, eventually got everything working nicely.</p>

<p>I decided to publish my steps and documentation for anyone else who might possibly benefit from what I learned. If you’re not in that <em>very small</em> group of people, there’s probably not much for you to see here. If you’re still curious though, continue reading after the jump.</p>

<p><span id="more-294"></span></p>

<h3>Why Another Rails Deployment Tutorial?</h3>

<p>You’re right, there are already a bunch out there, some of them <a href="http://blog.codahale.com/2006/06/19/time-for-a-grown-up-server-rails-mongrel-apache-capistrano-and-you/" ><em>really</em> good</a>. Media Temple even has one for their <a href="http://kb.mediatemple.net/article.php?id=128" >Dedicated Virtual Server 2.0</a>, though it’s a litle out-of-date and somewhat incomplete toward the end. I wanted to fill in the gaps until MT releases an updated article in their knowledge base.</p>

<h3>Why Not Use Mongrel Clusters Instead of FastCGI?</h3>

<p>The current preferred method for deploying Ruby on Rails apps is to use <a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html" >Apache</a>, <a href="http://www.apsis.ch/pound/" >Pound</a>, or some other type of <a href="http://en.wikipedia.org/wiki/Reverse_proxy"  rel="nofollow">reverse-proxy</a> to pass HTTP requests to a <a href="http://mongrel.rubyforge.org/docs/mongrel_cluster.html" >cluster</a> of <a href="http://mongrel.rubyforge.org/index.html" >Mongrel</a> web servers.</p>

<p>The problem? Media Temple lets you manage your dedicated virtual server using <a href="http://www.swsoft.com/plesk/" >Plesk 8.1</a>, which is overall a really good way to do things. The core web server services (Apache, MySQL, PHP, among others) are managed and updated by Plesk, which is where the issue lies. Apache 2.0.52 comes installed, which <em>is not</em> compatible with the <a href="http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html" >mod_proxy_balancer</a> module used by the most common Mongrel setup. Apache 2.2 is needed to use that.</p>

<p>You <em>could</em> compile Apache 2.2 on your dedicated virtual to take advantage of mod_proxy_balancer, but this will drop you out of MT’s <a href="http://kb.mediatemple.net/article.php?id=097" >Update Option Program</a>, which basically means you’re left to do every security update and version upgrade on your own. You’re free to go that route, but I’m not ready to opt-out of the UOP just yet.</p>

<p>If you want to stay eligible for Media Temple’s UOP, you can also try using Apache 2.0 as a Mongrel frontend with the older <a href="http://jonathan.tron.name/articles/2006/07/26/apache-2-0-x-mongrel-mod_proxy-mod_rewrite-configuration" >mod_proxy</a> module or hacking together a homemade proxy with a <a href="http://times.usefulinc.com/2006/09/13-mongrel-apache20" >randomizer and a text file</a>. If you want to keep it <em>relatively simple</em> for now though, I’d stick with the officially supported FastCGI method until Apache 2.2 is officially supported on the Dedicated Virtual Servers.</p>

<h3>Assumptions</h3>

<p>I’m going to assume a few things in this how-to. Call it an “opinionated tutorial” if you’d like:</p>

<ol>
<li>You know your way around the command-line shell, particularly <a href="http://www.gnu.org/software/bash/" >bash</a>.</li>
<li>You already know how to use a text editor like <a href="http://www.vim.org/" >vim</a> or <a href="http://www.gnu.org/software/emacs/" >emacs</a> and will use it to modify your text files on the web server.</li>
<li>You’re using <a href="http://subversion.tigris.org/" >Subversion</a>, <a href="http://www.nongnu.org/cvs/" >CVS</a>, or some other source management system to keep track of your code. This is a good practice on its own, but it’s a requirement for the next assumption.</li>
<li>You’re going to use <a href="http://manuals.rubyonrails.com/read/book/17" >Capistrano</a> to automate the deployment of your Rails application and that it’s already installed on your local development machine. If you’re not using it already, you should be. Trust me.</li>
</ol>

<h3>Before You Start</h3>

<p>Before you do anything else, make sure you have the following ready on your DV server:</p>

<ol>
<li>Developer Tools — Media Temple staff will need to install the compliers and other tools necessary to build programs from source. Submit a support ticket to request this.</li>
<li>Root access — You’ll need root access enabled before compiling any programs. Submit a support ticket to Media Temple to request this.</li>
<li>A domain account created in Plesk with <em>mod_fcgid support</em> enabled — You can do this easily in Plesk using the control panel. Make sure your domain user has shell access and that a MySQL database has been created.</li>
</ol>

<p><strong>Optional, but recommended:</strong> At this point, it’s also a good idea to give your domain account’s user <a href="http://www.gratisoft.us/sudo/" >sudo</a> rights, especially if Capistrano will be using it to automate your application deployments. To do this, issue the <em>visudo</em> command when you’re logged in as root then add a new line so it looks something like this:</p>

<pre>root ALL = (ALL) ALL &lt;username&gt; ALL = (ALL) ALL</pre>

<h3>1. Login to the server via SSH as root</h3>

<p>You’ll need root access in order to continue, so login with that account now.</p>

<h3>2. Download compile and install the latest version of Ruby</h3>

<p>At the time of writing this, the current version of Ruby is <em>1.8.5</em>. You can always find the latest supported version by visiting the <a href="http://rubyonrails.com/down" >Ruby on Rails download page</a>.</p>

<pre>
cd /usr/local/src wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.5-p2.tar.gz tar xvzf ruby-1.8.5-p2.tar.gz cd ruby-1.8.5-p2 ./configure make make install cd ..
</pre>

<p><strong>Note:</strong> If you receive error messages at the <em>./configure</em> step, it’s probably because Developer Tools aren’t installed.</p>

<h3>3. Download and install the latest version of Ruby Gems</h3>

<p>You’ll need RubyGems in order to install Rails and some other required pieces of software, so we’ll do that now.</p>

<p>The current version as the time of writing is <em>0.9.1</em>. You should already back in the <em>/usr/local/src</em> directory before continuing.</p>

<pre>
wget http://rubyforge.org/frs/download.php/16452/rubygems-0.9.1.tgz tar xvzf rubygems-0.9.1.tgz cd rubygems-0.9.1 ruby setup.rb
</pre>

<h3>4. Install the latest version of Ruby on Rails</h3>

<p>The gem command will automatically download the latest stable version of Rails, which is <em>1.2</em> at the time of writing.</p>

<pre>gem install rails --include-dependencies</pre>

<h3>5. Install the required gems and dependencies</h3>

<p>Next, install other required Gem libraries. The first line assumes you’ll be using MySQL as your database server.</p>

<pre>
gem install mysql \-- -|-with-mysql-include=/usr/include/mysql --with-mysql-lib=/usr/lib/mysql gem install rake --include-dependencies gem install capistrano --include-dependencies gem install termios --include-dependencies
</pre>

<h3>6. Download and Install FastCGI</h3>

<p>Plesk already has <em>mod_fcgid</em> installed and enabled with Apache if you checked the <em>mod_fcgid support</em> option in your domain setup. You’ll still need <em>FastCGI</em> installed in order for things to work correctly, so we’ll do that now.</p>

<p>The current version of FastCGI as of writing is <em>2.4.0</em>.</p>

<p>Make sure you’re in <em>/usr/local/src/</em> before continuing. 
</pre>
wget http://fastcgi.com/dist/fcgi-2.4.0.tar.gz tar xvzf fcgi-2.4.0.tar.gz cd fcgi-2.4.0 ./configure &amp;&amp; make &amp;&amp; make install
</pre></p>

<h3>7. Install the FCGI gem</h3>

<p>With FastCGI installed, you’ll need to install the FCGI RubyGem that will allow Ruby on Rails to use it. </pre>gem install fcgi</pre></p>

<h3>8. Enable the vhost.conf file for the domain:</h3>

<p>There will already be a couple of Apache configuration files created on your server, the master one located at <em>/etc/httpd/conf/httpd.conf</em>, and the domain specific one at <em>/var/www/vhosts/<domain>/conf/httpd.include</em>. <strong>Do not modify either of these!</strong> Both of these can be overwritten by Plesk, so your configuration changes aren’t guaranteed to be safe.</p>

<p>Instead, you create a <em>vhost.conf</em> and/or a <em>vhost_ssl.conf</em> inside the same directory as <em>httpd.include</em> to contain your changes. You might as well do both at the same time, just in case you decide to use SSL at some point.</p>

<pre>touch /var/www/vhosts/<domain>/conf/vhost.conf touch /var/www/vhosts/<domain>/conf/vhost_ssl.conf</pre>

<p>Creating these files is not enough. Now you need to tell Plesk about them so they’ll be automatically included in your domain’s <em>httpd.include</em> file:</p>

<pre>/usr/local/psa/admin/sbin/websrvmng -u --vhost-name=<domain></pre>

<h3>9. Prepare for Deployment with Capistrano</h3>

<p>At this point, I’m assuming your application is tested and ready to go on your local development machine. It should also be “<a href="http://manuals.rubyonrails.com/read/book/17" >capistranized</a>” and your <em>deploy.rb</em> modified to suit your situation.</p>

<p>I suggest creating an <em>app</em> directory to hold your Rails application and telling Capistrano to use the domain’s username to do the deploy. You <em>could</em> do it as root, but you’re far less likely to run into permission problems of you use a regular user instead.</p>

<pre>set :deploy_to, "/var/www/vhosts/<domain>/app/#{application}" # defaults to "/u/apps/#{application}" set :user, "<username>"</pre>

<p>On your development machine, run the following to setup the correct directory structure for your Rails app on your dedicated server:</p>

<pre>cap setup</pre>

<p>If Capistrano was able to do its job, you should now see some subdirectories with <em>app</em> on your server.</p>

<h3>10. Edit the vhost.conf file to point to the public directory of the rails application</h3>

<p>My first choice was to use a Symbolic Link to point <em>httpdocs</em> to the public directory within my Rails application, but I kept getting <em>403 Forbidden</em> errors that I couldn’t work around. Instead, you can use the <em>vhost.conf</em> file you just created to tell Apache to use the Rails public directory as the web root instead.</p>

<p>In this case, <em>current</em> is the symlink created by Capistrano that points to the latest version of your deployed application.</p>

<pre>
DocumentRoot /var/www/vhosts/<domain>/app/<appname>/current/public <Directory /var/www/vhosts/<domain>/app/<appname>/current/public> AllowOverride All Options +FollowSymLinks Options -Includes -ExecCGI <IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi Options +FollowSymLinks +ExecCGI </IfModule> </Directory>
</pre>

<p>Restart the Apache webserver by issuing the command <em>httpd –k graceful</em>. This will make your configuration changes take effect.</p>

<h3>11. Edit the htaccess file in the rails application /public directory</h3>

<p>Before deploying your application to your dedicated server, on your development machine edit the <em>.htaccess</em> file located in the <em>public</em> directory of your Rails app:</p>

<ul>
<li>Around line 2 change <code>AddHandler fastcgi-script .fcgi</code> to <code>AddHandler fcgid-script .fcgi</code> </li>
<li>Around line 32 change <code>RewriteRule ^(.*)$ dispatch.cgi [QSA,L]</code> to <code>RewriteRule ^(.*)$ dispatch.fcgi [QSA,L\]</code> </li>
</ul>

<p>This will tell Apache to use the built-in fcgid module (line 2) and tell the Rails app to use FastCGI instead of the <em>much slower</em> regular CGI.</p>

<h3>12. Deploy Your Rails App</h3>

<p>On your development machine, issue the following command when you’re at the main directory of your Rails app:</p>

<pre>cap deploy</pre>

<p>This will tell Capistrano to get the latest version of your application from your source management system, create a new directory for it, point <em>current</em> to its <em>public</em> directory, then restart the FastCGI processes.</p>

<p>You should now be setup to reliably deploy new versions of your application to your Media Temple Dedicated Virtual Server. That wasn’t so hard now, was it?</p>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2006/10/media-temple-new-web-host-of-choice/' rel='bookmark' title='Permanent Link: Media Temple — New Web Host of Choice'>Media Temple — New Web Host of Choice</a></li>
<li><a href='http://berbs.us/2006/01/ruby-on-rails-is-a-go/' rel='bookmark' title='Permanent Link: Ruby on Rails is a Go!'>Ruby on Rails is a Go!</a></li>
<li><a href='http://berbs.us/2005/12/ruby-on-rails-10-goes-live/' rel='bookmark' title='Permanent Link: Ruby on Rails 1.0 Goes Live'>Ruby on Rails 1.0 Goes Live</a></li>
<li><a href='http://berbs.us/2006/12/this-blog-is-moving-to-media-temple/' rel='bookmark' title='Permanent Link: This blog is moving to Media Temple'>This blog is moving to Media Temple</a></li>
<li><a href='http://berbs.us/2006/10/refactoring-rails/' rel='bookmark' title='Permanent Link: Refactoring Rails'>Refactoring Rails</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2007/02/setting-up-ruby-on-rails-and-using-capistrano-to-deploy-ruby-on-rails-applications-to-media-temple-dedicated-virtual-server-30/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Why Software Sucks</title>
		<link>http://berbs.us/2007/01/why-software-sucks/</link>
		<comments>http://berbs.us/2007/01/why-software-sucks/#comments</comments>
		<pubDate>Fri, 19 Jan 2007 22:55:21 +0000</pubDate>
		<dc:creator>Jason Berberich</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Simplicity]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://labs.berbs.us/2007/01/why-software-sucks/</guid>
		<description><![CDATA[I'm in the middle of an absolutely awesome Technometria podcast with David Platt, author of the book Why Software Sucks. The episode is titled, appropriately enough, Why Software Sucks, the Podcast. It's very much worth checking out. David has got some really good examples of what's wrong with software today. His book blog (Suckbusters) covers [...]


Possibly related posts:<ol><li><a href='http://berbs.us/2006/06/peoplesoft-still-sucks/' rel='bookmark' title='Permanent Link: PeopleSoft Still Sucks'>PeopleSoft Still Sucks</a></li>
<li><a href='http://berbs.us/2007/01/symantec-mysupport-follow-up/' rel='bookmark' title='Permanent Link: Symantec MySupport Follow-up'>Symantec MySupport Follow-up</a></li>
<li><a href='http://berbs.us/2007/03/prerequisites-if-youre-creating-a-desktop-or-web-application/' rel='bookmark' title='Permanent Link: Prerequisites if You’re Creating a Desktop or Web Application'>Prerequisites if You’re Creating a Desktop or Web Application</a></li>
<li><a href='http://berbs.us/2006/10/thinking-about-software-and-lock-in/' rel='bookmark' title='Permanent Link: Thinking About Software and Lock-in'>Thinking About Software and Lock-in</a></li>
<li><a href='http://berbs.us/2004/10/great-software/' rel='bookmark' title='Permanent Link: Great Software'>Great Software</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I’m in the middle of an <em>absolutely awesome</em> <a href="http://www.itconversations.com/series/technometria.html" >Technometria podcast</a> with David Platt, author of the book <a href="http://www.whysoftwaresucks.com/" >Why Software Sucks</a>. The episode is titled, appropriately enough, <a href="http://www.windley.com/archives/2007/01/why_software_sucks_the_podcast.shtml" >Why Software Sucks, the Podcast</a>. It’s very much worth checking out.</p>

<p>David has got some really good examples of what’s wrong with software today. His book blog (<a href="http://www.suckbusters.com/" >Suckbusters</a>) covers some of the same ones he talks about in the podcast. His basic thesis is that people don’t care about the inner workings of an application — they only care about completing the task they’re doing. Like he says, people don’t go to Home Depot and buy a drill because they just want a drill — they want the <em>holes</em> the drill lets them make. That may seem like a really simple and obvious observation, but developers forget it all the time. </p>

<p>One of my recent pet peeves is programmers who assume you’re using their web application all the time. One example is <a rel="nofollow" href="http://mycheckfree.com" >MyCheckFree.com</a> — an online bill pay service that we’re required to use by several companies. It works pretty well except for one thing — its internal messaging system used to inform you of any problems that occur while drawing from your account or paying a bill. It looks like this:</p>

<p><a rel="nofollow" href="http://www.flickr.com/photos/berberich/362880591/"  title="Photo Sharing"><img src="http://farm1.static.flickr.com/139/362880591_6cc638ce07.jpg" width="500" height="291" alt="MyCheckfree Message Inbox" /></a></p>

<p>This information is great, but there’s one problem: In order to see it, I need to log into their website. I usually only go to this site once a month when I pay our American Express bill (our others are on auto-pay). That’s probably going to be a little to late to fix any problems that have shown up in my inbox.</p>

<p>The better thing to do would be to just email me if my attention is needed. They’re already doing this when a new bill arrives and needs to be paid, so it wouldn’t be a big leap to do it here too. Sure, keep the message inbox on the site in case I want to see a history of messages, but don’t assume I’m checking in daily. <em>The world doesn’t revolve around you!</em></p>


<p>Possibly related posts:<ol><li><a href='http://berbs.us/2006/06/peoplesoft-still-sucks/' rel='bookmark' title='Permanent Link: PeopleSoft Still Sucks'>PeopleSoft Still Sucks</a></li>
<li><a href='http://berbs.us/2007/01/symantec-mysupport-follow-up/' rel='bookmark' title='Permanent Link: Symantec MySupport Follow-up'>Symantec MySupport Follow-up</a></li>
<li><a href='http://berbs.us/2007/03/prerequisites-if-youre-creating-a-desktop-or-web-application/' rel='bookmark' title='Permanent Link: Prerequisites if You’re Creating a Desktop or Web Application'>Prerequisites if You’re Creating a Desktop or Web Application</a></li>
<li><a href='http://berbs.us/2006/10/thinking-about-software-and-lock-in/' rel='bookmark' title='Permanent Link: Thinking About Software and Lock-in'>Thinking About Software and Lock-in</a></li>
<li><a href='http://berbs.us/2004/10/great-software/' rel='bookmark' title='Permanent Link: Great Software'>Great Software</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://berbs.us/2007/01/why-software-sucks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
