<?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>Troy Gilbert &#187; Web Dev</title>
	<atom:link href="http://troygilbert.com/category/web-dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://troygilbert.com</link>
	<description>Gamedev 2.0</description>
	<lastBuildDate>Sun, 15 Aug 2010 21:12:30 +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>Perch: The only CMS I&#8217;ve paid for (and would pay for again!)</title>
		<link>http://troygilbert.com/2010/08/perch-the-only-cms-ive-paid-for-and-would-pay-for-again/</link>
		<comments>http://troygilbert.com/2010/08/perch-the-only-cms-ive-paid-for-and-would-pay-for-again/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 21:12:25 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[perch]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://troygilbert.com/?p=269</guid>
		<description><![CDATA[Perch is a very interesting CMS package written in PHP. What will jump out at most developers first is the price: NOT free. While many folks use free CMS packages like WordPress these days, or pay for a hosted solution, it&#8217;s not often that you run into a package that&#8217;s both self-hosted and pay-to-use (per [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://grabaperch.com/">Perch</a> is a very interesting CMS package written in PHP. What will jump out at most developers first is the price: NOT free. While many folks use free CMS packages like <a href="http://wordpress.com/">WordPress</a> these days, or pay for a hosted solution, it&#8217;s not often that you run into a package that&#8217;s both self-hosted <em>and</em> pay-to-use (<em>per domain!</em>).</p>
<p>Of course, you get what you pay for, and Perch is definitely worth paying for… for some projects. Perch is very unique in its approach. Consider it an <em>emergent</em> CMS. Perch doesn&#8217;t have a predefined site structure that it builds on. Rather, you insert tags into your pages that CMS picks out and pairs with templates used for data-entry. It took me a while to wrap my head around it, but once I did I found it to be very powerful.</p>
<p>Because it&#8217;s not free (~$55 per domain), I&#8217;ve not used it at every opportunity. So far, I&#8217;ve reserved it for sites where someone else is picking up the tab, which is where it shines because that usually means I&#8217;m building a site for a non-technical user, thus Perch&#8217;s emergent CMS provides the minimal UI for that user&#8217;s site. For example, I used Perch to build a real-estate site for a friend of mine, <a href="http://williamsbrokerage.com/">Williams &#038; Associates</a>.</p>
<p>Originally, I was going to build this site on top of WordPress: pages for fixed content, categorized posts for news and property listings. I found a plugin that would provide a custom set of form fields for editing a post that would&#8217;ve worked well for the property listings… if I could have gotten it working. In the end, I was fighting WP more than it was helping me, and even if everything worked as planned there would still be a hugely complicated admin UI presented to the client whenever they wanted to make changes. (Yes, there are plugins to address that as well…)</p>
<p>I then ran across Perch. I loved its minimalism. It allowed me to build the site exactly as I wanted &mdash; which if you look at the HTML, you&#8217;ll see is pretty minimal, way more than a normal WP site would be &mdash; and then generate the admin-side of things automatically from its structure. Perch 1.0 definitely lacked some major features, such as image uploads and list re-ordering, but these have largely been addressed in recent updates (though they were slower coming than I would have hoped).</p>
<p>In fact, I was quite happy to see that when I recently went in to make some updates to the site, I ended up spending far more time in the admin UI editing text than I did touching any HTML structure, much of this thanks to Perch&#8217;s native support of Textile and Markdown.</p>
<p>Just last week, Perch 1.5.5 was announced, and I&#8217;m looking forward to playing with its new features. They include the notion of &#8220;apps&#8221; that I&#8217;m very interested in checking out. I do wish Perch was free, or significantly cheaper (say, $5 for non-commercial sites), or offered a subscription license (unlimited domains for a year) as it&#8217;s a perfect fit for lots of throw-away sites where a full-blown CMS would simply be overkill.</p>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2010%2F08%2Fperch-the-only-cms-ive-paid-for-and-would-pay-for-again%2F&amp;via=troygilbert&amp;text=Perch%3A+The+only+CMS+I%27ve+paid+for+%28and+would+pay+for+again%21%29&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2010/08/perch-the-only-cms-ive-paid-for-and-would-pay-for-again/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Grand Compromise</title>
		<link>http://troygilbert.com/2010/05/the-grand-compromise/</link>
		<comments>http://troygilbert.com/2010/05/the-grand-compromise/#comments</comments>
		<pubDate>Mon, 03 May 2010 04:30:08 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[AS3 & Flash]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://troygilbert.com/?p=267</guid>
		<description><![CDATA[I propose the following Grand Compromise: The WHATWG and W3C revise the Canvas API to align with Flash&#8217;s Display List API. Adobe donates the Flash Player to the WebKit project to serve as an initial implementation of the revised Canvas API. Apple, Google and Microsoft adopt and implement the revised Canvas API in all of [...]]]></description>
			<content:encoded><![CDATA[<p>I propose the following Grand Compromise:</p>
<ol>
<li>The WHATWG and W3C revise the Canvas API to align with Flash&#8217;s Display List API.</li>
<li>Adobe donates the Flash Player to the WebKit project to serve as an initial implementation of the revised Canvas API.</li>
<li>Apple, Google and Microsoft adopt and implement the revised Canvas API in all of their desktop and mobile browsers.</li>
</ol>
<p>I think this is an ideal compromise: everyone gives a little, everyone gains a lot. There are no losers.</p>
<p>I&#8217;ll address each point in more detail this week.</p>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2010%2F05%2Fthe-grand-compromise%2F&amp;via=troygilbert&amp;text=The+Grand+Compromise&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2010/05/the-grand-compromise/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Club Treasure World</title>
		<link>http://troygilbert.com/2010/03/club-treasure-world/</link>
		<comments>http://troygilbert.com/2010/03/club-treasure-world/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 17:14:59 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[AS3 & Flash]]></category>
		<category><![CDATA[Game Dev]]></category>
		<category><![CDATA[Mockingbird]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[aspyr]]></category>
		<category><![CDATA[robotlegs]]></category>
		<category><![CDATA[smartfox]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://troygilbert.com/?p=246</guid>
		<description><![CDATA[Last week saw the launch of Club Treasure World, the latest project powered by Mockingbird. Built in collaboration with Aspyr over the last four months, it&#8217;s the biggest project yet using our game making tech. I suggest visiting CTW to get the full run-down of what&#8217;s offered, but a quick description: CTW is place for [...]]]></description>
			<content:encoded><![CDATA[<p>Last week saw the launch of <a href="http://www.clubtreasureworld.com/">Club Treasure World</a>, the latest project powered by <a href="http://mockingbirdgames.com/">Mockingbird</a>. Built in collaboration with <a href="http://www.aspyr.com/">Aspyr</a> over the last four months, it&#8217;s the biggest project yet using our game making tech.</p>
<p>I suggest visiting <a href="http://www.clubtreasureworld.com/">CTW</a> to get the full run-down of what&#8217;s offered, but a quick description: CTW is place for kids (and adults!) to build their own games and &#8220;chat worlds&#8221; to share with their friends. Everything is built from treasures that folks can purchase through micro-transactions or earn using the Nintendo DS game <a href="http://offworld.com/2009/07/the-war-drivers-delight-wifi-t.html">Treasure World</a> which Aspyr shipped last year.</p>
<p>CTW was the first project I used <a href="http://www.robotlegs.org/">Robotlegs</a> on. Even though we didn&#8217;t use it extensively—the other developer on the project was not familiar with dependency injection—it provided a nice solid architecture to jump off of. And due to its minimal nature, even when we weren&#8217;t leveraging it, it was never in the way.</p>
<p>While we were working on this project I also started several other smaller projects leveraging Robotlegs (none yet released) and have gradually refined my own workflow with it. I&#8217;m still a fan, though I&#8217;m quite curious about <a href="http://swizframework.org/">Swiz</a> because it appears to be even <em>more</em> minimal, if that can be believed. I am <strong>completely</strong> sold on the idea of dependency injection and have started applying it to my API designs.</p>
<p>My latest Robotlegs project is also my first project to leverage Rob Penner&#8217;s excellent <a href="http://github.com/robertpenner/as3-signals">AS3 Signals</a>. These two together have significantly cleaned up my code and are definitely quashing many of the architectural issues I ran into when developing the <a href="http://playmockingbird.com/designer">original Mockingbird app</a>. In fact, I&#8217;m itching to go back and rebuild the whole app and site—not to add features but to clean up the codebase in such a way that it&#8217;d be ready for some <em>rapid</em> feature addition in the future. Robotlegs definitely provides a very agile framework.</p>
<p>For CTW we also used <a href="http://www.smartfoxserver.com/">SmartFoxServer</a> for the first time. In the end, I was less enthused about this choice. While it got us up and running really fast with it&#8217;s simple API and built-in chat functionality, it was a pain to develop with and debug, and I wouldn&#8217;t choose to use it again. The API originates from AS1/AS2, so there&#8217;s very little type safety and none of the current AS3 conventions. The documentation leaves out a huge amount of caveats present in the API that don&#8217;t necessarily make sense, even though it&#8217;s clear from the support forums that developer after developer encounter the same issue. The next time around I plan on using a more robust option, like <a href="http://www.electro-server.com/">ElectroServer</a>, or possibly the still-in-alpha <a href="http://www.unionplatform.com/">Union Platform</a>.</p>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2010%2F03%2Fclub-treasure-world%2F&amp;via=troygilbert&amp;text=Club+Treasure+World&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2010/03/club-treasure-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cute.</title>
		<link>http://troygilbert.com/2008/11/cute/</link>
		<comments>http://troygilbert.com/2008/11/cute/#comments</comments>
		<pubDate>Sat, 01 Nov 2008 05:42:19 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://troygilbert.com/2008/11/01/cute/</guid>
		<description><![CDATA[SIDEROLLER.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sideroller.com/">SIDEROLLER</a>.</p>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2008%2F11%2Fcute%2F&amp;via=troygilbert&amp;text=Cute.&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2008/11/cute/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Text-to-Movie</title>
		<link>http://troygilbert.com/2008/10/text-to-movie/</link>
		<comments>http://troygilbert.com/2008/10/text-to-movie/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 19:13:52 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[Movies]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://troygilbert.com/2008/10/23/text-to-movie/</guid>
		<description><![CDATA[Text-to-Movie by xtranormal. Very cool. Reading the &#8220;about us&#8221; page sounds familiar. They&#8217;re clearly wanting to do the same thing with movies that we&#8217;re doing with games. Nice metaphor they&#8217;ve taken advantage of is the notion of a &#8220;script&#8221; (i.e. typed dialogue and stage direction) as a fundamental component of movies. People get that, they [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xtranormal.com/">Text-to-Movie by xtranormal</a>. Very cool. Reading the &#8220;about us&#8221; page sounds familiar. They&#8217;re clearly wanting to do the same thing with movies that we&#8217;re doing with games.</p>
<p>Nice metaphor they&#8217;ve taken advantage of is the notion of a &#8220;script&#8221; (i.e. typed dialogue and stage direction) as a fundamental component of movies. People get that, they can wrap their heads around it. I think we&#8217;re close to finding the same thing with games, but the metaphor is not quite as concrete yet.</p>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2008%2F10%2Ftext-to-movie%2F&amp;via=troygilbert&amp;text=Text-to-Movie&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2008/10/text-to-movie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refactoring Mockingbird: Hypermedia as the Engine of Application State</title>
		<link>http://troygilbert.com/2008/10/refactoring-mockingbird-hypermedia-as-the-engine-of-application-state/</link>
		<comments>http://troygilbert.com/2008/10/refactoring-mockingbird-hypermedia-as-the-engine-of-application-state/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 04:34:17 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[Mockingbird]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://troygilbert.com/2008/10/13/refactoring-mockingbird-hypermedia-as-the-engine-of-application-state/</guid>
		<description><![CDATA[I&#8217;ve seen this discussed several times in my REST research (including the original REST paper), but I found this to be the most straightforward explanation of why it&#8217;s advantageous: Peter Williams &#8211; Hypermedia as the Engine of Application State. Mockingbird&#8217;s REST API is pretty straightforward because documents are constructed on the client and the server [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen this discussed several times in my REST research (including the original REST paper), but I found this to be the most straightforward explanation of why it&#8217;s advantageous:</p>
<p><a href="http://barelyenough.org/blog/2007/05/hypermedia-as-the-engine-of-application-state/">Peter Williams &#8211; Hypermedia as the Engine of Application State</a>.</p>
<p>Mockingbird&#8217;s REST API is pretty straightforward because documents are constructed on the client and the server API essentially just loads and saves whole documents. But it&#8217;s intriguing that it could be completely encapsulated on the server by simply doing what the server already does for humans&#8230;</p>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2008%2F10%2Frefactoring-mockingbird-hypermedia-as-the-engine-of-application-state%2F&amp;via=troygilbert&amp;text=Refactoring+Mockingbird%3A+Hypermedia+as+the+Engine+of+Application+State&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2008/10/refactoring-mockingbird-hypermedia-as-the-engine-of-application-state/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spore&#8217;s Brilliant Trick For Uploading/Downloading Creatures</title>
		<link>http://troygilbert.com/2008/06/spores-brilliant-trick-for-uploadingdownloading-creatures/</link>
		<comments>http://troygilbert.com/2008/06/spores-brilliant-trick-for-uploadingdownloading-creatures/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 04:05:37 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[EA]]></category>
		<category><![CDATA[Game Design]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://troygilbert.com/?p=112</guid>
		<description><![CDATA[Will Wright&#8217;s Spore is coming soon. I&#8217;m looking forward to it. I still think SimCity4 is one of the most perfect games ever made (and still looks/plays competitively with the latest games out there), and there&#8217;s no debating whether or not The Sims franchise was/is a significant game design (and commercial) milestone. I wouldn&#8217;t be [...]]]></description>
			<content:encoded><![CDATA[<p>Will Wright&#8217;s Spore is coming soon. I&#8217;m looking forward to it. I still think SimCity4 is one of the most perfect games ever made (and still looks/plays competitively with the latest games out there), and there&#8217;s no debating whether or not The Sims franchise was/is a significant game design (and commercial) milestone. I wouldn&#8217;t be the first to suggest that Spore will be joining that illustrious crowd, though the missing &#8220;people&#8221; element (you know, homosapiens, actual human beings) will probably keep it from realizing the scope/breadth/depth of audience that The Sims has seen.</p>
<p>The Sporepedia, which serves as a clearing house for the most popular creatures created by players, employs a very clever (and very user-friendly) means to upload/download creatures: they <a href="http://gadgets.boingboing.net/2008/06/16/how-is-spore-hiding.html">embed the data in the PNG thumbnail of the creature</a>. Instead of having some custom data format that&#8217;s opaque to the user (and basically worthless after it hits their desktop except for importing straight into Spore), the user has a traditional PNG that they can trivially view on any modern browser/OS. Embedded in the alpha channel data of the PNG, though, is a bunch of data (about 1K according to some estimates).</p>
<p>Now, this is an old trick, and you can do it &#8220;officially&#8221; with PNGs in custom chunks or in JPEGs, etc. It&#8217;s possible in almost any well-structured format. But it&#8217;s a very clever, modern, web way of handling it. It allows for trivial sharing by the user through whatever means they&#8217;re accustomed to because sharing an image is an almost universal feature of any collaborative software. So, user&#8217;s can attach the thumbs to their e-mail, or post them to their Flickr account, or put them on Facebook or their MySpace page, or send them in an IM.</p>
<p>Consider this inspiration! I&#8217;m now officially on the look out for how I can apply this technique to Mockingbird. Embedding the game&#8217;s description in its screenshot? Encoding ActionScript into the action icons? I don&#8217;t know, but I&#8217;m going to find something. And you should, too! Incorporate this feature into your products today!</p>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2008%2F06%2Fspores-brilliant-trick-for-uploadingdownloading-creatures%2F&amp;via=troygilbert&amp;text=Spore%27s+Brilliant+Trick+For+Uploading%2FDownloading+Creatures&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2008/06/spores-brilliant-trick-for-uploadingdownloading-creatures/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Best. Resignation Letter. Ever.</title>
		<link>http://troygilbert.com/2008/06/best-resignation-letter-ever/</link>
		<comments>http://troygilbert.com/2008/06/best-resignation-letter-ever/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 21:41:36 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[Real Life]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://troygilbert.com/?p=111</guid>
		<description><![CDATA[Flickr&#8217;s co-founders Stewart Butterfield and Caterina Fake (husband/wife team) recently resigned from Yahoo!. Stewart wrote an incredible resignation letter. Of course, Valleywag calls it &#8220;bizarre&#8221;, &#8220;rambling&#8221; and &#8220;entertaining nonsense&#8221;, and a majority of the comments are no more flattering. I (and some of the comments) get it, though. It&#8217;s rather brilliant. Stewart reveals himself to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/">Flickr&#8217;s</a> co-founders Stewart Butterfield and Caterina Fake (husband/wife team) recently resigned from <a href="http://yahoo.com/">Yahoo!</a>. <a href="http://valleywag.com/5017424/stewart-butterfields-bizarre-resignation-letter-to-yahoo">Stewart wrote an incredible resignation letter</a>.</p>
<p>Of course, Valleywag calls it &#8220;bizarre&#8221;, &#8220;rambling&#8221; and &#8220;entertaining nonsense&#8221;, and a majority of the comments are no more flattering. I (and some of the comments) get it, though. It&#8217;s rather brilliant. Stewart reveals himself to be a well-rounded, liberally-educated guy who can actually write! Of course, I could feel that in all of the presentations I&#8217;ve seen from the Flickr founders who always come across as having a real grasp on the human nature intrinsic to a social website. I think we (designers of interactive content, whether it be the web or games) could learn a huge amount from Flickr and the views of its creators.</p>
<p>In fact, I <a href="http://troygilbert.com/2008/05/06/its-a-beautiful-thing/">wrote about this not too long ago (from the UI designer at Flickr)</a>. Read <a href="http://www.alistapart.com/articles/fromlittlethings">the essay</a>. Get inspired to create something for <em>people</em>.</p>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2008%2F06%2Fbest-resignation-letter-ever%2F&amp;via=troygilbert&amp;text=Best.+Resignation+Letter.+Ever.&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2008/06/best-resignation-letter-ever/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Are magic MVC frameworks really helping me?</title>
		<link>http://troygilbert.com/2008/05/are-magic-mvc-frameworks-really-helping-me/</link>
		<comments>http://troygilbert.com/2008/05/are-magic-mvc-frameworks-really-helping-me/#comments</comments>
		<pubDate>Wed, 07 May 2008 05:28:17 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://troygilbert.com/?p=102</guid>
		<description><![CDATA[As a preface, please read this about &#8220;magic&#8221; code. It wasn&#8217;t that long ago that I gushed about Cake. But after doing some development with it (beta sites for Mockingbird), and after recently working on our current site (which runs on top of Pligg, kinda), I&#8217;ve started to kinda think, &#8220;hey, what are these guys [...]]]></description>
			<content:encoded><![CDATA[<p>As a preface, please read <a href="http://www.expatsoftware.com/articles/2008/05/no-magic.html">this about &#8220;magic&#8221; code</a>.</p>
<p>It wasn&#8217;t that long ago that I <a href="http://troygilbert.com/2007/08/21/piece-of-cake/">gushed about Cake</a>. But after doing some development with it (beta sites for <a href="http://playmockingbird.com/">Mockingbird</a>), and after recently working on our current site (which runs on top of <a href="http://pligg.com/">Pligg</a>, kinda), I&#8217;ve started to kinda think, &#8220;hey, what are these guys actually doing for me?&#8221;</p>
<p>First, I am still baffled that with all of the auto-sniffing-magic that these frameworks (Rails, et al) do I still have to describe by database schema in two places. I mean, come on, Microsoft solved this problem in .NET. Sure, they do it through code-generation (XML database schema creates the actual underlying database as well as generating all of the C# classes used to interact with it in a completely typed, validated way). But with Cake (and with Rails, AFAIK) I have to go off and do DB admin creating tables and indices and such, and then I have to come and create some parallel classes in the framework. Sure, I don&#8217;t have to specify the individual fields, it&#8217;ll automatically attempt to map unknown properties for me&#8230; unless I want to build-in validation, or relationships, or serialization&#8230; you know, trivial little things that only <em>serious</em> webapps would need&#8230; ahem. Sure.</p>
<p>Second, I&#8217;m just terrified by the amount of decision-making that is made each time &#8220;through&#8221; the framework when one of my pages is served up. Sure, op-code caching alleviates some of this, but really, should I be executing 10x the necessary amount of code to save me from having to write out a dozen lines of completely self-explanatory, easy-peasy lines of code?</p>
<p>Maybe I&#8217;m missing something&#8230; maybe these guys are doing a lot of stuff for me I&#8217;m not realizing. But I get the itch&#8217;n feeling that they&#8217;re really just providing a different syntax (with some defaults that make building a bare bones blog in 15 minutes a snap) on bits that are already there, at a lower level.</p>
<p><strong>Routing</strong> &mdash; mod_rewrite/.htaccess is the only routing tool you need. I almost guarantee you&#8217;re not doing anything in your webapp that requires some kind of routing logic that can&#8217;t be handled elegantly with mod_rewrite/.htaccess.</p>
<p><strong>Controller</strong> &mdash; this is the PHP file that your mod_rewrite directs queries to. All you need to do is practice some self-control and keep all of the aesthetic bits out of this PHP file. Just do the work, the logic of the user&#8217;s request. When you done all your work, just pass the results off to the view.</p>
<p><strong>View</strong> &mdash; go download <a href="http://www.smarty.net/">Smarty</a>. Just use it. Flickr uses it and they get more traffic than you ever will. It&#8217;s a templating engine designed with the viewpoint that the template should *only* be the view and that the designer and programmer are at <em>least</em> independent tasks if not entirely different individuals.</p>
<p><strong>Model</strong> &mdash; I was very frustrated with Cake when I tried to combine it with Pligg. Pligg had a particular table/field naming scheme, and Cake had a similar (but different enough) scheme. There was no combination of tweaking that would get one to be compatible with the other. Writing the necessary SQL queries to bridge the gap manually was trivial. And I knew them all along &ndash; in fact, I used them when debugging the naming scheme in an attempt to work backwards. :) Just grab <a href="http://justinvincent.com/docs/ezsql/ez_sql_help.htm">ezSQL</a>, that&#8217;s as simplified and automatic as your database interaction <em>should be</em>, because the database is critical (and powerful) if you don&#8217;t discount it as just a big property list.</p>
<p><strong>Helpers, Components, Behaviors</strong> &mash; these frameworks all have a bunch of additional &#8220;utility&#8221; features that basically just make life easier as a webapp developer. These could be worth it, if they&#8217;re you&#8217;re particular flavor. But I bet for each one there&#8217;s a strong, healthier open-source version that does more.</p>
<p>Maybe I should put my money where my mouth is? Maybe so. How cleanly could I build a webapp without a framework (and without implicitly building one myself)? In other words, have we heaped one abstraction too many on the pile?</p>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2008%2F05%2Fare-magic-mvc-frameworks-really-helping-me%2F&amp;via=troygilbert&amp;text=Are+magic+MVC+frameworks+really+helping+me%3F&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2008/05/are-magic-mvc-frameworks-really-helping-me/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>It&#8217;s a beautiful thing.</title>
		<link>http://troygilbert.com/2008/05/its-a-beautiful-thing/</link>
		<comments>http://troygilbert.com/2008/05/its-a-beautiful-thing/#comments</comments>
		<pubDate>Wed, 07 May 2008 03:25:59 +0000</pubDate>
		<dc:creator>Troy</dc:creator>
				<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://troygilbert.com/?p=101</guid>
		<description><![CDATA[From From Little Things, Big Things Grow, an A List Apart essay by George Oates, UI Designer, Flickr: Treat your place like your home: welcome people, fix them a drink and make them feel comfortable. Before you know it, your guests will be chatting amongst themselves, the party will be pumping, and people will be [...]]]></description>
			<content:encoded><![CDATA[<p>From <em><a href="http://www.alistapart.com/articles/fromlittlethings">From Little Things, Big Things Grow</a></em>, an <em>A List Apart</em> essay by George Oates, UI Designer, <a href="http://flickr.com/">Flickr</a>:</p>
<blockquote><p>Treat your place like your home: welcome people, fix them a drink and make them feel comfortable. Before you know it, your guests will be chatting amongst themselves, the party will be pumping, and people will be making plans together.</p></blockquote>
<div class="tw_button" style="margin-bottom: 10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Ftroygilbert.com%2F2008%2F05%2Fits-a-beautiful-thing%2F&amp;via=troygilbert&amp;text=It%27s+a+beautiful+thing.&amp;lang=en&amp;count=horizontal"  class="twitter-share-button">Tweet</a></div>]]></content:encoded>
			<wfw:commentRss>http://troygilbert.com/2008/05/its-a-beautiful-thing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
