<?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>Fenix Blog &#187; Labs</title>
	<atom:link href="http://fenix-solutions.com/blog/category/labs/feed/" rel="self" type="application/rss+xml" />
	<link>http://fenix-solutions.com/blog</link>
	<description>Web technology fanatics</description>
	<lastBuildDate>Thu, 22 Jul 2010 19:27:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Cutting Through PR-Speak &#8211; Part 1: HTML5 Video</title>
		<link>http://fenix-solutions.com/blog/2010/06/28/cutting-through-pr-speak-part-1-html5-video/</link>
		<comments>http://fenix-solutions.com/blog/2010/06/28/cutting-through-pr-speak-part-1-html5-video/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 20:03:50 +0000</pubDate>
		<dc:creator>James King</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Labs]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[web standards]]></category>

		<guid isPermaLink="false">http://fenix-solutions.com/blog/?p=318</guid>
		<description><![CDATA[HTML5 has certainly been making the rounds in the news lately. With Apple&#8217;s on-going PR campaign against Adobe&#8217;s Flash technology, comes mounting misconceptions about what exactly HTML5 is, what it can do, and what it means for end-users. I hope to clarify several of the most glaring misconceptions over the next few posts. Today I&#8217;d [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><img src="http://fenix-solutions.com/blog/wp-content/uploads/2010/06/html5-video.jpg" alt="" title="html5-video" width="500" height="217" class="aligncenter size-full wp-image-329" /></p>
<p>HTML5 has certainly been making the rounds in the news lately. With Apple&#8217;s on-going PR campaign against Adobe&#8217;s Flash technology, comes mounting misconceptions about what exactly HTML5 is, what it can do, and what it means for end-users.</p>
<p>I hope to clarify several of the most glaring misconceptions over the next few posts. Today I&#8217;d like to focus on the most publicized and misunderstood issue of HTML5 video.<br />
<span id="more-318"></span></p>
<h2>HTML5 is not a complete standard</h2>
<p>Before we even get into video itself, it is worth noting that for all the publicity HTML5 is getting as the next big thing, it isn&#8217;t even final. W3C, the standards body responsible for HTML5, still classifies the HTML5 spec as a &#8220;<a href="http://www.w3.org/TR/html5/">Working Draft</a>&#8221; as of this writing.</p>
<p>This means that none of the features are final and are still subject to change. While many browser makers are being pro-active in adding support for the proposed HTML5 features, there is inconsistency in implementation between browsers and level of support.</p>
<p>In other words &#8211; HTML5 is not supported in its entirety by any browser currently available.</p>
<h2>Why HTML5 video?</h2>
<p>One of the biggest areas of growth for Flash has been in delivering video. Flash was probably never best suited to the task, but due to the market penetration the plug-in had across the Internet, it evolved into the defacto standard for delivering web video.</p>
<p>HTML5 seeks to alleviate the web&#8217;s reliance on a single plug-in for video by bringing native video support to the browser negating the need for a plug-in. There are many high-profile live implementations of HTML5 video on the web today that target modern browsers and Apple&#8217;s mobile devices like <a href="http://youtube.com/html5">YouTube</a>, Vimeo, Time Magazine, NPR, and others.</p>
<p>However, while Apple is aggressively pushing HTML5 video for their iOS devices and modern browsers as an open alternative to Flash, what isn&#8217;t open is the video codec Apple has chosen for their implementation.</p>
<h2>What is a codec, and why does it matter?</h2>
<p>A codec is a method of taking raw audio and video and compressing them into a single file for distribution, and subsequently decompressing the file for playback. Raw video is extremely large, and so codecs serve to produce the best possible size to quality ratio. For web video specifically, this is extremely important.</p>
<p>Several notable browser and smartphone makers like Apple, Google, and Microsoft are currently (or intend to in Microsoft&#8217;s case) supporting the popular H.264 codec for HTML5 video. However several other bodies oppose this seemingly ad-hoc choice due to the fact that the H.264 codec is not open source and requires licensing. Organizations like Mozilla and Opera have posed the argument that <a href="http://shaver.off.net/diary/2010/01/23/html5-video-and-codecs/">an open video implementation without an open codec</a> is two steps forward, but one step back. </p>
<p>However, the counter-argument in favour of H.264 generally revolves around the notion that H.264 is already widely adopted, has excellent performance, quality and compression, the licensing terms are clear, and all patent claims against the codec are accounted for. Contrasted to some of the open source alternatives proposed like <a href="http://www.theora.org/">Theora</a>, it isn&#8217;t clear whether or not they may infringe on existing patents, which makes them somewhat risky to use. In addition, both Microsoft and Apple are <a href="http://www.mpegla.com/main/programs/AVC/Pages/Licensors.aspx">members of the licensing organization</a> for the codec, which may also explain their preference.</p>
<p>To muddy the waters further, a new video codec called VP8 has recently been acquired by Google and has been released as open-source. Mozilla, Opera, Adobe, and Google, are all pushing for this codec to be considered for HTML5 video via the <a href="http://www.webmproject.org/">WebM Project</a>.</p>
<h2>So what? Does an open codec matter?</h2>
<p>There are valid opinions on either side of this debate. It is logical to want to see an open source codec used in conjunction with an open standard like HTML5. Otherwise every piece of software that plays or authors video intended for the web will need to pay licensing fees for use of the codec. Others consider this a fair price to pay for access to a mature, robust codec with high-quality compression.</p>
<p>Personally, I don&#8217;t feel comfortable handing control of such an important piece of the Internet to a private organization. Much like the arguments levied against Adobe&#8217;s proprietary Flash technology, trading video locked into Adobe&#8217;s Flash is in a way much the same as video locked into MPEG-LA&#8217;s codec. Alternatively, browser makers could simply license and build the Flash plug-in into their browsers and achieve the same effect.</p>
<p>If we&#8217;re going to go through the effort of converting the Internet away from proprietary video formats, we might as well go all the way.</p>
<h2>HTML5 video is not a catch-all solution</h2>
<p>While the prospect of an open video format is extremely enticing, there are several cases where it will probably never be used. A prime example is the distribution of broadcast television and film. Currently networks stream their content online and support it with advertisements. Since this video is locked away in a plug-in like Flash or Silverlight, the viewers of these streams are unable to download and re-distribute the content.</p>
<p>HTML5 provides no method of content or copy protection, which means it will probably never be used to distribute this sort of content.</p>
<p>What this means for end-users is the continued use of closed, proprietary technology &#8211; whether it be plug-ins like Flash or Silverlight, or platforms like iOS applications.</p>
<p>So while HTML5 video will clearly be a great step forward for web video, it will not fully replace Flash &#8211; at least not in this iteration. Therefore while Apple has valid reasons for not supporting Flash on iOS (namely Flash&#8217;s notoriously poor performance), it cannot be denied that Flash video will remain a significant source of copyrighted video content on the web until a better solution emerges.</p>
]]></content:encoded>
			<wfw:commentRss>http://fenix-solutions.com/blog/2010/06/28/cutting-through-pr-speak-part-1-html5-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft No Longer a Barrier to Using Open Source Web Apps</title>
		<link>http://fenix-solutions.com/blog/2010/04/26/microsoft-no-longer-a-barrier-to-using-open-source-web-apps/</link>
		<comments>http://fenix-solutions.com/blog/2010/04/26/microsoft-no-longer-a-barrier-to-using-open-source-web-apps/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 18:50:31 +0000</pubDate>
		<dc:creator>James King</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://fenix-solutions.com/blog/?p=301</guid>
		<description><![CDATA[When people think of open source, the things that immediately come to mind are products and tools that many consider to be polar opposites of Microsoft offerings. Firefox vs Internet Explorer Linux vs Windows Apache vs IIS PHP vs ASP.NET MySQL vs MS SQL Open Office vs Microsoft Office If you run an organization that [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-302" title="iis_heart_php" src="http://fenix-solutions.com/blog/wp-content/uploads/2010/04/iis_heart_php.jpg" alt="" width="500" height="217" /></p>
<p>When people think of open source, the things that immediately come to mind are products and tools that many consider to be polar opposites of Microsoft offerings.</p>
<p>Firefox vs Internet Explorer<br />
Linux vs Windows<br />
Apache vs IIS<br />
PHP vs ASP.NET<br />
MySQL vs MS SQL<br />
Open Office vs Microsoft Office</p>
<p>If you run an organization that heavily relies on Microsoft technologies like Windows Server and Microsoft SQL, you may immediately assume this means you&#8217;re out of luck unless you&#8217;re willing to invest in open source web infrastructure &#8211; the most popular of which is known as the &#8220;LAMP&#8221; (Linux, Apache, MySQL, PHP) stack.</p>
<p>Luckily this is no longer true. <span id="more-301"></span>Microsoft has made a concerted effort to support PHP on Windows Server and Internet Information Services (IIS). While PHP has always been able to run on IIS, the performance and stability was widely considered to be poor and as such, Windows was generally avoided as a viable server environment for PHP applications.</p>
<p>However, as of last year, Microsoft has begun official support for PHP on the Windows Server platform and is publishing official PHP extensions to natively support Microsoft SQL as well. This support has made the Windows Server environment a viable platform for popular open source CMS tools like Drupal, Joomla and WordPress.</p>
<p>In fact, if you visit the <a href="http://php.iis.net">PHP microsite on http://iis.net</a>, you&#8217;ll find easy install tools to get PHP running on IIS along with bundles of popular open source projects.</p>
<p>Support doesn&#8217;t end there &#8211; Microsoft is also addressing scaling and compatibility concerns by publishing a <a href="http://www.iis.net/download/URLRewrite">URL rewriter</a> which is compatible with Apache&#8217;s popular mod_rewrite and a <a href="http://www.iis.net/download/WinCacheForPhp">caching engine</a>.</p>
<p>This move of support from Microsoft is a powerful indicator of how strong and successful the open source movement has been across the web. Microsoft could no longer afford to ignore the prevalence of PHP and rising popularity of open source tools in the enterprise space.</p>
<p>Many open-source advocates may dismiss this support as a &#8220;if you can&#8217;t beat &#8216;em, join &#8216;em&#8221; move on Microsoft&#8217;s part, and I think that&#8217;s sadly missing the point. Regardless of Microsoft&#8217;s intentions in throwing support behind PHP and popular open-source web applications, the key point to take away from this is that Microsoft has dropped several barriers companies have faced in the past when looking to leverage these technologies.</p>
]]></content:encoded>
			<wfw:commentRss>http://fenix-solutions.com/blog/2010/04/26/microsoft-no-longer-a-barrier-to-using-open-source-web-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why You&#8217;ll Hate Drupal</title>
		<link>http://fenix-solutions.com/blog/2010/01/28/why-youll-hate-drupal/</link>
		<comments>http://fenix-solutions.com/blog/2010/01/28/why-youll-hate-drupal/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 23:00:14 +0000</pubDate>
		<dc:creator>James King</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://fenix-solutions.com/blog/?p=284</guid>
		<description><![CDATA[I have a search I monitor in my Twitter client for &#8220;drupal&#8220;. As the awareness of the tool grows in traditional and new media (especially following the high-profile relaunch of whitehouse.gov), the relative backlash in the feed is startling. I don’t really blame people, though. Drupal probably isn’t for them, and drupal.org and most Drupal advocates [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://fenix-solutions.com/blog/wp-content/uploads/2010/01/strangle_drupal.jpg" alt="" title="strangle_drupal" width="212" height="214" style="float:left; margin: 0 20px 10px 0" />I have a search I monitor in my Twitter client for &#8220;<a href="http://twitter.com/#search?q=drupal">drupal</a>&#8220;. As the awareness of the tool grows in traditional and new media (especially following the high-profile relaunch of <a href="http://whitehouse.gov">whitehouse.gov</a>), the relative backlash in the feed is startling.</p>
<p>I don’t really blame people, though. Drupal probably isn’t for them, and drupal.org and most Drupal advocates are doing a terrible job of setting expectations. So much so that I feel this trend of pushing Drupal onto everyone for everything is hurting Drupal’s reputation and perception.<span id="more-284"></span></p>
<p>Drupal is NOT in any way, shape or form a turnkey solution. You cannot download and install the package from drupal.org and get anything resembling a functional, maintainable website. Drupal is NOT a content management <em>system</em>, it&#8217;s a content management <em>platform</em>.</p>
<p>To most people that distinction is meaningless and does not adjust expectations. All one has to do is count how many times a day people ask on Twitter whether they should choose “WordPress, Joomla or Drupal” to recognize where people’s expectations are when talking about Drupal.</p>
<p>When first installing Drupal 6.x, most people quickly realize:</p>
<ul>
<li>It has no WYSIWYG</li>
<li>It does not generate search engine friendly URLs</li>
<li>It has no media management</li>
<li>Does not produce image galleries or embed video</li>
<li>Has a confusing, cryptic admin interface that doesn’t distinguish itself from the user-facing site</li>
</ul>
<p>To a user expecting something like WordPress, Drupal looks like complete and utter garbage, and they’re quick to express this point of view on blogs, twitter, message boards, Facebook, LinkedIn and in comments on posts like this.</p>
<p>Drupal is designed this way intentionally (as counter-intuitive as this may seem). No two websites are the same, and so Drupal tries to make as few assumptions about what kind of site you’re trying to make as possible. Upon installing Drupal, the expectation is that the user then proceeds to head over to <a href="http://drupal.org/project/Modules">http://drupal.org/project/Modules</a>, browse the buffet of functionality and proceed to “build your own content management system”… but no one tells the user that.</p>
<p>With the right amount of patience, research and experience, Drupal has the capability to produce massive, complex, highly customized site management tools for any size organization. This is the main reason many web shops are shifting their business toward providing professional Drupal services. In a nutshell, it lets developers build very customized sites for clients quickly and at lower costs.</p>
<p>There is <a href="http://developmentseed.org/blog/2009/oct/28/smallcore-manifesto-help-us-build-better-teddy-bear">much debate</a> <a href="http://smallcore.org/">happening</a> within the Drupal community about whether or not the current approach of shipping the core product with as little as possible is the correct one or not. Some feel shipping with a WYSIWYG and a more concrete set of metaphors is necessary for Drupal’s wide adoption while others feel this takes away from Drupal’s core strengths.</p>
<p>Whichever side of the fence you currently sit on, I think we can all agree that the current state of the messaging to new users sets errant expectations and new users may look upon the tool more favourably if they come into it with the expectation that upon installing Drupal, their job is only starting.</p>
<p><a href="http://acquia.com">Acquia</a>, Drupal founder <a href="http://buytaert.net/">Dries Buytaert</a>&#8216;s commercial venture, is betting on their Drupal 7 based hosted service,<a href="http://drupalgardens.com">Drupal Gardens</a>, to start changing perceptions by demonstrating what a &#8220;productised&#8221; implementation of Drupal can do. Whether Gardens will help or hurt the cause remains to be seen as the product is in invite-only beta as of this writing, and Drupal 7 itself has not reached a stable release yet.</p>
<p>Even still, Drupal isn&#8217;t for everyone or every site, and that&#8217;s OK &#8211; I&#8217;m a big believer in selecting the right tool for the job. If you&#8217;ve found yourself in a position where you&#8217;re unsure about whether or not your organization is suited to jumping on the Drupal bandwagon, check out our <a href="http://opensource.fenix-solutions.com/">literature on open source software</a>, and/or <a href="http://fenix-solutions.com/hireus.php">give us a shout</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://fenix-solutions.com/blog/2010/01/28/why-youll-hate-drupal/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>9 Tips for Improving Drupal Performance</title>
		<link>http://fenix-solutions.com/blog/2009/12/09/tips-for-improving-drupal-performance/</link>
		<comments>http://fenix-solutions.com/blog/2009/12/09/tips-for-improving-drupal-performance/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 21:18:31 +0000</pubDate>
		<dc:creator>James King</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://fenix-solutions.com/blog/?p=270</guid>
		<description><![CDATA[As anyone who has developed a Drupal site with devel module&#8216;s query logging on can tell you, a Drupal implementation can quickly get out of control when it comes to hammering the database. Personally, I&#8217;ve seen Drupal run well over 300 queries to render a single page. In a hosting setup where the bottlenecks exist [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="/blog/wp-content/uploads/go-go-drupal.jpg" alt="Run Drupal! Run!" /></p>
<p>As anyone who has developed a Drupal site with <a href="http://drupal.org/project/devel">devel module</a>&#8216;s query logging on can tell you, a Drupal implementation can quickly get out of control when it comes to hammering the database. Personally, I&#8217;ve seen Drupal run well over 300 queries to render a single page. In a hosting setup where the bottlenecks exist at the memory usage and MySQL levels (which refers to nearly all non-dedicated hosting packages), this can quickly become a problem.</p>
<p>I&#8217;ve summarized a series of simple setup and configuration tips behind the jump that can help any site running Drupal 6.x improve performance and the subsequent user experience as a result.<span id="more-270"></span></p>
<h2>1 &#8211; Disable Re-Building of Theme Registry</h2>
<p>When a Drupal implementation is under development, themers and/or developers will often enable an option that forces Drupal to rebuild the theme registry on every page load. This registry tells Drupal what template files and overrides exist in the theme&#8217;s directory. This is a very costly operation and would cause noticeable slow down on any production website. It is important to disable this option upon going live. Under Administer &gt; Appearance choose the Configure option for your theme and scroll to the bottom of the page. Make sure the option named &#8220;Rebuild theme registry on every page.&#8221; is disabled.</p>
<h2>2 &#8211; Enable Page and Block Cache</h2>
<p>Another simple option to enable is Drupal&#8217;s caching engine (Administer &gt; Configuration &gt; Performance). When enabled, Drupal will render the page and associated blocks once, and then save that result in the database. This can drastically reduce the number of database calls run on a page since the results are pre-rendered.</p>
<p>A point to consider about caching is that the more interactive the site is, the less effective the cache may be. Especially if complex permissions are at play, Drupal won&#8217;t be able to effectively cache since most of the page content may change depending on the permissions of the currently logged in user.</p>
<p>Drupal&#8217;s caching engine is most effective for anonymous visitors &#8211; if your site is mostly &#8220;read only&#8221; and doesn&#8217;t have visitors logging in, caching can make a dramatic improvement in site load speed.</p>
<h2>3 &#8211; Increase Cache Lifetime</h2>
<p>An option for some sites may be to increase the cache lifetime. This determines how long Drupal will hold onto a cached result before it will re-generate the page. If you have frequently changing content, you may want to set the cache lifetime to only 5 minutes, but if your content doesn&#8217;t change often, an acceptable value may be several hours.</p>
<p>On high-traffic sites, the less often Drupal has to re-generate pages, the better.</p>
<h2>4 &#8211; Optimize JavaScript and CSS Files</h2>
<p>Also in the Performance settings is an option to optimize both JavaScript and CSS files. When enabled, Drupal will consolidate all CSS and JS files included on each page into a single file, and compress the code by removing whitespace. This will reduce the overall file size and improve page load speeds.</p>
<h2>5 &#8211; Disable Un-used Modules</h2>
<p>Due to the staggering array of available contrib modules listed on Drupal.org, it&#8217;s common to download and install dozens of modules to test out and see if they meet your site&#8217;s needs. In the process of doing this, it&#8217;s easy to forget to uninstall the modules you don&#8217;t end up using. Additionally, the default install of Drupal comes with a minimum number of modules pre-enabled. Again, if your site isn&#8217;t using it, there&#8217;s no reason to keep it enabled.</p>
<p>Drupal will fire callbacks for all enabled modules which may come with their own database queries. Be sure to take the time to clean out your enabled modules list before going live with a site.</p>
<h2>6 &#8211; Configure Cron to Run</h2>
<p>One thing that&#8217;s easy to overlook is setting up Drupal&#8217;s cron tasks to run. Most web hosts provide a way to configure &#8220;scheduled tasks&#8221; or &#8220;cron jobs&#8221; in the hosting panel. Drupal&#8217;s cron.php fires updates for RSS aggregators, launches the search indexer, and any tasks defined in installed modules. In addition, it will perform some basic maintenance tasks like deleting temporary files and clearing logs.</p>
<p>The Drupal installation guide <a href="http://drupal.org/cron">covers cron in detail</a> with several methods for configuring it.</p>
<h2>7 &#8211; Disable CCK Content Permissions</h2>
<p>While this tip technically falls under tip 5, I figure it&#8217;s important enough to be explicitly outlined. The CCK module comes with several sub-modules. One of which is &#8220;Content Permissions&#8221;. This enables site administrators to set permissions on a per-field basis. Unless your site absolutely needs per-field permissions, this is a no-brainer to disable.</p>
<p>The less permission checks your site has to run the better!</p>
<h2>8 &#8211; Disable Database Logging</h2>
<p>Again, another one that technically falls under tip 5, but I feel is especially important is disabling the database logging module. This module will log a wide variety of actions performed on the site to the database. If you&#8217;re the only administrator, this module&#8217;s usefulness is greatly reduced and should be turned off. Alternatively, you can enable the syslog module which ships with core instead. This will write the more technical log entries to the server&#8217;s standard log on the file system and save the database queries.</p>
<h2>9 &#8211; Use a Third Party Comment System</h2>
<p>This one isn&#8217;t necessarily Drupal specific, but an easy way to off-load quite a bit of processing on a popular site. Since Drupal&#8217;s caching system is far more effective when only serving to anonymous users, if the only reason you have user registration enabled is to allow them to write comments, you may consider off-loading that task to a free third party service like <a href="http://intensedebate.com/">Intense Debate</a> or <a href="http://disqus.com/">Disqus</a>. A small clip of javascript is all you need to include into your template (or include it via a block), to embed a robust comment system into your site. Also, if your visitors read other sites that use Intense Debate or Disqus and already have an account (or use OpenID), they&#8217;ll already have an account to comment on your site.</p>
<p>As of this writing, there is a <a href="http://drupal.org/project/disqus">published module</a> to add Disqus support as well.</p>
<hr />Hopefully you find some of these simple tips helpful in keeping your Drupal-powered site running at peak performance! When it comes to scaling Drupal, these hints are only the tip of the iceberg. Drupal is perfectly capable of supporting large, high-traffic websites with the right environment in place, but we&#8217;ll save some of the more advanced server-side tips for another post.</p>
]]></content:encoded>
			<wfw:commentRss>http://fenix-solutions.com/blog/2009/12/09/tips-for-improving-drupal-performance/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Has Google Wave &#8220;maxed out&#8221; Web 2.0?</title>
		<link>http://fenix-solutions.com/blog/2009/11/27/has-google-wave-maxed-out-web-2-0/</link>
		<comments>http://fenix-solutions.com/blog/2009/11/27/has-google-wave-maxed-out-web-2-0/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 18:28:42 +0000</pubDate>
		<dc:creator>James King</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[wave]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://fenix-solutions.com/blog/?p=241</guid>
		<description><![CDATA[As any software developer will tell you, there&#8217;s a limit to the number of times you can hack on a codebase before it&#8217;s no longer sustainable. When a piece of software, protocol, or standard of some kind is conceived, it is done with assumptions in mind. These assumptions ultimately lead to limitations, and those limitations ultimately [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="/blog/wp-content/uploads/Dont-look-under-the-hood.jpg" alt="" /></p>
<p><span style="background-color: #ffffff;">As any software developer will tell you, there&#8217;s a limit to the number of times you can hack on a codebase before it&#8217;s no longer sustainable. When a piece of software, protocol, or standard of some kind is conceived, it is done with assumptions in mind. These assumptions ultimately lead to limitations, and those limitations ultimately necessitate the need to come up with clever workarounds or, in the worst case scenario &#8211; hacks.<span id="more-241"></span></span></p>
<p>This leads me to a thought I had while trying to get the office Internet connection to work (read: configuring the network to use OpenDNS because our ISP&#8217;s DNS servers woefully unreliable) when a realization hit me. The Internet, as a whole, from the basic protocols driving the data through the tubes, all the way to the scripting languages rendering a good chunk of what you&#8217;re seeing on this page right now, is one giant, heavily error prone, endlessly band-aided hack.</p>
<h2>Hindsight is 20/20</h2>
<p>When the original group of folks sat down and came up with the idea of HTML and a browser, they could have never imagined something like, say, Google Wave one day running in that browser. However, here we are today, playing with a beta version which represents over two years of work by some of Google&#8217;s most brilliant engineers&#8230; and it barely works.</p>
<p>Yes, I did notice the clearly displayed beta tag in the corner, and I&#8217;m sure eventually Google will apply enough duct tape and chewing gum under the hood to give Google Wave the illusion of stability (Gmail and Google Maps both run great today), but the fact of the matter is that the brilliant, advanced technology powering most of the Internet&#8217;s slickest, most cutting edge applications just isn&#8217;t all that brilliant or advanced&#8230; and it&#8217;s starting to show in a big way.</p>
<h2>The March of Progress is More of a Crawl</h2>
<p>Web standards move at a glacial pace, but that&#8217;s only half the equation. The other half are the browsers that move even slower. The folks that govern web standards could release a radically up to date set of standards that have applications in mind, but that doesn&#8217;t mean developers would ever be able to actually use those standards as they are limited by the lowest common denominator of support  in the browser market.</p>
<p>In a world where a decade old browser (that had poor standards compliance when it launched) still commands a considerable market share, where does that leave the future of web applications? Even if we could wipe Internet Explorer 6 off the face of the earth tomorrow, today&#8217;s most bleeding edge standards are still simply additional hacks tacked onto an already rusty frame.</p>
<p>Developing Google Wave&#8217;s interface as a desktop application would be a trivial task relative to the amount of effort it&#8217;s taken so far just to get Google Wave to run within bare reason in a browser window. Why?</p>
<h2>Browsers Are Terrible Application Platforms</h2>
<h4><span style="color: #424242;">1 &#8211; HTML, CSS and Javascript are tools designed for displaying and manipulating flat content, not tools for building interfaces and applications.</span></h4>
<p>Wikipedia is the closest realization of what the Internet and the associated standards as a whole were designed to do &#8211; deliver content in a readable format on screen.</p>
<h4><span style="color: #424242;">2 &#8211; Browsers are designed as content renderers, not application platforms.</span></h4>
<p>It&#8217;s the browser&#8217;s job to take that content delivered from a web server, read and understand the markup, and display that content on screen as the author intended it to look. It wasn&#8217;t meant to manage multiple document interfaces, generate non-standard UI elements (tabs, grids, taskbars, modal windows, etc), or maintain persistent, open connections to servers.</p>
<h4><span style="color: #424242;">3 &#8211; Browsers are the number one attack vector for malware</span></h4>
<p>&#8230;and for good reason. Being able to deliver executable code right onto a user&#8217;s machine opens near endless avenues for attack. That said, the browser locking web applications out of all system functions like local file storage also severely limit what an application can accomplish.</p>
<h2>Gentlemen, Start your Hacking!</h2>
<p>Which leads us full circle &#8211; what is it about Google Wave that so perfectly highlights everything wrong with today&#8217;s web applications?</p>
<p>In a word: Javascript.</p>
<p>Just about everything done in web applications is accomplished through the horrific abuse of Javascript. You may have noticed a lot of talk in the browser world about who has the &#8220;fastest Javascript engine&#8221; and this is why.</p>
<p>Every single element in the Google Wave interface is generated dynamically by Javascript which is read and executed &#8211; line by line &#8211; by the browser. As you might imagine, this is slow. Since Google&#8217;s applications so heavily rely on Javascript, they went as far as to release <a href="http://www.google.com/chrome">their own browser</a> with a dramatically faster Javascript engine in order to kick off a Javascript performance war in the browser world.</p>
<p>Furthermore, to ring in the launch of Google Wave, Google has gone as far as to offer a<a href="http://code.google.com/chrome/chromeframe/"> &#8220;plug-in&#8221; for Internet Explorer </a>that basically just shoves Google&#8217;s browser into the Internet Explorer interface. This is exactly how desperate Google is to force bleeding-edge standards into the wild.</p>
<p>The second major limitation Google Wave is trying to address is how to bring real-time communication into the browser. The way this is accomplished today is through the use of making Javascript continuously poll a server to ask if there&#8217;s anything new since the last time it asked. As you might imagine, this is also slow and error prone. Alternate techniques have been addressed to get around this limitation where a server is configured to allow an abnormally long request to linger (essentially endlessly left &#8220;loading&#8221;). This allows Javascript to ask a server if there&#8217;s anything new, and instead of a simple yes or no, it pretends it&#8217;s answering the request very, very slowly.</p>
<p>This is better, but still not perfect and is hard on web servers which are tailored for delivering yes or no answers to requests and quickly moving onto the next, and not practical to implement in the vast majority of server configurations.</p>
<h2>The Solution</h2>
<p>After a rant like that, I&#8217;m sure you&#8217;re expecting a brilliant, well thought out plan to fix all our woes. Unfortunately, I don&#8217;t have one. Today&#8217;s Internet has grown so organically and has responded in new, interesting and clever ways that it&#8217;s almost impossible to judge where it&#8217;ll turn next. Any new standards that are concocted will eventually become insufficient for the unexpected developments the Internet will churn out.</p>
<p>Google Wave is ahead of it&#8217;s time, but there&#8217;s nothing wrong with that. As a web developer, I&#8217;m pleased and excited to see a high-profile application like Google Wave pushing the bleeding edge of what&#8217;s possible in the browser.</p>
<p>Just like the original computer programmers who toiled endlessly, manually writing processor instructions and directing bytes of memory, our new generation of web developers toil with inconsistent standards, rudimentary tools and a decade old browser that won&#8217;t die.</p>
<p>Things will get better as long as we have companies like Google willing to invest millions into making the browser a better and more viable application platform.</p>
<p>Things will get better as long as we have groups of developers in open-source communities improving frameworks that make us forget we&#8217;re writing massive applications with interpretted, fragile, inline script.</p>
<p>Things will get better as end users demand faster, more advanced applications through their browsers.</p>
<p>These are exciting times. Unlike those who drafted the original HTML spec, we <em>can</em> imagine what tomorrow&#8217;s Internet will be like. It is this imagination that will continue to fuel innovative hacks and keep our beloved Internet hobbling along.</p>
]]></content:encoded>
			<wfw:commentRss>http://fenix-solutions.com/blog/2009/11/27/has-google-wave-maxed-out-web-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How We Drupal</title>
		<link>http://fenix-solutions.com/blog/2009/09/18/how-we-drupal/</link>
		<comments>http://fenix-solutions.com/blog/2009/09/18/how-we-drupal/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 17:46:00 +0000</pubDate>
		<dc:creator>jason</dc:creator>
				<category><![CDATA[Labs]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://fenix-solutions.com/blog/?p=225</guid>
		<description><![CDATA[Picking up a new framework can be as difficult (and sometimes moreso) as learning an entire computer language.  On the drupal end of things, the community has yielded all sorts of time-saving tools that you can use to get up and running without even having to get your hands dirty with code.  We&#8217;ve whipped up [...]]]></description>
			<content:encoded><![CDATA[<p>Picking up a new framework can be as difficult (and sometimes moreso) as learning an entire computer language.  On the drupal end of things, the community has yielded all sorts of time-saving tools that you can use to get up and running without even having to get your hands dirty with code.  We&#8217;ve whipped up a short list of modules we commonly use and that have saved us considerable time.<span id="more-225"></span></p>
<table border="1" width="580">
<tbody>
<tr>
<th>Name</th>
<th>Location</th>
<th>Must-Have</th>
<th>Description</th>
</tr>
<tr>
<td dir="ltr" width="20%">CCK</td>
<td width="20%"><a href="http://drupal.org/project/cck" target="_new">http://drupal.org/project/cck</a></td>
<td width="20%" align="center">X</td>
<td dir="ltr" width="20%">Create complex content types</td>
</tr>
<tr>
<td dir="ltr" width="20%">Zenophile</td>
<td class="goog-ws-list-url" width="20%"><a href="http://drupal.org/project/zenophile" target="_new">http://drupal.org/project/zenophile</a></td>
<td width="20%" align="center">X</td>
<td dir="ltr" width="20%">One-click Zen sub-theme generator</td>
</tr>
<tr>
<td dir="ltr" width="20%">WYSIWYG API</td>
<td width="20%"><a href="http://drupal.org/project/wysiwyg" target="_new">http://drupal.org/project/wysiwyg</a></td>
<td width="20%" align="center">X</td>
<td dir="ltr" width="20%">Wrapper for several popular WYSIWYG editors</td>
</tr>
<tr>
<td dir="ltr" width="20%">Path Auto</td>
<td width="20%"><a href="http://drupal.org/project/pathauto" target="_new">http://drupal.org/project/pathauto</a></td>
<td width="20%" align="center">X</td>
<td dir="ltr" width="20%">Generates SEO friendly paths to content nodes</td>
</tr>
<tr>
<td dir="ltr" width="20%">Token</td>
<td width="20%"><a href="http://drupal.org/project/token" target="_new">http://drupal.org/project/token</a></td>
<td width="20%" align="center">X</td>
<td dir="ltr" width="20%">Required by Path Auto</td>
</tr>
<tr>
<td dir="ltr" width="20%">Admin</td>
<td width="20%"><a href="http://drupal.org/project/admin" target="_new">http://drupal.org/project/admin</a></td>
<td width="20%" align="center">X</td>
<td width="20%"></td>
</tr>
<tr>
<td dir="ltr" width="20%">Views</td>
<td width="20%"><a href="http://drupal.org/project/views" target="_new">http://drupal.org/project/views</a></td>
<td width="20%" align="center">X</td>
<td dir="ltr" width="20%">Generate custom views of content</td>
</tr>
<tr>
<td dir="ltr" width="20%">Zen Theme (theme)</td>
<td width="20%"><a href="http://drupal.org/project/zen" target="_new">http://drupal.org/project/zen</a></td>
<td width="20%"></td>
<td dir="ltr" width="20%">Simple XHTML compliant theme to use as starting point</td>
</tr>
<tr>
<td dir="ltr" width="20%">Devel</td>
<td class="goog-ws-list-url" width="20%"><a href="http://drupal.org/project/devel" target="_new">http://drupal.org/project/devel</a></td>
<td width="20%"></td>
<td dir="ltr" width="20%">Useful debugging tools &#8211; especially for themes</td>
</tr>
<tr>
<td dir="ltr" width="20%">i18n</td>
<td width="20%"><a href="http://drupal.org/project/i18n" target="_new">http://drupal.org/project/i18n</a></td>
<td width="20%"></td>
<td dir="ltr" width="20%">Must for multilingual sites, especially for Drupal 5.  Possible to do without when using Drupal 6.</td>
</tr>
<tr>
<td dir="ltr" width="20%">Image Cache</td>
<td width="20%"><a href="http://drupal.org/project/imagecache" target="_new">http://drupal.org/project/imagecache</a></td>
<td width="20%"></td>
<td dir="ltr" width="20%">Manages resizing images on server-side.</td>
</tr>
<tr>
<td dir="ltr" width="20%">Menu Block</td>
<td class="goog-ws-list-url" width="20%"><a href="http://drupal.org/project/menu_block" target="_new">http://drupal.org/project/menu_block</a></td>
<td width="20%"></td>
<td dir="ltr" width="20%">Add blocks for your menu item groups.</td>
</tr>
<tr>
<td dir="ltr" width="20%">About This Node</td>
<td width="20%"><a href="http://drupal.org/project/about_this_node" target="_new">http://drupal.org/project/about_this_node</a></td>
<td width="20%"></td>
<td dir="ltr" width="20%">Gives quick access to a few node properties without going to the Edit page</td>
</tr>
</tbody>
</table>
<p>We tip our hat to the community at large and, on occasion, contribute some Drupal goodies ourselves!</p>
]]></content:encoded>
			<wfw:commentRss>http://fenix-solutions.com/blog/2009/09/18/how-we-drupal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
