<?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/"
	>

<channel>
	<title>Midstride Solutions</title>
	<atom:link href="http://blog.midstride.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.midstride.com</link>
	<description>Powerful, simple &#38; easy to use.</description>
	<pubDate>Fri, 12 Dec 2008 02:23:19 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Top 10 links for December Week 1 - 2008</title>
		<link>http://blog.midstride.com/2008/12/08/top-10-links-for-december-week-1-2008/</link>
		<comments>http://blog.midstride.com/2008/12/08/top-10-links-for-december-week-1-2008/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 05:41:28 +0000</pubDate>
		<dc:creator>adrian</dc:creator>
		
		<category><![CDATA[Web Strategy]]></category>

		<category><![CDATA[featured]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[user experience]]></category>

		<category><![CDATA[web communications]]></category>

		<category><![CDATA[business]]></category>

		<category><![CDATA[it]]></category>

		<category><![CDATA[news]]></category>

		<category><![CDATA[top]]></category>

		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=37</guid>
		<description><![CDATA[Here is the first installment of our top 10 links for the week.  Every week, we will be picking ten links we see as being very useful and important to the web development/business crowd.  This list covers both technical articles for developers and higher level business ones.


10 Useful RSS-Tricks and Hacks for Wordpress - Smashingmagazine
Great tips for any user of wordpress that relies on RSS for syndicating content.  Most of these tips show you how to gain more control over your RSS feeds.
5 good programming habits in PHP
General rules of ...]]></description>
			<content:encoded><![CDATA[<p>Here is the first installment of our top 10 links for the week.  Every week, we will be picking ten links we see as being very useful and important to the web development/business crowd.  This list covers both technical articles for developers and higher level business ones.<strong><br />
</strong></p>
<ol>
<li><a href="http://www.smashingmagazine.com/2008/12/02/10-useful-rss-hacks-for-wordpress/" target="_blank">10 Useful RSS-Tricks and Hacks for Wordpress - Smashingmagazine</a><strong><br />
</strong>Great tips for any user of wordpress that relies on RSS for syndicating content.  Most of these tips show you how to gain more control over your RSS feeds.</li>
<li><a href="http://www.ibm.com/developerworks/opensource/library/os-php-5goodhabits/index.html?ca=dgr-jw64os-php-5goodhabits&amp;S_TACT=105AGY46&amp;S_CMP=GRsitejw64" target="_blank">5 good programming habits in PHP</a><br />
General rules of thumbs for php programmers.   Some of the rules may make you think twice, like the rule of &#8220;Never copy and paste&#8221;.</li>
<li><a href="http://www.dailyblogtips.com/what-is-more-important-to-succeed-online-business-or-technical-skills/" target="_blank">What is More Important To Succeed Online:  Business or Technical Skills?</a><br />
A question for the ages, at least in the IT field, is it more important to be business or technical minded?  A very interesting article on how these skills have attributed to the success of several companies.</li>
<li><a href="http://news.cnet.com/8301-17939_109-10114050-2.html?part=rss&amp;tag=feed&amp;subj=Webware" target="_blank">Firefox 3.1 beta news - web workers</a><br />
A CNET article on Firefox 3.1.  The interesting part is how &#8220;web workers&#8221; can process work in the background.  Background processing would push the RIA movement further and I&#8217;m sure would lead to some very novel ideas from early adopters.</li>
<li><a href="http://nettuts.com/articles/news/how-to-setup-a-dedicated-web-server-for-free/" target="_blank">How to Setup a Dedicated Web Server for free - with Ubuntu</a><br />
A practical and useful article on how to setup a web server.  This is a very well written article that shows how far Linux has come in terms of ease of use.</li>
<li><a href="http://blog.guykawasaki.com/2008/12/how-to-use-twit.html" target="_blank">How to use Twitter as a tool</a><br />
An article by Guy Kawasaki on how to use Twitter for productivity.  It&#8217;s a very detailed post and for those new to Twitter, it explains the utility factor of Twitter beyond just being a gossip tool.</li>
<li><a href="http://www.smashingmagazine.com/2008/12/03/online-advertising-and-its-impact-on-web-design/" target="_blank">Online Advertising and Its Impact on Web Design</a><br />
An excellent article from Smashing Magazine on how online advertising affects web design.  It&#8217;s an interesting topic as web advertising is a primary means of revenue for the majority of blogs.</li>
<li><a href="http://nettuts.com/articles/web-roundups/top-10-biggest-web-dev-blunders-of-2008/" target="_blank">Top 10 Web Dev Blunders of 2008</a><br />
A list of some of the biggest &#8220;mistakes&#8221; we&#8217;ve seen on the web this year.</li>
<li><a href="http://www.techcrunch.com/2008/12/02/who-protects-the-internet/" target="_blank">Who Protects The Internet?</a><br />
Who does protect the Internet?  This article should be of interest to anyone who uses the Internet, so that&#8217;s a lot of people.  Techcrunch takes a go at reviewing where we are with the Internet.</li>
<li><a href="http://www.dailyblogtips.com/referrer-detector-wordpress-plugin/" target="_blank">Referrer Detector Wordpress Plugin</a><br />
A great wordpress tool to greet your users coming from specific sites.</li>
</ol>
<p>I hope you find these articles useful.  You can contribute your own links by visiting this <a href="http://www.buncholinks.com/p/andreliem/decweek1top">buncholink</a> which groups related links together in a useful manner.</p>
<p><script src="http://www.buncholinks.com/widget/script/i/164/k/d864d5977385c962710cad06a4913732" type="text/javascript"></script></p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=Top%2010%20links%20for%20December%20Week%201%20-%202008&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F12%2F08%2Ftop-10-links-for-december-week-1-2008%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="Top 10 links for December Week 1 - 2008";
		a2a_linkurl="http://blog.midstride.com/2008/12/08/top-10-links-for-december-week-1-2008/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/12/08/top-10-links-for-december-week-1-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>5 tips and tools to optimize your php application - Part 1 simple</title>
		<link>http://blog.midstride.com/2008/12/01/5-tips-and-tools-to-optimize-your-php-application-part-1-simple/</link>
		<comments>http://blog.midstride.com/2008/12/01/5-tips-and-tools-to-optimize-your-php-application-part-1-simple/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 06:41:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Zend Framework]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[headline]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[user experience]]></category>

		<category><![CDATA[firebug]]></category>

		<category><![CDATA[minify]]></category>

		<category><![CDATA[optimization]]></category>

		<category><![CDATA[speed]]></category>

		<category><![CDATA[tips]]></category>

		<category><![CDATA[yslow]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=33</guid>
		<description><![CDATA[With php becoming a more mature language and frameworks becoming a standard practice, it&#8217;s increasingly important to analyze your code and test the performance where possible.
Frameworks and libraries can speed up the development time and make code maintenance simpler, but it&#8217;s important you understand how they work.  It&#8217;s not just the framework itself but the entire footprint your application leaves when a user visits a specific page.  Ask yourself what&#8217;s involved from the database, to the code/framework, and then to the client through http requests.

After experiencing some issues with an ...]]></description>
			<content:encoded><![CDATA[<p>With php becoming a more mature language and frameworks becoming a standard practice, it&#8217;s increasingly important to analyze your code and test the performance where possible.</p>
<p>Frameworks and libraries can speed up the development time and make code maintenance simpler, but it&#8217;s important you understand how they work.  It&#8217;s not just the framework itself but the entire footprint your application leaves when a user visits a specific page.  Ask yourself what&#8217;s involved from the database, to the code/framework, and then to the client through http requests.<br />
<span id="more-33"></span><br />
After experiencing some issues with an application running the Zend Framework, I realized there were a lot of things I was not doing to optimize my application.  There are simple and more complex actions you can take to speed up your application.  Since time is precious, and developers with an expertise on optimization are not always available, I&#8217;ve split this post into two sections (simple and more advanced).  This post focuses on the simple part.</p>
<p><strong>Simple tips and tools<br />
</strong></p>
<ol>
<li><strong>Use Firebug with YSlow<br />
</strong>Firebug and YSlow are powerful tools to analyze the front end of your site.  Run the most common request on your site and see what YSlow says.  Expect a low grade, probably a D or lower.  If you can reach a level C or greater you&#8217;re doing really well as some of the requirements are not practical for most applications.</p>
<blockquote><p>How-to:<br />
<strong>Net</strong>: How many calls are there?  Try to minize these calls and definitely remove any 404 calls as they can eat up server resources.</p>
<p><strong>Console</strong>:  Do you have a lot of POST calls?  Some libraries, like dojo&#8217;s javascript framework, can make a lot of POST requests.  Reduce these if possible.</p>
<p><strong>YSlow</strong>: Rules I would pay attention to:<br />
1. Make fewer HTTP Requests<br />
3. Add an Expires Header<br />
4. Gzip components (server related)<br />
5. Put CSS at the top<br />
6. Put JS at the bottom (not always possible)<br />
7. Avoid CSS expressions<br />
10. Minify JS</p></blockquote>
<p>Resources:<br />
<a href="http://getfirebug.com/">http://getfirebug.com/</a><br />
<a href="http://developer.yahoo.com/yslow/">http://developer.yahoo.com/yslow/</a><br />
<a href="http://developer.yahoo.com/performance/rules.html ">http://developer.yahoo.com/performance/rules.html </a></li>
<li><strong>Minify Javascript and CSS<br />
</strong>Minification is the process of compacting your scripts by removing extraneous content such as white space.   In addition, minification can make attempts at refactoring the code to remove redunancies.  If you want to play it safe, only remove white space to ensure your code is still running. The Yahoo compressor is one of the best minifiers out there and reduces both Javascript and CSS by a significant percentage.</p>
<blockquote><p>How-to:<br />
<strong>java -jar yuicompressor-x.y.z.jar -o style_minified.css style.css</strong></p>
<p>add the &#8220;&#8211;nomunge&#8221; to only do whitespace compressions.</p></blockquote>
<p>Resources:<br />
<a href="http://developer.yahoo.com/yui/compressor/">http://developer.yahoo.com/yui/compressor/</a><br />
<a href="http://dojotoolkit.org/docs/shrinksafe">http://dojotoolkit.org/docs/shrinksafe</a><br />
<a href="http://dean.edwards.name/packer/ ">http://dean.edwards.name/packer/ </a></li>
<li><strong>Merge css and js http requests</strong>- manually or automated<br />
Reduce the amount of calls you make to various CSS and JS files by merging them to one URL.  This is more work but will reduce the overhead.</p>
<blockquote><p>How-to - manually:<br />
This is really easy, take your css and copy and paste them together into one file.  Make sure your preserve the order of your css.  The same applies to your Javascript files.</p>
<p>How-to - Automated - google or your own custom:<br />
Google has a php script which can take various sources and return them as one.</p></blockquote>
<p>Resources:<br />
<a href="http://code.google.com/p/minify/">http://code.google.com/p/minify/</a><br />
<a href="http://reinholdweber.com/?p=37">http://reinholdweber.com/?p=37</a></li>
<li><strong>CSS Background Images are bad - usually</strong><br />
Using a div for all of your images with a background image is not that great for performance as it requires more calls.  I&#8217;ll be the first to admit it&#8217;s my favourite way to design, but you should try to avoid them where possible.  In addition, for hover states try using one large image with background-position calls to show specific parts.</p>
<blockquote><p>How to:<br />
Use <em><strong><code><span style="color: #000000;">background-position </span></code></strong></em>to select which portion of the large image you want to show.  There isn&#8217;t much more to explain.</p></blockquote>
</li>
<li><strong>GZip<br />
</strong>Gzipping files on the server side will reduce the amount of overhead significantly.  It adds a bit more on the server side, but generally the pay off should be well worth it.</p>
<blockquote><p>How to:<br />
It depends on your server situation, but here&#8217;s a snippet:<br />
mod_gzip_on Yes<br />
mod_gzip_item_include mime ^application/x-javascript$</p>
<p>Refer to <a href="http://snipplr.com/view/9017/gzip-your-components/">http://snipplr.com/view/9017/gzip-your-components/</a> for details</p></blockquote>
<p>Resources:<br />
<a href="http://developer.yahoo.com/performance/rules.html#gzip" target="_blank">http://developer.yahoo.com/performance/rules.html#gzip</a><br />
<a href="http://snipplr.com/view/9017/gzip-your-components/">http://snipplr.com/view/9017/gzip-your-components/</a></li>
</ol>
<p><strong>Conclusion<br />
</strong>That wraps up the simple part of this tutorial&#8230; really, that&#8217;s it!  The focus of these posts is to keep them simple and easy to use.  You may be surprised at how much faster your application runs when you apply these techniques.  I hope you found these useful or at least agree that these are good practices to apply.  In the next part I will examine more advanced methods of optimizing your application.</p>
<p><strong>Feedback<br />
</strong>Your feedback is always appreciated.  In addition to commenting, if you have more resources, please add them to my growing list of links through this buncholink</p>
<p><script src="http://www.buncholinks.com/widget/script/i/162/k/8b5f477e74ec6ed2ad68064aec4034c0" type="text/javascript"></script></p>
<p>It&#8217;s a simple way to organize a group of links together.</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=5%20tips%20and%20tools%20to%20optimize%20your%20php%20application%20-%20Part%201%20simple&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F12%2F01%2F5-tips-and-tools-to-optimize-your-php-application-part-1-simple%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="5 tips and tools to optimize your php application - Part 1 simple";
		a2a_linkurl="http://blog.midstride.com/2008/12/01/5-tips-and-tools-to-optimize-your-php-application-part-1-simple/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/12/01/5-tips-and-tools-to-optimize-your-php-application-part-1-simple/feed/</wfw:commentRss>
		</item>
		<item>
		<title>E-mail Marketing - How many emails is too many?</title>
		<link>http://blog.midstride.com/2008/10/20/e-mail-marketing-how-many-emails-is-too-many/</link>
		<comments>http://blog.midstride.com/2008/10/20/e-mail-marketing-how-many-emails-is-too-many/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 22:12:19 +0000</pubDate>
		<dc:creator>adrian</dc:creator>
		
		<category><![CDATA[Web Strategy]]></category>

		<category><![CDATA[featured]]></category>

		<category><![CDATA[web communications]]></category>

		<category><![CDATA[web marketing]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=30</guid>
		<description><![CDATA[At work the other day, I was forwarded an email with a co-worker asking for my thoughts to a question. The question went along the lines of: "How many emails in a defined time period should we be sending to our customers? How many emails is too many?" My answer? One!]]></description>
			<content:encoded><![CDATA[<h2><a href="http://blog.midstride.com/wp-content/uploads/2008/10/emails.png"><img class="alignright size-full wp-image-31" title="emails" src="http://blog.midstride.com/wp-content/uploads/2008/10/emails.png" alt="" width="250" height="250" /></a></h2>
<p>At work the other day, I was forwarded an email with a co-worker asking for my thoughts to a question. The question went along the lines of: &#8220;How many emails in a defined time period should we be sending to our customers? How many emails is too many?&#8221; My answer? One!</p>
<h2>But really, how many emails is too many?</h2>
<p>Here were my thoughts on the matter.</p>
<p>When people sign up for a mail-out, it&#8217;s likely because they are:</p>
<ul>
<li>curious as to what they&#8217;re going to receive</li>
<li>interested in something they saw from a related communication</li>
<li>enticed by some sort of incentive, or</li>
<li>doing a competitive analysis to see what other organizations are doing with their mailouts, or trying to get their hands on an HTML email template they can use as a basis for designing one for themselves</li>
</ul>
<p>As long as that person gets something valuable out of the mailing, they&#8217;ll stay subscribed.</p>
<p>When do they unsubscribe? Anyone read <a title="The Tipping Point - Malcolm Gladwell" href="http://www.gladwell.com/tippingpoint/index.html">The Tipping Point by Malcolm Gladwell</a>? I think people unsubscribe when a series of things happen that tips them over the edge:</p>
<ol>
<li>They receive a message that doesn&#8217;t have any content that speaks directly to their interests, and</li>
<li>They receive similar messages from other sources (either from you or from completely different lists they&#8217;ve signed up for), and</li>
<li>They look in their inbox and suddenly see it&#8217;s getting full of emails that they don&#8217;t need or want or have any useful need for</li>
</ol>
<p>Once those 3 things happen, they&#8217;ll be on the verge of unsubscribing and all it will take to push them over the edge is one more email from you on a day when their inbox is already really full. So to answer, &#8220;How many emails is too many?&#8221; in this case it really is just one!</p>
<h2>The Key to Email is VALUE</h2>
<p>Often a company will be sending out regularly scheduled emails - for example a monthly newsletter or a weekly update of recent discussions in their online forums. In general, these will be well-received provided the recipients signed up to receive the mailings.</p>
<p>In many other cases, though, people will still sign up to receive e-newsletters, not know for sure how often or when they&#8217;ll receive the email.</p>
<p>In general, when you send an email to someone and they aren&#8217;t expecting it (for example, they didn&#8217;t sign up to receive a regularly-scheduled mail-out or they didn&#8217;t first send you an email expecting a reply), it stands to reason that they&#8217;ll be surprised when they receive your message. People like surprises when they get something. People don&#8217;t like surprises when they are asked for something.</p>
<p>So following this line of thought, if you&#8217;re sending mail-outs that people aren&#8217;t expecting, you&#8217;ll want to make sure you are giving people something that is of value to them (i.e. something that&#8217;s meaningful, relevant, generally interesting to them, or has actual monetary value).</p>
<p>But what about the &#8220;should&#8221; from a marketer&#8217;s standpoint?</p>
<p>On the flip side of all this is the perspective of what you &#8220;should&#8221; do to help build your business and your brand. And on this side of the communications, you &#8220;should&#8221; be sending out as many emails as it takes to keep your existence in people&#8217;s minds.</p>
<p>You&#8217;re competing for their attention and need to do what you can to keep it when you get it. But that doesn&#8217;t necessarily mean you need to send a lot of emails - it could just mean you have to send them one or two a month that will grab enough of their attention to get them to visit the website.</p>
<p>Provided you then have something of value on the website, that will be enough to keep them coming back or it will at least be enough to stop them from going away the next time you send them another message.</p>
<h2>What about email marketing usability?</h2>
<p>As far as usability goes, <a title="Useit.com: Jakob Nielsen" href="http://www.useit.com/">Jakob Nielsen</a> is talked about a lot in circles of usability. The guy drives me nuts sometimes, but he also often has useful (or at least thought provoking) info on emails, for example check out these links:<br />
<script src="http://www.buncholinks.com/widget/script/i/75/k/583b548633c98a68c83a9ebc4a5dc0ef" type="text/javascript"></script></p>
<h2>What do you think?</h2>
<p>There&#8217;s no place for unsolicited email, but what about semi-unsolicited email? What kind of emails do you like to receive? What do you value when it comes to email offers or promotions? What drives you up the wall and prompts you to unsubscribe?</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=E-mail%20Marketing%20-%20How%20many%20emails%20is%20too%20many%3F&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F10%2F20%2Fe-mail-marketing-how-many-emails-is-too-many%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="E-mail Marketing - How many emails is too many?";
		a2a_linkurl="http://blog.midstride.com/2008/10/20/e-mail-marketing-how-many-emails-is-too-many/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/10/20/e-mail-marketing-how-many-emails-is-too-many/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What the iPhone, Android, and Chrome Mean For Web Professionals</title>
		<link>http://blog.midstride.com/2008/09/21/what-the-iphone-android-and-chrome-mean-for-web-professionals/</link>
		<comments>http://blog.midstride.com/2008/09/21/what-the-iphone-android-and-chrome-mean-for-web-professionals/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 01:14:44 +0000</pubDate>
		<dc:creator>adrian</dc:creator>
		
		<category><![CDATA[Web Strategy]]></category>

		<category><![CDATA[analytics]]></category>

		<category><![CDATA[design]]></category>

		<category><![CDATA[featured]]></category>

		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=28</guid>
		<description><![CDATA[A quiet shift is happening in the world of web design and development - one that has been in the works for a few years, but is now starting to come to fruition: the mobile world is mobilizing to point a whole lot of eyes onto our websites. Our canvas may be shrinking, but the opportunities will continue to grow. Here&#8217;s what&#8217;s happening in the mobile world that will affect you as a web professional, and what you can do to prepare for the change.

First, It Was the iPhone
A handful ...]]></description>
			<content:encoded><![CDATA[<p>A quiet shift is happening in the world of web design and development - one that has been in the works for a few years, but is now starting to come to fruition: the mobile world is mobilizing to point a whole lot of eyes onto our websites. Our canvas may be shrinking, but the opportunities will continue to grow. Here&#8217;s what&#8217;s happening in the mobile world that will affect you as a web professional, and what you can do to prepare for the change.</p>
<p><span id="more-28"></span></p>
<h2><a href="http://blog.midstride.com/wp-content/uploads/2008/09/mobile.png"><img class="alignleft size-full wp-image-29" title="mobile" src="http://blog.midstride.com/wp-content/uploads/2008/09/mobile.png" alt="" width="250" height="250" /></a>First, It Was the iPhone</h2>
<p>A handful of things have changed in the handheld landscape in the last few years. For one, Apple introduced the <a title="iPhone" href="http://www.apple.com/iphone/">iPhone</a> that rolled out with <a title="Safari" href="http://www.apple.com/safari/">Safari</a> installed on the phone. To the average consumer, having a web browser on their mobile phone gave it a nice &#8220;oooo ahhh&#8221; touch (pun intended). Suddenly you could browse around websites and it would actually look similar to what you would see on your computer. For web designers and developers, this is a much more monumental change than we, as a community, have given it credit for.</p>
<p>With a full-fledged web browser now installed on something like an iPhone, the barrier of entry has just been significantly lowered to offer web-based services for small-screen, portable devices. While the iPhone still has relatively small market penetration, it&#8217;s the first push towards truly leveraging the community of web developers and entrepreneurs into the handheld world.</p>
<h2>And Then Came the GPhone (Android and Chrome)</h2>
<p>The next big step is coming from Google - and it&#8217;s actually two or three smaller steps. The first step started with the work happening around <a title="What is Android?" href="http://code.google.com/android/what-is-android.html">Android</a> - Google&#8217;s open source operating system for handheld devices. Starting with their acquisition of the Android team back in 2005, Google has clearly been planning a move into the wireless/handheld device world for at least a few years. <a title="gPhone - Truemors" href="http://truemors.nowpublic.com/?s=gphone">Rumours</a> surrounded this move, with many suggesting that Google would be unveiling a &#8220;GPhone&#8221;. It may have taken a few years, but sure enough, <a title="Google HTC Android Phone to be Unveiled" href="http://www.telegraph.co.uk/connected/main.jhtml?xml=/connected/2008/09/16/dlgoog116.xml">Google will be unveiling a phone</a>, running off of Android, in the coming weeks.</p>
<p>The other big step is one that has garnered a lot of attention - the release of <a title="Chrome - Google" href="http://www.google.com/chrome/intl/en/features.html">Chrome</a>, Google&#8217;s web browser. While the attention around Chrome was largely surrounding the new features that would make Chrome stick out from today&#8217;s standard of web browsers like <a title="FireFox" href="http://www.mozilla.com/en-US/firefox/">FireFox</a>, <a title="Internet Explorer" href="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx">IE</a>, <a title="Safari" href="http://www.apple.com/safari/">Safari</a>, and <a title="Opera Browser" href="http://www.opera.com/">Opera</a>, little attention has been given to the potential impact and perhaps the real value of all this for Google.</p>
<p>By first rolling out an open source OS for mobile devices, and then also rolling out an open source browser, and now packaging it all into their own phones, Google will be making a strong push to establish itself in the world of mobile devices.</p>
<h2>iPhone, Android, Chrome - What Does This Mean For Web Professionals?</h2>
<p>Here are some thoughts and suggestions:</p>
<h3>Learn How to Design for Small Screen Interfaces</h3>
<p>A good place to start would be to do some Googling on &#8220;designing for handheld devices&#8221; or &#8220;designing for small screen interfaces&#8221;. There has been a lot of talk in this space for a number of years now, and even though earlier discussions would tend to revolve around the challenge of designing for 100 different versions of handheld web browsers, the underlying principles of design will hold true now as much as they did then.</p>
<p>For example, you might want to check out this buncholinks on designing for small screen interfaces:<br />
<script src="http://www.buncholinks.com/widget/script/i/69/k/de7c7906be4d1fd9f592cf00bc29bb49" type="text/javascript"></script></p>
<h3>Make Sure Your Current Websites Render Properly in Chrome and Safari (as well as FireFox, Opera and&#8230;well, ok&#8230;IE too)</h3>
<p>Even though both Safari and Chrome are developed using <a title="WebKit" href="http://webkit.org/">WebKit</a> - an open source web browser engine - sites are reportedly being rendered differently in each. As web designers, we aren&#8217;t in the clear yet - you&#8217;ll still need to do cross-browser testing. But at least now when you do it for Chrome or Safari, you&#8217;ll know what your website will look like in a handheld device as well.</p>
<h3>Look for New Business Opportunities in Mobile Devices</h3>
<p>Think about what opportunities are out there to merge the types of things you&#8217;re building on the web, with the types of things you already personally do on your own mobile device. Think about the things you could start doing now with near ubiquitous access to the web. For example, have you heard of <a title="Tagga" href="http://www.tagga.com">Tagga</a>?</p>
<h3>Rethink How Your Website Is Going to be Used</h3>
<p>As the Google phone and the iPhone gain more market share, there will inevitably be more people browsing the web through small screens. Take a look at your website right now (through an actual iPhone if you can), and do a quick assessment of how your website is going to perform for your visitors. If you&#8217;re about to embark on a new site redesign, you may even want to consider factoring in design for small screen interfaces as one of the requirements (even if it&#8217;s a secondary or &#8220;nice to have&#8221; requirement).</p>
<h3><span style="font-weight: normal; ">K</span>eep A Close Eye on Your Web Stats</h3>
<p>We&#8217;ve already started to see the first hints of web visitors peering at our websites through the eyes of tiny interfaces. In the stats, these show up as screen resolutions somewhere in the neighbourhood of 320&#215;240. Keep an eye on the relative percentage of visitors you have that are checking out your site through these small eyes. Most right now are probably just curious what your website looks like on their shiny new phone, but soon enough these people will be legitimately trying to use your website through that small screen, they&#8217;ll also soon be expecting to see the same standards on that small screen as what they see on their 15.4&#8243; monitor, and eventually the bigger players in the web will be catering to this - so you don&#8217;t want to get left behind!</p>
<h2>The Bottom Line</h2>
<p>The world wide web is about to get an awful lot wider - and it&#8217;ll be in large part thanks to the true arrival of the web onto smaller and smaller interfaces. With web2.0 apps that bring software-like functionality in byte-size packages, all processed through the power of cloud computing, it won&#8217;t be long before the power we now see on traditional computers gets leveraged through mobile devices. The change is coming - the question is what are you going to do about it?&#8230;And are you ready?</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=What%20the%20iPhone%2C%20Android%2C%20and%20Chrome%20Mean%20For%20Web%20Professionals&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F09%2F21%2Fwhat-the-iphone-android-and-chrome-mean-for-web-professionals%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="What the iPhone, Android, and Chrome Mean For Web Professionals";
		a2a_linkurl="http://blog.midstride.com/2008/09/21/what-the-iphone-android-and-chrome-mean-for-web-professionals/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/09/21/what-the-iphone-android-and-chrome-mean-for-web-professionals/feed/</wfw:commentRss>
		</item>
		<item>
		<title>5 Reasons Why You Should Do Usability Testing</title>
		<link>http://blog.midstride.com/2008/09/14/5-reasons-why-you-should-do-usability-testing/</link>
		<comments>http://blog.midstride.com/2008/09/14/5-reasons-why-you-should-do-usability-testing/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 06:34:03 +0000</pubDate>
		<dc:creator>adrian</dc:creator>
		
		<category><![CDATA[Web Strategy]]></category>

		<category><![CDATA[design]]></category>

		<category><![CDATA[featured]]></category>

		<category><![CDATA[user experience]]></category>

		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=25</guid>
		<description><![CDATA[No matter how small or trivial you may think your project is, you will always benefit from doing at least a little usability testing. Here are five reasons why.]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.midstride.com/wp-content/uploads/2008/09/5reasons_usability.png"><img class="alignleft size-full wp-image-26" title="5reasons_usability" src="http://blog.midstride.com/wp-content/uploads/2008/09/5reasons_usability.png" alt="" width="250" height="250" /></a>Usability testing is a phase in the development process that often gets overlooked, shortchanged, or outright stricken out of project plans. Sometimes usability testing is ruled out because of time constraints, other times it&#8217;s because of a lack of resources such as equipment or expertise. On other cases, it may just seem like running a usability test is overkill for your project. But you don&#8217;t have to be running a Nokia usability lab to make usability testing a worthwhile exercise. Nno matter how small or trivial your project may be, you will always benefit from doing at least a little testing. Here are five reasons why you should do usability testing.</p>
<h2>Reason 1 - Planning for Usability Testing Helps Keep Your Project On Track</h2>
<p>Even if it only gets one row in the GANTT chart, having usability testing as a step in your overall project plan will give you a tangible goal to work towards that will help you move forward on your overall project.</p>
<p>In order to run any form of usability test, you will need to come up with mockups or prototypes of some form - be it crude Photoshop mockups or paper prototypes, or functional wireframes with a bare bones design - you need to have something to run the test on.</p>
<p>In this respect, having usability testing as part of your project plan helps break your big project down into smaller, more manageable chunks, which in turn helps you keep on top of your progress.</p>
<h2>Reason 2 - Usability Testing Will Teach You Things You Didn&#8217;t Know Before</h2>
<p>If you get a chance to do usability testing with a good variety of your targeted end-users, you may be surprised at what you find. Quite often, new insights come from watching someone use your website. What was natural and intuitive to you and your team suddenly doesn&#8217;t seem so logical when 4 out 5 of your testers can&#8217;t complete the task you originally set out for them to do.</p>
<p>Usability testing also gives your site a fresh set of eyes to help uncover new ideas and even possibly new features to add to your site. Sometimes it&#8217;s just a passing comment from one of your testers that might spawn the idea for a new core feature that you would never have thought of on your own.</p>
<p>You and your team probably also have some hunches on what will work with your target audience - maybe it&#8217;s something like a colour scheme to something more complex like the steps required to recover your username and password. Usability testing gives you that feedback to confirm your hunches.</p>
<h2>Reason 3 - Usability Testing Gives You Data to Back Your Decisions</h2>
<p>Unless you&#8217;re working on a personal project without any real accountability to another stakeholder or client, odds are the website or application you are working on will have to go through some levels of approval and sign off. In this process, you will be questioned about a design decision or asked to squeeze something else in. For example:</p>
<ul>
<li>Why is the font so small?</li>
<li>Is there a reason why we can&#8217;t use the full width of the page?</li>
<li>We have another 12 links that need to get into the sub navigation. Where can we put them in?</li>
<li>That link down there needs to go into the top row of links on the homepage. Why isn&#8217;t it there?</li>
<li>The photo on the homepage needs to be bigger. Like, way bigger. Like, ten times bigger than it is right now.</li>
</ul>
<p>Usability testing has the potential to give you instant data to help back your design decisions. Armed with information gleaned from watching real people actually use your site (or working prototype), you will have greater credibility and more to stand on than just your opinion. Usability testing will give you real metrics you can use to support your position.</p>
<h2>Reason 4 - Usability Testing Gives You Documentation that You Can Re-use for Future Projects</h2>
<p>If you do a good job of documenting the findings from your usability testing, that whole process itself will serve as a valuable start the next go-around. Depending on the type of project and work being done, you may even be able to use the findings from previous tests to help get you and your team off on the right foot moving forward on your next project.</p>
<p>Similar to how usability testing gives you data to help defend your decisions to clients and stakeholders, that same data arms you with some information that you can use yourself. This is particularly useful when you&#8217;re confronted with making a seemingly arbitrary decision during your design phase.</p>
<p>Having a completely blank slate with endless possibilities and no constraints can actually be a very challenging and even frustrating space to design in - this is when arbitrary decisions are at their worst. It&#8217;s much easier to make a design decision when you have some form of constraint or guideline, really anything that can set you in one direction. And this is exactly what previous usability testing results can sometimes provide. With some baseline information on what worked and what didn&#8217;t work in the last design, you now have a starting point for this next design.</p>
<h2>Reason 5 - Usability Testing Gives You an Opportunity to Field Test New Ideas</h2>
<p>Usability testing doesn&#8217;t have to always be about testing something you&#8217;ve created. In fact, quite often, you could use the same exercise to test something that is, at this stage, nothing more than an idea.</p>
<p>In sales they would call this something like the <a title="Foot in the Door" href="http://en.wikipedia.org/wiki/Foot-in-the-door_technique">foot in the door technique</a> where you get someone to agree to a large request by first having them agree to a smaller one. What you&#8217;d want to do here is a little less sinister <img src='http://blog.midstride.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> and more along the lines of trying to make the most of this valuable time you have with and end-user of your site.</p>
<p>Run your usability test and get your data, but then also try running some of your as-of-yet-unproven ideas and see what sort of feedback you get.</p>
<p>Face it, there&#8217;s definitely some administrative overhead that comes with running usability tests. If nothing else, there&#8217;s the simple task of scheduling and taking the time from people&#8217;s days to get them into the sessions. You might as well make the best use of this time and use it as a real opportunity to uncover some of the most valuable information you&#8217;ll get.</p>
<h2>But Wait, There&#8217;s More!</h2>
<p>This is all fine and dandy, but let&#8217;s bring this back full circle - what if you&#8217;re under a tight timeline, or don&#8217;t have the budget to get a robust usability test into your project cycle? All this is a lot of fluff if you can&#8217;t actually run the tests.</p>
<p>Well, usability testing doesn&#8217;t have to be that hard, and it can be done at any time in your development lifecycle - even after you&#8217;ve launched. You probably already engage in some form of usability testing yourself when you&#8217;re building your websites or applications, probably without even realizing it. We&#8217;ll go into these and other topics in the coming weeks.</p>
<p>In the meantime, let me know what you think! Why else would you do usability testing? Or why shouldn&#8217;t you do usability testing? If you&#8217;ve wanted to do usability testing before, why haven&#8217;t you? What&#8217;s holding you back?</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=5%20Reasons%20Why%20You%20Should%20Do%20Usability%20Testing&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F09%2F14%2F5-reasons-why-you-should-do-usability-testing%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="5 Reasons Why You Should Do Usability Testing";
		a2a_linkurl="http://blog.midstride.com/2008/09/14/5-reasons-why-you-should-do-usability-testing/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/09/14/5-reasons-why-you-should-do-usability-testing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to Select an Open Source Publishing Platform - Step 3: Determine Your Capacity for Internal Design</title>
		<link>http://blog.midstride.com/2008/09/10/how-to-select-an-open-source-publishing-platform-step-3-determine-your-capacity-for-internal-design/</link>
		<comments>http://blog.midstride.com/2008/09/10/how-to-select-an-open-source-publishing-platform-step-3-determine-your-capacity-for-internal-design/#comments</comments>
		<pubDate>Thu, 11 Sep 2008 06:36:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web Strategy]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[design]]></category>

		<category><![CDATA[open source design]]></category>

		<category><![CDATA[templates]]></category>

		<category><![CDATA[themes]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=9</guid>
		<description><![CDATA[A couple weeks ago we took a look at some of the first steps to take when selecting an open source publishing platform. The next step we're going to cover will touch on design. What should you consider when it comes to designing a new look and feel for your open source tool?]]></description>
			<content:encoded><![CDATA[<p>A couple weeks ago we took a look at some of the first steps to take when selecting an open source publishing platform. From starting off with <a title="How to Select an Open Source Publishing Platform - Step 1: Research Your Market - Midstride" href="http://blog.midstride.com/2008/08/24/how-to-select-an-open-source-publishing-platform-step-1/">doing some guerilla market research</a> and viewing source code to figure out what tools others are using, moving on to trying to <a title="How to Select an Open Source Publishing Platform - Step 2: Determine Your capacity for Internal Development Work - Midstride" href="http://blog.midstride.com/2008/08/28/how-to-select-an-open-source-publishing-platform-step-2-determine-your-capacity-for-internal-development-work/">gauge your internal capacity for carrying out the web development work</a> required to set up and extend your installation, the next step we&#8217;re going to cover is how to assess your internal capacity to carry out the design work needed to create the web user experience you&#8217;re looking for out of your open source site.<br />
<span id="more-9"></span></p>
<p><a href="http://blog.midstride.com/wp-content/uploads/2008/09/design_ninja.png"><img class="alignleft size-medium wp-image-24" title="design_ninja" src="http://blog.midstride.com/wp-content/uploads/2008/09/design_ninja.png" alt="Gotta Design Ninja?" width="250" height="250" /></a>Without a doubt there are at least two faces to any open source publishing platform. There is the elegance of the code, and then elegance in the visual design. Sometimes it&#8217;s this difference between the ease of working with the source code vs. the ease of designing a visual interface that will account for why one boutique shop will roll out websites with online-community-type features in, say, <a title="Joomla" href="http://www.joomla.org/">Joomla</a>, while another will roll out websites that do more or less the same things, but in another tool, say, <a title="Drupal" href="http://www.drupal.org">Drupal</a>.</p>
<p>Coming up with a sharp new design for a website is one thing, and implementing it into a working website is another - this is particularly true when it comes to taking a Photoshop mock-up and splicing it up to fit the markup and code generated by open source software. And unfortunately, there is no good way to get a good feel for this other than getting your hands dirty yourself, or talking to someone else who has (and whose skill level you know and trust).</p>
<p>When it comes to the design aspect of open source software, not all products were created equal - some open source products are easier to design for than others.</p>
<p><a title="Drupal" href="http://www.drupal.org">Drupal</a>, for example, is infamous for offering incredibly powerful programming possibilities, but sometimes to the point where designing beautiful interfaces becomes a real challenge for even the best designers. Now that being said, there are some amazing sites out there that are driven by Drupal.</p>
<p>The other alternative that will be available to you is to turn back to the &#8220;source&#8221; and make use of some community-created templates (for example: <a title="Drupal Themes" href="http://drupal.org/project/themes">Drupal Themes</a>, or <a title="WordPress Themes" href="http://wordpress.org/extend/themes/">WordPress Themes</a>). This is an excellent alternative, especially if you&#8217;re really under the gun to churn out a hot-looking site pronto. This can also be an incredibly helpful way to learn more about what&#8217;s involved in customizing the designs for the open source tool.</p>
<h2>Key Design Skills for Customizing Themes and Templates</h2>
<p>There are a few key skills that you&#8217;ll absolutely need to have &#8220;in-house&#8221; if you&#8217;re going to tackle any design work that touches the source code:</p>
<h3>1. Expert Knowledge of CSS</h3>
<p>Any open source software you download worth its lick will have templates that rely heavily on CSS for its overall look and feel. Knowing how to edit someone else&#8217;s CSS can sometimes be trickier than starting from a blank slate and creating a completely fresh stylesheet. Either way, you&#8217;ll need to have someone on your team who knows their CSS.</p>
<h3>2. Familiarity with Templating engines</h3>
<p>By &#8220;templating engines&#8221; I&#8217;m referring to things like <a title="Smarty Template Engine" href="http://www.smarty.net/">Smarty</a> or the overall framework for how <a title="Drupal Themes" href="http://drupal.org/project/Themes">Drupal</a> or <a title="WordPress Tag Templates" href="http://codex.wordpress.org/Tag_Templates">WordPress</a> pieces together what becomes the template of your site. While it would be ideal to have the in-house knowledge of the exact platform you&#8217;re using, the reality is that different platforms have their own methods for creating the overall look and feel of their sites, so you&#8217;ll be just as well off with a generalist who is able to figure out how a particular platform pieces together the programming logic, markup, and styles. Just because you know one, doesn&#8217;t mean you&#8217;ll automatically know them all. But if you get the gist of how a template engine/system works, you should be able to adapt to figure out the others.</p>
<h3>3. Past Experience Customizing a Design</h3>
<p>Ok, this one&#8217;s admittedly a vicious circle - how do you leverage past experience if you don&#8217;t have any? Well this is where it comes back to how the only way you&#8217;ll REALLY learn what&#8217;s involved in customizing the design of an open source platform is to get your hands dirty and start trying it.</p>
<p>The point here, though, is that if, for example, you already have one or two people with past experience modifying a WordPress template whereas no one has yet tackled a Drupal theme, this should really weigh in on your overall decision-making process of what tool to use. It&#8217;s nice if you have the time to learn the new tools, but if you&#8217;re pressed for time and need to roll out what you can by the deadline, go with what you know.</p>
<h3>4. Past Experience Implementing &amp; Modifying Extended Themes/Templates/Plugins</h3>
<p>There are a lot of really good - and freely available - templates that others in the community have created and shared. And what you may quickly find out is that your time will be better spent taking one of these extensions of the core templates, and then making the customizations on these rather than the original default templates.</p>
<p>This, again, is an area where past experience will do you well - you really won&#8217;t know (and can&#8217;t appreciate) how hard or easy it will be to implement and then modify an extended theme or template until you&#8217;ve gone ahead and tried it.</p>
<p>Similar to how you should <a title="How to Select an Open Source Publishing Platform - Step 2" href="http://blog.midstride.com/2008/08/28/how-to-select-an-open-source-publishing-platform-step-2-determine-your-capacity-for-internal-development-work/">be selective of which plugins and modules to use</a>, you can apply the same measures to help you be selective of the themes and templates you set up for your site - how active is the template designer? What sorts of questions are being asked by others who are using the template? Is the original template creator still using the template themselves?</p>
<p>These are just some thoughts, tips, suggestions. What do you think? What else would you be looking for in a designer? What would you want to know before diving into redesigning an open source template?</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=How%20to%20Select%20an%20Open%20Source%20Publishing%20Platform%20-%20Step%203%3A%20Determine%20Your%20Capacity%20for%20Internal%20Design&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F09%2F10%2Fhow-to-select-an-open-source-publishing-platform-step-3-determine-your-capacity-for-internal-design%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="How to Select an Open Source Publishing Platform - Step 3: Determine Your Capacity for Internal Design";
		a2a_linkurl="http://blog.midstride.com/2008/09/10/how-to-select-an-open-source-publishing-platform-step-3-determine-your-capacity-for-internal-design/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/09/10/how-to-select-an-open-source-publishing-platform-step-3-determine-your-capacity-for-internal-design/feed/</wfw:commentRss>
		</item>
		<item>
		<title>5 tips and tools to develop php applications fast</title>
		<link>http://blog.midstride.com/2008/09/09/5-tips-to-develop-php-applications-fast/</link>
		<comments>http://blog.midstride.com/2008/09/09/5-tips-to-develop-php-applications-fast/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 05:00:15 +0000</pubDate>
		<dc:creator>andre</dc:creator>
		
		<category><![CDATA[Dojo]]></category>

		<category><![CDATA[Zend Framework]]></category>

		<category><![CDATA[featured]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[Add new tag]]></category>

		<category><![CDATA[IDE]]></category>

		<category><![CDATA[mvc]]></category>

		<category><![CDATA[ORM]]></category>

		<category><![CDATA[php frameworks]]></category>

		<category><![CDATA[rapid application development]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=19</guid>
		<description><![CDATA[In this post, I will discuss 5 tips and tools that the php community has provided to speed up development time and improve code quality.  These should help you out if you don't already know them, but if you do I would like to hear what you use to speed up your development time.]]></description>
			<content:encoded><![CDATA[<p>When web applications like <a href="http://www.basecamphq.com/" target="_blank">basecamp</a> started appearing, a lot of attention started turning to <a href="http://www.rubyonrails.org/" target="_blank">Ruby on Rails</a>.  Suddenly small groups of technically driven people could release powerful applications in a month or two.  With this awareness, the usability standards for web applications increased and so did the technical challenges for web developers and designers.  This movement sort of left php developers in the dust for a while.  While CakePHP and other frameworks came to the rescue, it didn&#8217;t seem like the php community wanted to match Ruby on Rails.  If anything, php has been looking to retain its strong foundations of being built upon a powerful, easy to use library and integrating new &#8220;web 2.0&#8243; like ideas to do more than Ruby on Rails.</p>
<p>In this post, I will discuss 5 tips and tools that the php community has provided to speed up development time and improve code quality.  These should help you out if you don&#8217;t already know them, but if you do I would like to hear what you use to speed up your development time.</p>
<p><span id="more-19"></span></p>
<ol>
<li><strong>Framework with the Model View Controller (MVC):<br />
</strong>This is old news, the MVC pattern is an industry accepted pattern to improve the organization and overall quality of your code.  Put your database code in the model layer, visual UI code in the view, and business application logic in the controller.  If you don&#8217;t know the MVC layer, you really should.</p>
<blockquote><p>My choice: <a href="http://framework.zend.com/manual/en/zend.controller.html" target="_blank">Zend Framework</a><br />
Why?  Easy to pick and choose what you want to use; strong momentum behind it; good documentation.</p></blockquote>
<p>Resources:<br />
<a href="http://framework.zend.com/manual/en/zend.controller.html" target="_blank">http://framework.zend.com/manual/en/zend.controller.html</a><br />
<a href="http://www.cakephp.org/" target="_blank">http://www.cakephp.org</a><br />
<a href="http://www.symfony-project.org/" target="_blank">http://www.symfony-project.org</a><br />
<a href="http://codeigniter.com/" target="_blank">http://codeigniter.com/</a></li>
<li><strong>AJAX Frameworks:</strong><br />
Also old news, you should become familiar with a common AJAX framework.  Scriptaculous, mootools, jquery, and dojo to name a few&#8230; these frameworks can all do similar things and will make your clients go ooh and ahh.  Actually, these days AJAX interaction is become standard.  Being a Zend developer, I would suggest acquainting yourself with the Dojo framework.  It&#8217;s probably the largest and most complex of them all but is very powerful.</p>
<blockquote><p>My choice: <a href="http://dojotoolkit.org/ " target="_blank">Dojo<br />
</a>Why?  Zend has adopted it into the zend framework; easy to extend; large resource of reusable widgets to use.</p></blockquote>
<p>Resources:<br />
<a href="http://en.wikipedia.org/wiki/Ajax_framework" target="_blank">http://en.wikipedia.org/wiki/Ajax_framework</a><br />
<a href="http://www.phpframeworks.com/" target="_blank">http://www.phpframeworks.com/</a><br />
<a href="http://mootools.net/" target="_blank">http://mootools.net/</a><br />
<a href="http://jquery.com/" target="_blank">http://jquery.com/</a><br />
<a href="http://script.aculo.us/" target="_blank">http://script.aculo.us/</a><br />
<a href="http://www.prototypejs.org/">http://www.prototypejs.org/</a><br />
<a href="http://dojotoolkit.org/ " target="_blank">http://dojotoolkit.org/ </a></li>
<li><strong>Integrated Development Environment (IDE):<br />
</strong> I won&#8217;t go into much detail here, if you&#8217;re developing objected oriented code or using a lot of libraries you should get a good IDE.  Eclipse PDT is my favourite because it&#8217;s free and has some very useful plugins to extend it.  My basic requiremnts are resource/file management of libraries, auto completion, basic syntax validation, and basic debugging tools.</p>
<blockquote><p>My choice:  <a href="http://www.eclipse.org/pdt/" target="_blank">Eclipse PDT</a><br />
Why?  It&#8217;s free and provides all the basic features an IDE should have.</p></blockquote>
<p>Resources:<br />
<a href="http://www.eclipse.org/pdt/" target="_blank">http://www.eclipse.org/pdt/</a><br />
<a href="http://www.zend.com/en/products/studio/" target="_blank">http://www.zend.com/en/products/studio/</a><br />
<a href="http://www.ibm.com/developerworks/opensource/library/os-php-ide/index.html" target="_blank">http://www.ibm.com/developerworks/opensource/library/os-php-ide/index.html</a></li>
<li><strong>Database Creation/Management Software</strong>:<br />
Managing a database schema can become tedious error prone thing to do.  If you don&#8217;t have a dedicated database team, and in many cases are the web and database developer, then you should be doing more than handling your schema in mysql (or your database of choice).  MySql has recently released workbench, a database management software that is really powerful.  I prefer DBDesigner 4 right now because it&#8217;s simple to use and feeds into <a href="http://propel.tigris.org/" target="_blank">propel db</a> well.  But I plan on moving over to workbench in the near future as it&#8217;s really the continuation of DBDesigner.</p>
<blockquote><p>My choice: <a href="http://fabforce.net/dbdesigner4/ " target="_blank"> DBDesigner</a>, but not for long.<br />
Why?  It&#8217;s simple to manage your database schema visually and exports well.</p></blockquote>
<p>Resources:<br />
<a href="http://dev.mysql.com/workbench/" target="_blank">http://dev.mysql.com/workbench/</a><br />
<a href="http://fabforce.net/dbdesigner4/ " target="_blank">http://fabforce.net/dbdesigner4/ </a></li>
<li><strong>Object Relational Mapping (ORM)</strong>:<br />
If you don&#8217;t know what this is, it&#8217;s basically a way of mapping your database tables to objects.  It&#8217;s so you don&#8217;t have to think about how to connect your logic/business code to the database.  Also, if you use tools like Propel DB you don&#8217;t have to code this as it generates it all for you.  While your application may not perform as well as with straight SQL, you will code faster and you can find ways to tweak bottle neck cases.</p>
<blockquote><p>My choice:  <a href="http://propel.tigris.org/" target="_blank">Propel DB<br />
</a>Why?  It&#8217;s easy to use and integrate into the zend framework; There aren&#8217;t many other options.</p></blockquote>
<p>Resources:<br />
<a href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank">http://en.wikipedia.org/wiki/Object-relational_mapping</a><br />
<a href="http://propel.tigris.org/" target="_blank">http://propel.tigris.org/ </a></li>
</ol>
<h2>Wrap Up / Further thoughts</h2>
<p>I hope this was useful for you.  Everyone has their own combination that works for them, and in a lot of cases the company forces you to use one.  Where I work, we can use whatever combination we want and I know there are many.  I would like to hear what your setup is like, what IDE, framework, and OS works for you and why?</p>
<p>Comment/Get the links for this post here:<br />
<script src="http://www.buncholinks.com/widget/script/i/59/k/305ff773469a6fcd760e059d2c266b2c" type="text/javascript"></script></p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=5%20tips%20and%20tools%20to%20develop%20php%20applications%20fast&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F09%2F09%2F5-tips-to-develop-php-applications-fast%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="5 tips and tools to develop php applications fast";
		a2a_linkurl="http://blog.midstride.com/2008/09/09/5-tips-to-develop-php-applications-fast/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/09/09/5-tips-to-develop-php-applications-fast/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using Web Statistics to Make Informed Design Decisions</title>
		<link>http://blog.midstride.com/2008/09/02/using-web-statistics-to-make-informed-design-decisions/</link>
		<comments>http://blog.midstride.com/2008/09/02/using-web-statistics-to-make-informed-design-decisions/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 01:11:36 +0000</pubDate>
		<dc:creator>adrian</dc:creator>
		
		<category><![CDATA[Web Strategy]]></category>

		<category><![CDATA[analytics]]></category>

		<category><![CDATA[design]]></category>

		<category><![CDATA[headline]]></category>

		<category><![CDATA[web statistics]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=10</guid>
		<description><![CDATA[One of your worst nightmares as a web designer is getting caught up in a conversation where you're trying to defend a design decision, and what you're battling isn't a rationed and informed perspective based on...]]></description>
			<content:encoded><![CDATA[<p>One of your worst nightmares as a web designer is getting caught up in a conversation where you&#8217;re trying to defend a design decision, and what you&#8217;re battling isn&#8217;t a rationed and informed perspective based on sound design principles of ratios, colour theory or typography, but rather the personal opinion of the loudest voice at the table.</p>
<p>&#8220;<em>I think the page is too narrow. I hate it when I have to scroll through pages and pages of content</em>,&#8221; says one person.</p>
<p>&#8220;<em>Hmm. Yeah, but, I don&#8217;t know&#8230;I don&#8217;t like it when the page is too wide&#8230;.makes it too hard for me to scan the text</em>,&#8221; says the other.</p>
<p><span id="more-10"></span></p>
<p>&#8220;<em>Well, yeah, sure, but well. I just think it looks better when it&#8217;s a little wider.</em>&#8221;</p>
<p>&#8220;<em>Well how wide do you think it should be? It&#8217;s actually filling my whole browser window right now.</em>&#8221;</p>
<p>&#8220;<em>Oh really? I&#8217;m looking at it on my laptop and it&#8217;s not.</em>&#8221;</p>
<p>&#8220;<em>Well it&#8217;s filling it on mine.</em>&#8221;</p>
<p>And on it goes&#8230;</p>
<p>It can catch you off guard, and it can be delicate to tip-toe around what you really want to say: &#8220;<strong><em>What you yourself personally think doesn&#8217;t really matter! (unless you have something more to base that opinion on).</em></strong>&#8221;</p>
<p>So what can you do to better prepare yourself for the design presentation? How can you arm yourself with the right tools to walk into a meeting confident that you can politely, and yet assertively, re-affirm the decisions you made with coming up with your design?<br />
One of the best ways to confront - and also pro-actively deal with - the rise of personal opinions in a design discussion is to arm yourself with some good solid data, and web statistics are one of the best ways to do this.</p>
<h2>Opinion vs. The Informed Web Design Decision</h2>
<p>Web statistics are helpful for making informed decisions about the design, development, and on-going maintenance of your website.</p>
<p>Rather than relying on personal preferences or anecdotal observations, statistics provide a broader and more objective context for helping you make decisions that will best accommodate the needs of your online audience.</p>
<p>Web statistics can help you decide:</p>
<ul>
<li>how wide (or narrow) to make your web template</li>
<li>when to separate content into separate pages or when to use anchor links in a single page to make sure content isn&#8217;t lost &#8220;below the fold&#8221;</li>
<li>when to change your page layout or add new design elements to aid with navigation</li>
<li>what tools and technologies you can reliably expect your audience to be able to use (e.g. Flash)</li>
<li>what time of year/month/week/day to complete major site-wide changes</li>
</ul>
<p>Statistics will not make decisions for you - but what they do is provide you with information that you can then make a judgment on.</p>
<p>For example, if you find out that only 3% of your web visitors are using browsers with a resolution of 800&#215;600 pixels or less, you could now consider the impact of creating a fixed-width template at 1024 pixels wide (giving you a controlled and relatively large page to work with) vs. a fluid-width template (giving you a less-controlled but more flexible and adaptable page).</p>
<p>For any design decision, there are always pros and cons. But with web statistics, you will at least be able to make informed decisions on what the benefits and trade-offs are rather than relying one person&#8217;s opinion.</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=Using%20Web%20Statistics%20to%20Make%20Informed%20Design%20Decisions&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F09%2F02%2Fusing-web-statistics-to-make-informed-design-decisions%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="Using Web Statistics to Make Informed Design Decisions";
		a2a_linkurl="http://blog.midstride.com/2008/09/02/using-web-statistics-to-make-informed-design-decisions/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/09/02/using-web-statistics-to-make-informed-design-decisions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to Select an Open Source Publishing Platform - Step 2: Determine Your Capacity for Internal Development Work</title>
		<link>http://blog.midstride.com/2008/08/28/how-to-select-an-open-source-publishing-platform-step-2-determine-your-capacity-for-internal-development-work/</link>
		<comments>http://blog.midstride.com/2008/08/28/how-to-select-an-open-source-publishing-platform-step-2-determine-your-capacity-for-internal-development-work/#comments</comments>
		<pubDate>Fri, 29 Aug 2008 04:32:02 +0000</pubDate>
		<dc:creator>adrian</dc:creator>
		
		<category><![CDATA[Web Strategy]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=8</guid>
		<description><![CDATA[In the last post on selecting an open source publishing platform we offered a pretty simple tip to help you get started: take a look at the source code of other sites in your field and see what tools they&#8217;re using. Once you&#8217;ve figured that part out, the next step is to determine whether you have what it takes to roll out an installation of the tool yourself. What extra plugins or modules are required for the full feature-set you&#8217;re looking for? How active is the community in using those ...]]></description>
			<content:encoded><![CDATA[<p>In the last post on <a title="How to Select an Open Source Publishing Platform - Midstride" href="http://blog.midstride.com/2008/08/24/how-to-select-an-open-source-publishing-platform-step-1/">selecting an open source publishing platform</a> we offered a pretty simple tip to help you get started: take a look at the source code of other sites in your field and see what tools they&#8217;re using. Once you&#8217;ve figured that part out, the next step is to determine whether you have what it takes to roll out an installation of the tool yourself. What extra plugins or modules are required for the full feature-set you&#8217;re looking for? How active is the community in using those particular plugins and modules? How confident are you that you can maintain these in the future, particularly once your site is up live?<br />
<span id="more-8"></span></p>
<p>Part of the point of open source is that you don&#8217;t have to be a <a title="Das Bus - Wikipedia" href="http://en.wikipedia.org/wiki/Das_Bus">Compu-Global-Hyper-Mega-Net</a> nor a super programming ninja to get up and running with pretty powerful software. Open source increases access to the technology which in turn helps it grow. But &#8220;open source&#8221; doesn&#8217;t mean &#8220;free&#8221;. It&#8217;s free in the sense that you don&#8217;t have to pay a license fee to use the software, but there are still costs associated with running open source software. Other than basic infrastructural costs you&#8217;ll have for hosting any website, there is the added cost of the time it will take you or your developer to learn the tool.</p>
<h2>What&#8217;s Your Time Worth?</h2>
<p>It&#8217;s cliche because it&#8217;s true, but time really is money. The time you or your developer spends in learning the intricacies of an open source tool may pay dividends down the road - at least if you end up going with the tool that you spent all that time to learn. But the time you or your developer spends in learning the tool may also turn out to be a sunken loss if it turns out that you can&#8217;t use the software in the end. Sure, it&#8217;ll have been a good learning experience, but there&#8217;s only so much learning you can afford to do before you&#8217;ll need some bottom-line results.</p>
<p>Time becomes an even larger factor when it comes time to selecting and implementing plugins or modules. With each plugin or module you add, you start branching yourself off into a smaller sub-set of the larger community. If you customize the software yourself without contributing your modifications back to the community, you&#8217;ll be branching off even further. What you want to avoid is deviating so far from the core community that you end up on an open source island all to yourself.</p>
<h2>Don&#8217;t Be Scared, Be Selective</h2>
<p>The point here isn&#8217;t to avoid plugins, modules, or customization. In fact, it&#8217;s this extending of the core software that often delivers the kind of features that really draw in the growing masses of users. The key, though, is to be selective with what you implement.</p>
<p>The best time to pick-and-choose plugins and modules is early in the game when you&#8217;re taking the first steps in planning your site. And in fact, there are a few ways you can go about doing this.</p>
<p><strong>Method 1:</strong> Draft up your list of all the features you&#8217;re looking for, then go hunting for a plugin/module that does it.</p>
<p><strong>Method 2:</strong> Search-hunt-browse through the available plugins, modules, demo sites etc. and see what&#8217;s available. You may even get some new ideas for what you want to do with your site based on what you find.</p>
<p><strong>Method 3:</strong> Do both of the above, and if you can&#8217;t find a plugin/module that does it, consider building it yourself! (Or contracting out someone to build it for you.)</p>
<p>You&#8217;ll likely end up doing a little of 1 and 2 (if you&#8217;re considering Method 3, you probably stopped reading this article a long time ago). No matter what, it never hurts to give a plugin or module a quick dry-run or pilot it on your development environment or sandbox - you can learn a lot very quickly just by trying to get it all set up, working (and looking) the way you want it to.</p>
<h2>Do Your Homework, Do Your Due Diligence</h2>
<p>When you evaluate these extensions, be sure to visit the sites from the plugin/module authors. When did they last update the plugin/module? What sorts of bugs have been reported? What kinds of comments are others submitting? Is the author actively using the plugin/module on their own website?</p>
<p>Depending on your technical knowledge, you may also want to take a look through the source code itself. If this plugin or module is going to become a core piece to your overall website, do you understand what&#8217;s happening well enough so that if you ever had to, <strong>you</strong> could be the one who maintains the source code as newer versions of the larger open source tool are rolled out?</p>
<h2>Some Popular WordPress Plugins</h2>
<ul>
<li><a title="WordPress.com Stats" href="http://wordpress.org/extend/plugins/stats/">WordPress.com Stats</a> - the same stats plugin running on WordPress.com<a title="WordPress.com Stats" href="http://wordpress.org/extend/plugins/stats/"><br />
</a></li>
<li><a title="cFormsII" href="http://wordpress.org/extend/plugins/cforms/">cFormsII</a> - a form-builder plugin</li>
<li><a title="podPress" href="http://wordpress.org/extend/plugins/cforms/">podPress</a> - to add podcasts to your blog</li>
</ul>
<h2>Ok, the Gears are Turning, but What About Making it Look Hot!?</h2>
<p>While you assess the core functionality, the plugins or modules, along with your ability to support and customize these, you&#8217;ll also want to consider how far you can take the visual design - i.e. Step 3: Determine Your Capacity for Internal Design Work (coming up next in this series of posts).</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=How%20to%20Select%20an%20Open%20Source%20Publishing%20Platform%20-%20Step%202%3A%20Determine%20Your%20Capacity%20for%20Internal%20Development%20Work&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F08%2F28%2Fhow-to-select-an-open-source-publishing-platform-step-2-determine-your-capacity-for-internal-development-work%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="How to Select an Open Source Publishing Platform - Step 2: Determine Your Capacity for Internal Development Work";
		a2a_linkurl="http://blog.midstride.com/2008/08/28/how-to-select-an-open-source-publishing-platform-step-2-determine-your-capacity-for-internal-development-work/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/08/28/how-to-select-an-open-source-publishing-platform-step-2-determine-your-capacity-for-internal-development-work/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Integrating AJAX/Dojo into the Zend MVC in 8 steps.</title>
		<link>http://blog.midstride.com/2008/08/26/integrating-ajaxdojo-into-the-zend-mvc-in-8-steps/</link>
		<comments>http://blog.midstride.com/2008/08/26/integrating-ajaxdojo-into-the-zend-mvc-in-8-steps/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 04:39:23 +0000</pubDate>
		<dc:creator>andre</dc:creator>
		
		<category><![CDATA[Dojo]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Zend Framework]]></category>

		<category><![CDATA[ajax]]></category>

		<category><![CDATA[featured]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[framework]]></category>

		<category><![CDATA[mvc]]></category>

		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://blog.midstride.com/?p=7</guid>
		<description><![CDATA[If you have been following the Zend Framework at all, you'll know that Dojo has been selected as the UI library to be adopted into the Zend Framework. The question is what does this exactly mean? ]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p><a href="http://blog.midstride.com/wp-content/uploads/2008/09/zend_dojo.jpg"><img class="alignnone size-thumbnail wp-image-14 alignleft" style="float: left;" title="zend_dojo" src="http://blog.midstride.com/wp-content/uploads/2008/09/zend_dojo-150x118.jpg" alt="" width="150" height="118" /></a>If you have been following the <a href="http://framework.zend.com/" target="_blank">Zend Framework</a> at all, you&#8217;ll know that <a href="http://dojotoolkit.org/">Dojo </a>has been selected as the UI library to be adopted into the Zend Framework.  The question is what does this exactly mean?  I&#8217;m still trying to figure out how they are going to use dojo, but right now with release 1.6 you can create dojo widgets (e.g. - date pickers, currency boxes, specialized buttons etc&#8230;) in code with the Zend_Dojo object.   That being said, you still need to learn a few more things to create a useful and reusable AjAX framework with Zend.<br />
<span id="more-7"></span></p>
<h3>The Goal</h3>
<p>This tutorial will explain how to create a reusable UI AJAX layer with dojo that communicates to the Zend controller class.  I&#8217;ll provide some basic code that will show you one way of creating a reusable framework that makes it easier to organize your javascript/ajax and controller layer.</p>
<h3>Prerequisites</h3>
<p>Before you proceed, you&#8217;ll need to read up on how to setup the Zend MVC framework.</p>
<ul>
<li><a href="http://framework.zend.com/manual/en/zend.controller.html">Zend Framework with a MVC structure</a></li>
<li><a href="http://dojotoolkit.org/downloads">Dojo framework</a></li>
</ul>
<h3>The Steps</h3>
<p>1. Setup the Zend Framework and a MVC structure</p>
<p>2. Create the controller class file (e.g. - MidstrideController.php)</p>
<p>3. Create the view folder &#8220;midstride&#8221; in the view/scripts directory.</p>
<p>4. Create the file &#8220;index.phtml&#8221; in the midstride views/scripts folder.</p>
<p>5. Create an empty javascript file called ajaxmethods.js and place it in your javascript folder.</p>
<p><em><strong>-check up-<br />
</strong></em>Your file structure should look something like this now:</p>
<p>-/application/controller/MidstrideController.php<br />
-/application/views/scripts/midstride/index.phtml<br />
-/www/javascript/ajaxmethods.js<br />
-/www/scriptslib/dojo-release-1.1.1</p>
<p>Where application is your MVC folder and www is the directory for your assets and index.php bootstrap file.</p>
<p>5. Add the javascript code to the header of index.phtml</p>
<pre class="programlisting"> <code>
<span style="color: #000000;">
&lt;script type="text/javascript" src="&lt;?php echo $this-&gt;baseUrl; ?&gt;/javascript/ajaxmethods.js"&gt;&lt;/script&gt;

&lt;script type="text/javascript" src="&lt;?php echo $this-&gt;baseUrl;?&gt;/scriptslib/dojo-release-1.1.1/dojo/dojo.js"         djConfig="parseOnLoad: true"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;

dojo.require("dojo.parser");

&lt;/script&gt;

</span>
</code></pre>
<p>In this case, the baseUrl is a short cut variable defined in your controller class<br />
e.g. - $this-&gt;view-&gt;baseUrl = $this-&gt;_request-&gt;getBaseUrl();   //gets the root of your application</p>
<p>6. Add some sample form information to index.phml</p>
<pre class="programlisting"> <code>
<span style="color: #000000;">
&lt;div id="status_message"&gt;&lt;!-- ajax messages go here--&gt;&lt;/div&gt;

&lt;form id="ajax_form"&gt;

&lt;input type="text" name="test_input" value="12345" /&gt;

&lt;input id="submit_button" type="submit"

value="submit"

onclick="formPost('&lt;?php echo $this-&gt;baseUrl ?&gt;/midstride/ajaxcall',"ajax_form","ajax_loader","submit_button") /&gt;

&lt;div id="ajax_loader" class="ajax_loader" style="display:none;"  /&gt;

&lt;/form&gt;

</span>
</code></pre>
<p>This form will call the javascript function &#8220;formPost&#8221; with the id of the ajax loader which is currently hidden.  The next step is to define the javascript function which will do the ajax call.</p>
<p>7. Code a reusable javascript ajax function</p>
<pre class="programlisting"> <code>
<span style="color: #000000;">
function formPost(destinationUrl, formId, loaderId, submitId)

{

var useAjaxLoader= true;

var hideSubmitAction = true;

if (loaderId===undefined) {     useAjaxLoader = false; }

if (submitId===undefined) {     hideSubmitAction  = false; }

var postParams = { url: destinationUrl,

load: function(data) {

dojo.eval(data);

//hide ajax loader

if (useAjaxLoader)    { dojo.byId(loaderId).style.display = "none";}

if (hideSubmitAction) { dojo.byId(submitId).style.display = "";} },

error: function(data) { console.debug("An error occurred: ", data); },

form: formId,

timeout: 4000,

headers: { "X-Requested-With": "XMLHttpRequest" }

};

//show ajax loader

if (hideSubmitAction) {dojo.byId(submitId).style.display = "none";}

if (useAjaxLoader)    {dojo.byId(loaderId).style.display = "";} //block

dojo.xhrPost(postParams);

}

</span>
</code></pre>
<p>There&#8217;s a lot going on in this code but it&#8217;s not that complex.  In short:</p>
<ul>
<li>destinationUrl = the HTTP address you want to call (a controller action method).</li>
<li>formId = the id of the form that is making the call.</li>
<li>loaderId = the id of the ajax loader (optional)</li>
<li>submitId = the id of the submit button (optional)</li>
</ul>
<p>The loaderId and submitId are used to show a loading icon and hide the submit button.  This provides the nice ajax feedback and makes sure the user doesn&#8217;t click twice.</p>
<p>The destinationUrl is the same address as in the GET or POST URL.  We need to pass the formId so that the parameters can be passed.  I&#8217;ll explain at the end other ways of passing parameters.</p>
<p>8.  Create some sample php code in the controller class &#8220;MidstrideController.php&#8221;</p>
<pre class="programlisting"> <code>
<span style="color: #000000;">
[in MidstrideController.php]

public function ajaxcallAction()

//only handle ajax calls

if ($this-&gt;_request-&gt;isXmlHttpRequest())

{

//don't render the page - no view script is needed{

$this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();

//json is the intermediate language to pass messages between the server and client

$jsonData = "";  //initialize to nothing
//get the parameter as normal

$testValue = $this-&gt;_request-&gt;getParam("test_value");

//prepare a fancy highlight response back

$jsonData =  "var highlight = dojo.animateProperty(

{

node: 'status_message',duration: 500,

properties: {

color:         { start: 'white', end: 'black' },

backgroundColor:{ start: '#fffecc', end: '#ffffff' }

}

});highlight.play();"

$this-&gt;_response-&gt;appendBody($jsonData);

}

}

</span>
</code></pre>
<p>This action method listens for the ajax called made by the javascript function.  It only deals with <strong>XmlHttpRequests (AJAX)</strong> and then sets the controller to not render anything.  The no rendering option means you don&#8217;t need to create a view (phtml) script.  Next, you just handle the form data as you would normally and prepare a JSON response to send back.  In this case, I&#8217;ve prepared a dojo animation to make a nice highlight on a status box.  In practice, you may not want to include any javascript in your controller class, as this is technically UI logic that could be in the ajax (JS) layer.  I prefer including dojo javascript because I don&#8217;t like writing javascript :).</p>
<p>The last call <strong>$this-&gt;_response-&gt;appendBody($jsonData)</strong> returns a javascript string which is evaluated in your javascript function by <strong>dojo.eval(data)</strong>.</p>
<h3>You&#8217;re done</h3>
<p>That&#8217;s it!  You now have a simple way of making ajax calls and keeping your main logic in the controller layer, where it should be.   If you wanted to  pass more parameters to the controller class, you would have to modify the formPost() function to have this:</p>
<blockquote><p>contentParams =  { &#8220;paramOne&#8221;:&#8221;1&#8243;,&#8221;paramTwo&#8221;:&#8221;2  };</p></blockquote>
<p>and then pass this to the var post params like:</p>
<blockquote><p>var postParams { content:contentParams, &#8230;other parameters}</p></blockquote>
<p>This can be useful when you have hidden values or other non traditional form inputs to pass in.</p>
<h3>Pros</h3>
<p>-8 steps to a reusable ajax layer.<br />
-You can easily customize the ajax post effects with dojo&#8217;s large animation library.<br />
-A very customizable and flexible framework for any project.</p>
<h3>Cons</h3>
<p>-Technical level:  It can take a while to learn the MVC and Dojo library.</p>
<h3>Conclusion</h3>
<p>That wraps up my first article on AJAX and the Zend Framework.  Future upcoming AJAX articles will discuss how to integrate Zend in scenarios where you want a real progress bar, modal popups, and captcha services.  Please let me know if you have any comments or questions.</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" onmouseover="a2a_show_dropdown(this)" onmouseout="a2a_onMouseOut_delay()" href="http://www.addtoany.com/share_save?sitename=Midstride%20Solutions&amp;siteurl=http%3A%2F%2Fblog.midstride.com%2F&amp;linkname=Integrating%20AJAX%2FDojo%20into%20the%20Zend%20MVC%20in%208%20steps.&amp;linkurl=http%3A%2F%2Fblog.midstride.com%2F2008%2F08%2F26%2Fintegrating-ajaxdojo-into-the-zend-mvc-in-8-steps%2F"><img src="http://blog.midstride.com/wp-content/plugins/add-to-any/share_save_120_16.gif" width="120" height="16" alt="Share/Save/Bookmark"/></a>
    <script type="text/javascript">
		a2a_linkname="Integrating AJAX/Dojo into the Zend MVC in 8 steps.";
		a2a_linkurl="http://blog.midstride.com/2008/08/26/integrating-ajaxdojo-into-the-zend-mvc-in-8-steps/";
						    </script>
    <script type="text/javascript" src="http://static.addtoany.com/menu/page.js"></script>

	</p>]]></content:encoded>
			<wfw:commentRss>http://blog.midstride.com/2008/08/26/integrating-ajaxdojo-into-the-zend-mvc-in-8-steps/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
