<?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>Orlando Web Design Blog, Caxiam Group &#124; Project insights, process, culture! &#187; Web Development</title>
	<atom:link href="http://www.caxiamgroup.com/blog/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.caxiamgroup.com/blog</link>
	<description>Orlando Florida Web Design and Website Development Company offering Design, Internet Marketing, Custom Ecommerce and Web Application Development</description>
	<lastBuildDate>Mon, 14 Nov 2011 17:15:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Introducing PaulDyer.com</title>
		<link>http://www.caxiamgroup.com/blog/web-development/introducing-pauldyer-com/</link>
		<comments>http://www.caxiamgroup.com/blog/web-development/introducing-pauldyer-com/#comments</comments>
		<pubDate>Fri, 07 May 2010 19:44:21 +0000</pubDate>
		<dc:creator>Brian Ledebur</dc:creator>
				<category><![CDATA[Branding & Design]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[websitelaunch]]></category>

		<guid isPermaLink="false">http://www.caxiamgroup.com/blog/?p=1307</guid>
		<description><![CDATA[A few months ago, Dr. Paul Dyer came to us with an idea for a site to help promote and educate users on his Sacred Path, Joyful Journey process. After some initial discovery, it was decided we’d start with a relatively straightforward WordPress blog site. This site would allow Paul to share thoughts, ideas and [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago, <a href="http://www.pauldyer.com" target="_blank">Dr. Paul Dyer</a> came to us with an idea for a site to help promote and educate users on his <a href="http://pauldyer.com/what-is-the-sacred-path-joyful-journey/" target="_blank"><em>Sacred Path, Joyful Journey</em></a> process. After some initial discovery, it was decided we’d start with a relatively straightforward WordPress blog site. This site would allow Paul to share thoughts, ideas and resources while encouraging discussion from the user community.</p>
<p>Since that time the site has evolved into a comprehensive resource for people to find true meaning and happiness in their lives, and Caxiam Group’s relationship with Paul has evolved into that of a true friend to the team. We are grateful for the opportunity to work with Paul, and are proud to present some of the results of our relationship.<span id="more-1307"></span></p>
<h2>Custom Design</h2>
<p>It was important for us to create a design that matched Paul’s message.  We shot for a look that was calm, light and uplifting, while at the same time remaining clean and easy to navigate. Here are a few screenshots of some key areas:</p>
<p><img class="aligncenter size-full wp-image-1310" src="http://www.caxiamgroup.com/blog/wp-content/uploads/pd-design-1.jpg" alt="" width="500" height="400" /></p>
<p class="small">Paul&#8217;s Home Page acts as a portal directing new and existing visitors<br />
to the areas they are looking for.</p>
<p><img class="aligncenter size-full wp-image-1311" src="http://www.caxiamgroup.com/blog/wp-content/uploads/pd-design-2.jpg" alt="" width="500" height="400" /></p>
<p class="small">The &#8220;What Is It?&#8221; page sums up the purpose of the site to new visitors.</p>
<p><img class="aligncenter size-full wp-image-1312" src="http://www.caxiamgroup.com/blog/wp-content/uploads/pd-design-3.jpg" alt="" width="500" height="330" /></p>
<p class="small">We created a custom Flash assessment to help new visitors determine<br />
where they are in the Sacred Path, Joyful Journey process.</p>
<h2>WordPress Integration</h2>
<p>Working on Dr. Paul Dyer’s site has presented some unique challenges that motivated us to learn the inner workings of WordPress’s API. Much of the site is driven on custom programming elements that we feel really stretch the capabilities of WordPress as a CMS platform. Here are a couple examples:</p>
<p><img class="aligncenter size-full wp-image-1313" src="http://www.caxiamgroup.com/blog/wp-content/uploads/pd-wp-1.jpg" alt="" width="500" height="400" /></p>
<p class="small">In addition to a custom, tabloid-style layout, <a href="http://codex.wordpress.org/Function_Reference/WP_Query" target="_blank">custom queries</a> were relied up heavily<br />
to pull supporting content in from other areas of the site.</p>
<p><img class="aligncenter size-full wp-image-1314" src="http://www.caxiamgroup.com/blog/wp-content/uploads/pd-wp-2.jpg" alt="" width="500" height="400" /></p>
<p class="small">Paul offers tools to help users along with their <em>Sacred Path, Joyful Journey</em> process. These tools are categorized under one of the three stages of the process, then further categorized by type of tool. Each type is marked by an icon, offering users a clear visual indicator.</p>
<h2>Admin Interface</h2>
<p>As the project evolved, it was clear that in order for WordPress to continue to be an effective solution, we needed to expand the capabilities of the platform – content no longer fell into the simple post vs. page model. In this regard, the <a href="http://wordpress.org/extend/plugins/more-fields/" target="_blank">More Fields</a> plugin has been vital. Here’s how we were able to leverage it:</p>
<h3>Custom Post Types</h3>
<p>More Fields allowed us to create additional categories to organize content. No need to wade through hundreds of posts – Paul’s content is neatly separated into a set a several categories:</p>
<p><img class="aligncenter size-full wp-image-1308" src="http://www.caxiamgroup.com/blog/wp-content/uploads/pd-admin-1.jpg" alt="" width="500" height="300" /></p>
<h3>Custom Content Boxes and Fields</h3>
<p>WordPress’s support for custom fields is a nice addition, but it’s out-of-the-box interface tends to be unwieldy and unintuitive for client use. More Fields allowed us to present custom fields in a clean interface with professional-looking fields that could be logically grouped into collapsible boxes. Additionally, it allowed us to hide WordPress elements Paul didn’t need to use, keeping things uncluttered and relevant:</p>
<p><img class="aligncenter size-full wp-image-1309" src="http://www.caxiamgroup.com/blog/wp-content/uploads/pd-admin-2.jpg" alt="" width="500" height="300" /></p>
<p>To top things of, we also made use of the <a href="http://wordpress.org/extend/plugins/admin-menu-editor/" target="_blank">Admin Menu Editor</a> plugin to more logically rearrange and organize the WordPress admin links.</p>
<p>It has been announced that <a href="http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/" target="_blank">WordPress 3.0 will offer support for custom post types</a> out of the box, so we look forward to trying it out and seeing how the two solutions compare.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caxiamgroup.com/blog/web-development/introducing-pauldyer-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wireframing &#8211; Finding the Right Tool for the Job</title>
		<link>http://www.caxiamgroup.com/blog/web-development/wireframing-finding-the-right-tool-for-the-job/</link>
		<comments>http://www.caxiamgroup.com/blog/web-development/wireframing-finding-the-right-tool-for-the-job/#comments</comments>
		<pubDate>Fri, 30 Apr 2010 19:13:43 +0000</pubDate>
		<dc:creator>Will Scheuer</dc:creator>
				<category><![CDATA[Approach]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.caxiamgroup.com/blog/?p=1144</guid>
		<description><![CDATA[One of the many hats I wear at Caxiam Group is documenting client processes and translating those into logical structures that we can turn into web application magic.  While I never tend to write any code (it makes the programmers nervous) I do my best to provide them with the best representation of how a proposed system of application feature should work and/or look.  What better to do that with than a picture?]]></description>
			<content:encoded><![CDATA[<p>One of the many hats I wear at Caxiam Group is documenting client processes and translating those into logical structures that we can turn into web application magic.  While I never tend to write any code (it makes the programmers nervous) I do my best to provide them with the best representation of how a proposed system of application feature should work and/or look.  What better to do that with than a picture?</p>
<p><span id="more-1144"></span></p>
<p>Wireframing is a big part of our documentation process, but finding the right tool to create wireframes with has been a long and ongoing process.</p>
<h2>Visio</h2>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1259" src="http://www.caxiamgroup.com/blog/wp-content/uploads/visio.jpg" alt="Visio" width="500" height="500" /><a rel="attachment wp-att-1262" href="http://www.caxiamgroup.com/blog/web-development/wireframing-finding-the-right-tool-for-the-job/attachment/pencil/"></a></p>
<p><a title="Microsoft Visio" href="http://office.microsoft.com/en-us/visio/default.aspx?ofcresset=1" target="_blank">Microsoft Visio</a> was one of the first tools that I put into my wireframing belt.  I started out here because I was already familiar with Visio for documenting process flows and I liked the simplicity that it had for quickly mocking up basic page layouts and step-throughs of process flows.  I still think Visio is a great tool for quick mockups, but it has limitations that prevent it from being a tool we can all use.  For one, licensing would get expensive quickly for more than a handful of users.  Any wireframes that I created in Visio I could only share with clients or other team members by exporting an image format, or somehow convincing them to install the Visio reader plugin on their workstations.  Visio also did not support any interactive features and although I could save a grouping of shapes, say for a &#8220;header&#8221;, if I needed to make updates to the grouping the changes where not communicated out to the other pages of the wireframe without me manually copying/pasting.  Not incredibly efficient.</p>
<h2>Axure</h2>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1260" src="http://www.caxiamgroup.com/blog/wp-content/uploads/axure.jpg" alt="Axure" width="500" height="500" /></p>
<p>We purhased an <a title="Axure" href="http://www.axure.com/" target="_blank">Axure</a> license to try and circumvent the problem of non-interactivity with our wireframes, which somewhat crosses the line into Simulation.  Axure was (and still is) a great product for creating interactive wireframe simulations of web pages/applications and allowing client review by providing the wireframe as a click-thru experience.   One of the best redeeming qualities of Axure was the ability to create re-usable &#8220;includes&#8221; for common page elements (like headers and footers) that would automatically propogate updates to the master includes out to the wireframes that referenced them.   The frustrating thing with Axure was that one of its greatest assets; the ability to export an HTML simulation, made it frustrating to use for pure wireframing and offline reference.  The wireframe/simulations that Axure creates have to zipped into a multi-file folder for distribution, and the end user must unzip them and know to click the index.html file to bring up the simluation.  It is not the most intuitive experience for the non-technically savvy.</p>
<p>And so, the journey continued&#8230;</p>
<h2>iRise</h2>
<p>I will be honest and say that I didn&#8217;t spend a lot of time with <a title="iRise" href="http://www.irise.com" target="_blank">iRise</a> beyond a few hours of evalution.  The software is vast and seemingly without end!  My one impression from the time I spent with it was that it was not the right tool for the job. Where I needed a simple phillips screwdriver, iRise was an entire store full of tools.  Perhaps I will revisit iRise in the future as needs dictate.</p>
<h2>Balsamiq</h2>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1261" src="http://www.caxiamgroup.com/blog/wp-content/uploads/balsamiq.jpg" alt="Balsamiq" width="500" height="500" /></p>
<p><a title="Balsamiq" href="http://www.balsamiq.com" target="_blank">Balsamiq</a> has been an outstanding wireframing tool.  The interface is simple, the shapes available are logical and appropriate to web application development.  One of the great advantages of Balsamiq is that it is so easy to build wireframes with I can use it in real-time <em>during</em> a client meeting and still participate.  For this same reason, the entire team can use the same tool and the licensing is very reasonable.</p>
<h2>Pencil and Paper</h2>
<p><img src="http://www.caxiamgroup.com/blog/wp-content/uploads/pencil.jpg" alt="Pencil &amp; Paper" width="500" height="500" /></p>
<p>The old standbys are what I started with are still some of the best go-to tools in the belt.  <a href="http://www.dixonusa.com/" target="_blank">Pencil</a> and paper tend to be less obtrustive in a meeting that sitting and tapping away at a laptop, with the added benefit of being able to scribble random addenda in the margins as the flow of the meeting dictates.  Most of my pencil and paper wireframes end up being rendered out in Balsamiq for final presentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caxiamgroup.com/blog/web-development/wireframing-finding-the-right-tool-for-the-job/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Changing ColdFusion Temporary Install Directory</title>
		<link>http://www.caxiamgroup.com/blog/web-development/changing-coldfusion-temporary-install-directory/</link>
		<comments>http://www.caxiamgroup.com/blog/web-development/changing-coldfusion-temporary-install-directory/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 16:44:18 +0000</pubDate>
		<dc:creator>Jim Connor</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[coldfusion]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.caxiamgroup.com/blog/?p=810</guid>
		<description><![CDATA[I was trying to install ColdFusion 9 on a Linux server and received this error: Launching installer... ./ColdFusion_9_WWE_linux64.bin: line 2468: /tmp/install.dir.8076/Linux/resource/jre/bin/java: Permission denied ./ColdFusion_9_WWE_linux64.bin: line 2468: /tmp/install.dir.8076/Linux/resource/jre/bin/java: Success Turns out that the hosting provider set up the /tmp directory to mount &#8220;noexec&#8221; as a security precaution. To get around this I could remount the /tmp [...]]]></description>
			<content:encoded><![CDATA[<p>I was trying to install ColdFusion 9 on a Linux server and received this error:</p>
<p><code>Launching installer...</code><br />
<code><br />
./ColdFusion_9_WWE_linux64.bin: line 2468: /tmp/install.dir.8076/Linux/resource/jre/bin/java: Permission denied<br />
./ColdFusion_9_WWE_linux64.bin: line 2468: /tmp/install.dir.8076/Linux/resource/jre/bin/java: Success<br />
</code><br />
Turns out that the hosting provider set up the /tmp directory to mount &#8220;noexec&#8221; as a security precaution.</p>
<p>To get around this I could remount the /tmp dir with exec turned on, or I could change the temp directory that the installer uses. That second option seemed like the better solution, but it took a bit of research to figure out how to do it.</p>
<p>Since the ColdFusion installer uses InstallAnywhere, we can set the IATEMPDIR environment variable:<br />
<code><br />
mkdir /root/cf9_install<br />
export IATEMPDIR=/root/cf9_install<br />
</code></p>
<p>You&#8217;ll need to do the same thing to run the uninstaller.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caxiamgroup.com/blog/web-development/changing-coldfusion-temporary-install-directory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CFLock vs CFTransaction and TRUNCATE TABLE Trouble</title>
		<link>http://www.caxiamgroup.com/blog/web-development/cflock-vs-cftransaction-and-truncate-table-trouble/</link>
		<comments>http://www.caxiamgroup.com/blog/web-development/cflock-vs-cftransaction-and-truncate-table-trouble/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 04:07:00 +0000</pubDate>
		<dc:creator>Jim Connor</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[coldfusion]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.caxiamgroup.com/blog/?p=776</guid>
		<description><![CDATA[When performing a series of update or insert queries, you will most likely want to wrap the code with a &#60;cftransaction&#62; tag to have the entire set roll back in the event of an error. This is probably standard practice for most of us. The cftransaction tag has other uses as well. By setting the [...]]]></description>
			<content:encoded><![CDATA[<p>When performing a series of update or insert queries, you will most likely want to wrap the code with a &lt;cftransaction&gt; tag to have the entire set roll back in the event of an error. This is probably standard practice for most of us. The cftransaction tag has other uses as well. By setting the &quot;isolation&quot; attribute, it can also be used to limit access to certain data, similar to using a cflock tag. There are a few key differences between using &lt;cflock&gt; and &lt;cftransaction&gt;, though. For one, the cftransaction method allows the database to handle the locking, maintaining data integrity across applications. Another important difference is that the cflock method forces the second call to wait for the first call to finish, whereas the cftransaction method allows the second call to complete normally, but using the data as it appeared before the transaction began.</p>
<p>Let me explain.<span id="more-776"></span></p>
<p>Assume we keep a quick lookup table of product categories sorted by popularity, using an adjacency list model to store the hierarchical relationships. A periodic process reorders the categories based on recent product views or sales. And because the call to determine product popularity has to call out to a legacy ERP system, it could take several seconds for the reorder process to complete.</p>
<p>Before the reorder process runs, the data looks like this:</p>
<p>- Kitchen Appliances<br />
    &#8211; Ovens<br />
    &#8211; Refrigerators<br />
    &#8211; Dishwashers</p>
<p>A recent sale on refrigerators has moved them to the top of the list, so after the reorder process, the data would look like this:</p>
<p>- Kitchen Appliances<br />
    &#8211; Refrigerators<br />
    &#8211; Ovens<br />
    &#8211; Dishwashers</p>
<p>If the periodic process were wrapped in a &lt;cftransaction&gt; tag, any read queries against the quick lookup table while the reorder was in progress would return the following data:</p>
<p>- Kitchen Appliances<br />
    &#8211; Ovens<br />
    &#8211; Refrigierators<br />
    &#8211; Dishwashers</p>
<p>The default isolation mode of most common databases prevents reads of uncommitted data, which means a cflock is usually not necessary for simple operations such as this example. If other processes might attempt to update the lookup table at the same time, a higher isolation level might be necessary for the second process, but a cflock should still not be required, unless you also need to control access to the CFML code.</p>
<p>Something to keep in mind, though, is that a TRUNCATE TABLE call inside of the transaction will skew the results, causing external queries to return an empty recordset, instead of the normal pre-transaction snapshot. However, using a DELETE statement with no WHERE clause has the same effect of removing all rows from the table, but it does not interfere with the transaction, allowing external queries to retrieve the pre-transaction data.</p>
<p>The TRUNCATE TABLE behavior described above was seen with MySQL 5.1.42. Other database servers, or versions of MySQL, may behave differently.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caxiamgroup.com/blog/web-development/cflock-vs-cftransaction-and-truncate-table-trouble/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The quest for the perfect framework</title>
		<link>http://www.caxiamgroup.com/blog/web-development/the-quest-for-the-perfect-framework/</link>
		<comments>http://www.caxiamgroup.com/blog/web-development/the-quest-for-the-perfect-framework/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 00:09:17 +0000</pubDate>
		<dc:creator>Jim Connor</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[coldfusion]]></category>

		<guid isPermaLink="false">http://www.caxiamgroup.com/blog/?p=583</guid>
		<description><![CDATA[What&#8217;s In a Name We&#8217;re no strangers to frameworks. We were using a front controller driven framework back in 2000, complete with database mappings to tie pages to their drivers and layouts. Of course the mappings were stored in the application scope for quick retrieval. This framework served us well for many years. Eventually our [...]]]></description>
			<content:encoded><![CDATA[<h2>What&#8217;s In a Name</h2>
<p>We&#8217;re no strangers to frameworks. We were using a front controller driven framework back in 2000, complete with database mappings to tie pages to their drivers and layouts. Of course the mappings were stored in the application scope for quick retrieval. This framework served us well for many years.<span id="more-583"></span></p>
<p>Eventually our business needs changed and we created what we felt was an even better framework, similar to our old one, but without all of the hard wiring. That, too, worked great for a while. We still use it today for most of our projects.</p>
<p>As public frameworks become more popular, or at least, more common, we eventually asked the question &#8220;should we switch to a community supported framework?&#8221;. The most compelling reasons to switch would be:</p>
<ol>
<li>Offload development, support, and testing resources. Someone else is doing the work of fixing issues and developing new features.</li>
<li>Easier to find developers who were already familiar with the framework when hiring new employees.</li>
<li>Marquee value.</li>
</ol>
<p>But do these reasons fit our business requirements?</p>
<h3>Offload Development Resources</h3>
<p>It sounds great to be able to get back some of that time spent on maintaining the framework. But how much time do we really spend on maintaining it? We never actually quantified that before. Looking back, it&#8217;s easy to say &#8220;not that much&#8221;. Our framework was targeted to our business. It was lean. We had added new features to it gradually over time, but these were usually features we needed for the project at hand. Moving to a new framework means that we would probably spend more time than we did before with evaluating and integrating new releases. Sure, you don&#8217;t need to take every new release, but the farther behind you fall, the harder it is to update when you finally do need to. It also meant that we would either have to wait for new features, or find some way to integrate them ourselves, hopefully by extending the community framework and not actually having to modify it. Finding ways to incorporate changes via extension often takes longer than if you can just make them natively. And then there is the risk that the framework implements a similar feature, but in a totally different way.</p>
<h3>Ready Trained Developers</h3>
<p>The idea of hiring employees that are already trained sounds great, if you find yourself constantly turning over employees, or if you need to staff up quickly for a bunch of &#8220;churn and burn&#8221; projects that you really expect no longevity out of. We do neither. Our attrition rate is basically zero, and on the rare occasion where we do decide to expand our team, it&#8217;s for the long haul. Community frameworks may come with lots of fancy documentation, but they usually come with additional features that we don&#8217;t need. As I already mentioned, our framework is lean, and it is targeted to our needs, so the ramp up time needed to learn to use it effectively is very small.</p>
<h3>Marquee Value</h3>
<p>Marquee value? Seriously? We can just as easily give our framework a name and boast to a potential client that we are using &#8220;such and such&#8221; framework, and here are the benefits it provides. The important thing is that you *are* using a framework. And to be honest, we did give it a name.</p>
<p>Another consideration is the fact that we primarily develop web applications, not websites. I understand that a framework should be able to serve both, but there is something a little more comforting about having full control over what changes are made to this fundamental layer. Especially when other businesses have put such absolute trust in us to service their needs.</p>
<h2>Taking the Plunge</h2>
<p>We looked at several of the major frameworks, and analyses that people had performed comparing one to the other. We had already come to the revelation years ago that convention suited our needs better than configuration, which helped narrow the list down to a few key contenders.</p>
<p>After careful consideration, we decided to go with ColdBox. It had all of the features we were looking for, and an impressive amount of documentation. There was also something very appealing about the polish of the website itself. It had a great number of features that we didn&#8217;t need, but that didn&#8217;t seem to be an issue at the time.</p>
<p>Initial development with ColdBox went well, but we quickly recognized that we were going to need a thin &#8220;helper&#8221; layer on top of the framework to encapsulate some of the common functionality that we would need with each new application. That was a relatively easy task, and it helped set in motion what seemed to be a new and improved work flow.</p>
<p>Things weren&#8217;t perfect, though. An occasional scan of the debugging output kept pointing back to the fact that this framework was doing way more than we needed it to do on each request. The template list showed a total count of 519 calls with an execution time of around 65 ms. A similar page in our custom framework would have produced around 40 calls and been around 20 ms. That&#8217;s not really comparing apples to apples, though, as this was a different application.</p>
<p>FW/1 showed up on the radar a few months back, and I really liked what I saw. Here was a lean, mean, conventions based framework that did little more than handle the nitty gritty of processing requests. We were going to have a &#8220;helper&#8221; layer on top of whatever framework we used, so this seemed like the perfect fit.</p>
<p>In a bit of a skunk works project, I set up a sandbox to see what it would take to convert our ColdBox application over to FW/1. Within about 30 minutes I was able to get the basic application initialization and home page loading, with a little bit of abstraction. The results were even better than I was hoping for. The home page loaded with only 11 template calls, and 3 ms of processing time. Wow. Again, this wasn&#8217;t a fair comparison because there were a few features that I had stripped out to get the sandbox app running. But it was enough to convince me that the change would be worthwhile.</p>
<p>I sat down late Friday evening, with a fridge full of caffeine and the mindset that I was going to do the entire conversion in one night, no matter how long it took. And I did.</p>
<p>The entire conversion took about 4 hours. I&#8217;m not usually one for cutting corners, and one of the major objectives of this conversion was to improve the efficiency of the system, so I tried to minimize how many abstractions I added to make FW/1 more &#8220;ColdBoxy&#8221;. I also took the opportunity during this time to clean up a few aspects of the helper layer.<!--more--></p>
<p>After I started browsing around the newly converted app, I discovered a problem. There is no limit to how deep you can nest controllers and views in ColdBox. In addition to the normal &#8220;user.edit&#8221; actions, we have a few areas of the app that extended into actions like &#8220;admin.user.edit&#8221;. Either I wasn&#8217;t fully comprehending how FW/1 works, or nesting actions deeper than &#8220;section.item&#8221; isn&#8217;t supported.</p>
<p>This was pretty much a deal breaker. I certainly didn&#8217;t want to go back and refactor our application to only have one level of nesting, and I didn&#8217;t want that to be a design limit for future applications. I didn&#8217;t see any easy way to extend the functionality of FW/1 in this regard, without replacing a couple of the key functions, which would basically defeat the whole purpose of using the framework.</p>
<p>Long story short (too late, I know), the final solution was to take what we had learned from several years of using our own custom framework, along with the new experiences of developing under ColdBox and FW/1, and create our own new custom framework.</p>
<h2>Revelations</h2>
<p>So was it worth all of this just to save a few milliseconds per page request? Well, if that had been the goal, then I would say &#8220;no, not really&#8221;. But the goal was much bigger than that. We build web applications. That is what we do. It&#8217;s why we come to work in the morning, and it&#8217;s why we get paid. The framework that our applications sit on is one of our primary development tools. Your choice of framework is almost as important as your choice of language. The support it provides for your particular business, and the direction it allows you to go with future applications, is critical to your success.</p>
<p>The fact that our new framework loads the same 519 template, 65 ms page with 98 templates and 20 ms isn&#8217;t too bad of a side effect either.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caxiamgroup.com/blog/web-development/the-quest-for-the-perfect-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fedora 12 on Windows 7 Virtual PC</title>
		<link>http://www.caxiamgroup.com/blog/web-development/fedora-12-on-windows-7-virtual-pc/</link>
		<comments>http://www.caxiamgroup.com/blog/web-development/fedora-12-on-windows-7-virtual-pc/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 00:00:18 +0000</pubDate>
		<dc:creator>Jim Connor</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.caxiamgroup.com/blog/?p=449</guid>
		<description><![CDATA[If you are trying to install Fedora 12 in Windows Virtual PC and the VM just shuts down right after you begin installation, try adding &#8220;vga=0x32D&#8221; to the boot params. To do this, highlight the first option on the boot menu and press the TAB key to edit the parameters. After the installation finishes, it [...]]]></description>
			<content:encoded><![CDATA[<p>If you are trying to install Fedora 12 in Windows Virtual PC and the VM just shuts down right after you begin installation, try adding &#8220;vga=0x32D&#8221; to the boot params.<br />
<span id="more-449"></span><br />
To do this, highlight the first option on the boot menu and press the TAB key to edit the parameters.</p>
<p><a href="http://www.caxiamgroup.com/blog/wp-content/uploads/fedora12.png" target="_blank"><img src="http://www.caxiamgroup.com/blog/wp-content/uploads/fedora12-320x264.png" alt="Fedora 12 Install Screen" width="320" height="264" class="alignnone size-medium wp-image-450" /></a></p>
<p>After the installation finishes, it will try to reboot, which will fail just like it did in the beginning. No problem. Just restart the VM, and press the &#8220;a&#8221; key as it starts loading the OS. This should bring up a screen where you can edit the grub params. Add the same &#8220;vga=0x32D&#8221; to the end of the current params.</p>
<p>You can press &#8220;a&#8221; repeatedly during the early boot process to make sure it hears you, but you will likely end up with a string of &#8220;aaaaaaa&#8221; displayed if you do. It&#8217;s easy enough to delete them, so pressing &#8220;a&#8221; a couple times avoids having to time it just right.</p>
<p>After that, your VM should boot normally without having to edit the params.</p>
<p>I chose &#8220;0x32D&#8221; because it worked well on my system. You can use a different mode if you like, or try setting &#8220;vga=ask&#8221; to have it prompt you for the setting.</p>
<p>Here is a listing of common settings:</p>
<p><a href="http://en.wikipedia.org/wiki/VESA_BIOS_Extensions#VBE_mode_numbers" target="_blank">http://en.wikipedia.org/wiki/VESA_BIOS_Extensions#VBE_mode_numbers</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.caxiamgroup.com/blog/web-development/fedora-12-on-windows-7-virtual-pc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache JMeter Website Testing</title>
		<link>http://www.caxiamgroup.com/blog/web-development/apache-jmeter-website-testing/</link>
		<comments>http://www.caxiamgroup.com/blog/web-development/apache-jmeter-website-testing/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 23:12:35 +0000</pubDate>
		<dc:creator>Jim Connor</dc:creator>
				<category><![CDATA[Approach]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.caxiamgroup.com/blog/?p=445</guid>
		<description><![CDATA[I was looking for a simple web &#8220;stress&#8221; tool to test an issue with a current project. It needed to do more than just smack a single URL a billion times. I wanted to be able to log in and perform a couple typical user actions. Apache JMeter was perfect for what I needed. It [...]]]></description>
			<content:encoded><![CDATA[<p>I was looking for a simple web &#8220;stress&#8221; tool to test an issue with a current project. It needed to do more than just smack a single URL a billion times. I wanted to be able to log in and perform a couple typical user actions.<span id="more-445"></span></p>
<p><a href="http://jakarta.apache.org/jmeter/">Apache JMeter</a> was perfect for what I needed. It takes a little bit of research and time to set up a &#8220;Test Plan&#8221;, but it was worth it. And it&#8217;s free!</p>
<p>You can set it up to run any number of simultaneous users, and you can specify how many times to run the test (in loops), or to run in indefinitely until you stop it.</p>
<p>Pretty slick.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caxiamgroup.com/blog/web-development/apache-jmeter-website-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

