<?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>Jack McDade &#187; ExpressionEngine</title>
	<atom:link href="http://jackmcdade.com/category/expressionengine/feed/" rel="self" type="application/rss+xml" />
	<link>http://jackmcdade.com</link>
	<description>Designer, Coder &#38; Strategerizer</description>
	<lastBuildDate>Thu, 03 Jun 2010 13:50:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Quickie ExpressionEngine Plugin: URI Prettify</title>
		<link>http://jackmcdade.com/quickie-expressionengine-plugin-uri-prettify/</link>
		<comments>http://jackmcdade.com/quickie-expressionengine-plugin-uri-prettify/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 17:23:12 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://jackmcdade.com/?p=299</guid>
		<description><![CDATA[wrote a plugin to take any string, such as {segment_3}, and strip out the "_" or "-" delimiters and set words to title case. Parameters exist to uncapitalize words such as "and", "for" and "the". Give it a try, it just might come in handy in a pinch.]]></description>
			<content:encoded><![CDATA[<p>I really don&#8217;t have a good place to post this stuff right now as a blog is hardly ideal for storing ExpressionEngine addons, but until I get my real site up, this will have to do.</p>
<p>I whipped up this little plugin because I kept getting pinned into a corner when using Categories. For example, if an entry is part of more than 1 category, Blue and Red as subgroups of a Colors parent group for instance, and you&#8217;d like to list all entries in the Red subcategory&#8230; well good luck.</p>
<pre class="html">
{categories limit=<span class="htmlAttributeValue">&quot;1&quot;</span>}{category_name}{/categories}</pre>
<p>This will give you &#8220;Colors&#8221;. Not what we&#8217;re going for. </p>
<pre class="html">
{categories limit=<span class="htmlAttributeValue">&quot;2&quot;</span> backspace=<span class="htmlAttributeValue">&#039;2&#039;</span>}{category_name} -{/categories}
</pre>
<p>Will give you &#8220;<strong>Colors &#8211; Red</strong>&#8220;, which will work, unless one of your entries is also in Blue. Since the categories are listed alphabetically, you end up with &#8220;<strong>Colors &#8211; Blue</strong>&#8221; even though your url is http://site.com/section/category/red&#8221;.</p>
<p>Well, why not just take the URI segment and case modify it to say &#8220;Red&#8221;? Easy enough, as long as your URI segments match the name. So I wrote a plugin to take any string, such as <strong>{segment_3}</strong>, and strip out the &#8220;_&#8221; or &#8220;-&#8221; delimiters and set words to title case. Parameters exist to uncapitalize words such as &#8220;and&#8221;, &#8220;for&#8221; and &#8220;the&#8221;. Give it a try, it just might come in handy in a pinch. Full documentation is in the plugin&#8217;s &#8220;Usage&#8221; area, which you can see in the Plugin Manager of your ExpressionEngine Control Panel, but here&#8217;s a quick example usage:</p>
<pre class="html">
<span class="htmlOtherTag">&lt;title&gt;</span>{site_name} | {exp:uri_prettify uncap_keywords=<span class="htmlAttributeValue">&quot;yes&quot;</span> keywords=<span class="htmlAttributeValue">&quot;and|to|the|milk&quot;</span>}{segment_1}{if segment_2} | {segment_2}{/if} {/exp:uri_prettify}<span class="htmlOtherTag">&lt;/title&gt;</span>
</pre>
<p>Download <a href="http://jackmcdade.com/addons/pi.uri_prettify_100.zip" target="_blank" onClick="pageTracker._trackEvent('Download', 'Addon', 'URI Prettify');">URI Prettify v1.0</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jackmcdade.com/quickie-expressionengine-plugin-uri-prettify/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Interviewed on Repart-ee</title>
		<link>http://jackmcdade.com/interviewed-on-repart-ee/</link>
		<comments>http://jackmcdade.com/interviewed-on-repart-ee/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 18:49:07 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[ExpressionEngine]]></category>

		<guid isPermaLink="false">http://jackmcdade.com/?p=287</guid>
		<description><![CDATA[Just a quick update for those who follow my blog but aren't up on Twitter (this news is so 2 hours ago). My interview with Dan Diemer on Repart-ee, the ExpressionEngine podcast, finally went live this morning.]]></description>
			<content:encoded><![CDATA[<p>Just a quick update for those who follow my blog but aren&#8217;t up on <a href="http://twitter.com/jackmcdade" target="_blank">Twitter</a> (this news is so 2 hours ago). My <a title="Repart-ee" href="http://repart-ee.com/podcast/episode_2/" target="_blank">interview</a> with<a href="http://twitter.com/diemer" target="_blank"> Dan Diemer</a> on <a title="Repart-ee ExpressionEngine podcast" href="http://repart-ee.com" target="_blank">Repart-ee.com</a>, the ExpressionEngine podcast, finally went live this morning. You can&#8217;t blame Dan though, we all commit to a personal project only to realize&#8230; wow&#8230; i have a lot of <strong>other</strong> things to do too. So kudos to him for picking the ball back up! This interview was a few months ago so a few things I speak on have changed since:</p>
<ul>
<li>I have since worked out some solid solutions to WYSIWYG editing in ExpressionEngine. I&#8217;ve created JM jWYSIWYG, which will probably (and already) be phased out as it&#8217;s parent project is too slow in making it stable. I&#8217;ve also created <a href="http://expressionengine.com/forums/viewthread/125927/" target="_blank">JM WYM Editor</a>, which was mentioned in the podcast. It&#8217;s not quite right in FF Matrix yet, but will be shortly.</li>
<li>I&#8217;ve now teamed up with Travis Schmisser to further develop the <a href="http://buildwithstructure.com" target="_blank">Structure Module</a>. Very exciting. I can&#8217;t say much, but there are some definitely cool things in the near future.</li>
<li><a href="http://smoothfunction.com" target="_blank">Boomerang</a> still isn&#8217;t out. That&#8217;s the same. Patience is a virtue, so thanks for waiting!</li>
</ul>
<p>That&#8217;s about it for now. Check it out, laugh as I tell about my first EE site build, and laugh at me for laughing at my own jokes. Seriously, who do I think I am?</p>
]]></content:encoded>
			<wfw:commentRss>http://jackmcdade.com/interviewed-on-repart-ee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dealing with WYSIWYGs &#8211; Taming TinyMCE</title>
		<link>http://jackmcdade.com/dealing-with-wysiwygs-taming-tinymce/</link>
		<comments>http://jackmcdade.com/dealing-with-wysiwygs-taming-tinymce/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 04:06:55 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[TinyMCE]]></category>
		<category><![CDATA[wysiwyg]]></category>

		<guid isPermaLink="false">http://jackmcdade.com/?p=223</guid>
		<description><![CDATA[There are 2 main problems with the default install of TinyMCE. The first: it's ugly, bloated and unintuitive. The second: the code that might come out of it when clients take control. Let's get to work:]]></description>
			<content:encoded><![CDATA[<h2><em>&#8220;I hate most WYSIWYG editors. Why can&#8217;t they all be more like WordPress&#8217;s?&#8221;</em></h2>
<p>I&#8217;ve heard this, or something similar, many times. I&#8217;ve both thought it myself and said it aloud. It shouldn&#8217;t be hard, right? While designing and developing ExpressionEngine websites, i try to avoid implementing them at all costs. However, I&#8217;ve eventually had to spend enough time taming them that maybe we can be friends. Or at least not enemies. Oh and newsflash. WordPress uses TinyMCE. They also have over 650 lines of javascript customizing it, but hey, nothing is keeping you from making your own tweaks.</p>
<p>There are two big players on the WYSIWYG scene. FCKeditor and TinyMCE. I&#8217;ll be focusing in on the later in this article. If anyone else has insights on FCKeditor, please post them in the comments. There are plenty other small ones, including jWYSIWYG (which <a href="http://expressionengine.com/forums/viewthread/114787/" target="_blank">i ported to ExpressionEngine</a>, but i digress&#8230; it has it&#8217;s own issues). Also worth noting, there are two main ways of implementing TinyMCE in ExpressionEngine. <a href="http://leevigraham.com/cms-customisation/expressionengine/lg-tinymce/" target="_blank">Leevi Graham&#8217;s Extension</a>, and the <a href="http://expressionengine.com/downloads/details/tinymce/" target="_blank">1st party extension</a>.</p>
<h2>The Problem</h2>
<p>There are 2 main problems with the default install of TinyMCE. The first: it&#8217;s ugly, bloated and unintuitive. The second: the code that might come out of it when clients take control. Let&#8217;s get to work:</p>
<p>The first step is customizing which buttons and features (including plugins) are on loaded. How this is done can depend on where the javascript is loaded (the tinyMCE.init() function), but the method is the same regardless. Parameters can be added inside the function which control what&#8217;s being loaded. I&#8217;ll show you what i use myself and then I can walk through what&#8217;s going on:</p>
<h2>Where We&#8217;re Going:</h2>
<div id="attachment_251" class="wp-caption alignnone" style="width: 310px"><a href="http://jackmcdade.com/wp-content/uploads/2009/06/clean_mce.jpg" rel="shadowbox[post-223];player=img;"><img class="size-medium wp-image-251" title="clean_mce" src="http://jackmcdade.com/wp-content/uploads/2009/06/clean_mce-300x130.jpg" alt="clean_mce" width="300" height="130" /></a><p class="wp-caption-text">Clean TinyMCE</p></div>
<pre class="html">mode : &quot;textareas&quot;,
theme : &quot;advanced&quot;,
skin  : &quot;thebigreason&quot;,
plugins : &quot;fullscreen&quot;,
theme_advanced_toolbar_location : &quot;top&quot;,
theme_advanced_toolbar_align : &quot;left&quot;,
theme_advanced_buttons1 : &quot;formatselect,fontselect,fontsizeselect,separator,bold,italic,underline,separator,justifyleft,justifycenter,justifyright,bullist,numlist,separator,link,unlink,image,separator,code,separator,undo,redo,fullscreen&quot;,
theme_advanced_buttons2 : &quot;&quot;,
theme_advanced_buttons3 : &quot;&quot;</pre>
<h2>Customizing Appearance and Theme: Parameters</h2>
<ul>
<li><strong>mode: </strong>This tells TinyMCE where to apply itself. If set to &#8220;textareas&#8221;&#8230; i think you get the idea. If you set it to &#8220;exact&#8221; you can target specific ids with the additional parameter -&gt; elements: &#8220;first_id, second_id&#8221;</li>
<li><strong>theme:</strong> If you want to get custom, set this to &#8220;advanced&#8221;. It&#8217;s as easy as that. There&#8217;s a &#8220;simple&#8221;, but you lose a lot of functionality.</li>
<li><strong>skin:</strong> Skins can be be created or downloaded by others that have done the same. They usually consist of a few css files, some images, and a bit of javascript. They&#8217;ll go in the /tiny_mce/themes/advanced/skins/ directory. I really like <a title="TheBigReason TinyMCE Skin" href="http://thebigreason.com/blog/2008/09/29/thebigreason-tinymce-skin" target="_blank">TheBigReason&#8217;s skin</a> &#8212; it&#8217;s clean and easy, utlizing the <a title="famfamfam silk icon set" href="http://www.famfamfam.com/lab/icons/silk/" target="_blank">famfamfam silk icon set</a>. Check it out</li>
<li><strong>plugins:</strong> There are number of cool functions to throw in here, from spellcheck and emoticons, to print and preview. <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Control_reference">Take a look at the whole list of plugins</a>.</li>
<li><strong>theme_advanced_toolbar_location:</strong> Position the toolbar at the top of the textarea. Self explanitory.</li>
<li><strong>theme_advanced_toolbar_align:</strong> Left or right. Pick left. It&#8217;s better.</li>
<li><strong>theme_advanced_buttons1/2/3:</strong> The advanced theme, by default, has three rows of buttons. I myself prefer only one row, so I put all the buttons i want in the buttons1 parameter and leave 2 &amp; 3 empty to prevent the defaults from sneaking back in. <a title="TinyMCE buttons" href="http://wiki.moxiecode.com/index.php/TinyMCE:Control_reference" target="_blank">See the full list of TinyMCE buttons</a>. can be found here. Just separate them by commas and use &#8220;separator&#8221; if you want to break the icons up. Feel free to drop in my list and see if that works for you.</li>
</ul>
<h2>Cleaning Up The Rendered Code</h2>
<p>There are a few parameters here that can help you get more for less:</p>
<ul>
<li><strong>fix_list_elements : true </strong>&#8211; This option enables you to specify that list elements UL/OL is to be converted to valid XHTML. This option is disabled by default.</li>
<li><strong>f</strong><strong>orced_root_block : false</strong> &#8212; This keeps block level elements, such as &lt;strong&gt; from being wrapped with &lt;p&gt; tags, if you need to prevent that.</li>
<li><strong>invalid_elements : &#8220;b,i,span&#8221;</strong> &#8212; Set any html elements you want to prevent being written. Not a bad idea at all. Conversely, there is a &#8220;valid_elements&#8221; parameter. <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Configuration/valid_elements" target="_blank">Look at the defaults</a> to see if you need to squash anything</li>
<li><strong>convert_fonts_to_spans : false</strong> &#8212; if you allow the user to set fonts, i would recommend this one, which prevents the depreciated font tag: &lt;font size=&#8221;3&#8243; face=&#8221;Comic Sans MS&#8221;&gt;. USE THIS.</li>
</ul>
<p>There are plenty&#8211;too many in fact&#8211;other parameters, but hopefully this will get you going in the right direction. <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Configuration" target="_blank">Check out the full list if need be.</a></p>
<p>You can also customize the visual appearance of the redered in-editor code via the content.css file. You can find it here: tiny_mce/themes/advanced/skins/&lt;your skin name&gt;/content.css. Not a bad way to have your clients see a rough guess of what they&#8217;ll see on the site.</p>
<p>I plan on playing with creating my own theme(s) in the near future. We&#8217;ll see how that goes. If you&#8217;re ambitious, <a href="http://http://wiki.moxiecode.com/index.php/TinyMCE:Creating_Theme" target="_blank">check out the documentation</a> on that whole bag of apples.</p>
<p>Let me know if there is anything you&#8217;re trying to do in TinyMCE and maybe I can help you, and others, out. Hope this helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://jackmcdade.com/dealing-with-wysiwygs-taming-tinymce/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Optimizing ExpressionEngine Sites for Minimum Load Times [Part 1]</title>
		<link>http://jackmcdade.com/optimizing-expressionengine-sites-for-minimum-load-times-part-1/</link>
		<comments>http://jackmcdade.com/optimizing-expressionengine-sites-for-minimum-load-times-part-1/#comments</comments>
		<pubDate>Tue, 05 May 2009 03:49:30 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[speed]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://jackmcdade.com/?p=203</guid>
		<description><![CDATA[Load Optimization is a lot of little things added together for the greater good. When combined, page weight can be cut in half, or even more, with no change in functionality. Start with the lowest hanging fruit and move up to the more complex and more gritty as needed.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to focus on <a title="ExpressionEngine" href="http://expressionengine.com" target="_blank">ExpressionEngine</a> sites here, but most of these techniques can really be applied to nearly any website. While writing this i realized i should really break it into two parts. This first part will be most of the low-hanging fruit on into some mid-range optimization, while in part two i&#8217;ll get into more complex query caching, expires headings, content delivery networks, and Entity Tags (Etags).</p>
<p>Load Optimization is a lot of little things added together for the greater good. When combined, page weight can be cut in half, or even more, with no change in functionality. Start with the lowest hanging fruit and move up to the more complex and more gritty as needed. I&#8217;ve found that 2 or 3 &#8220;out-of-the-norm&#8221; techniques will get you 80% of the way to a superfast loading site. Standard 80/20 rule.</p>
<h3>I&#8217;ll break the modifications down into 3 categories:</h3>
<ol>
<li>Requests</li>
<li>Sizes</li>
<li>Queries</li>
</ol>
<p>Before I get into the gritty details, I&#8217;d first recommend a tool to benchmark and compare performance as you work through these tips. My favorite tool is <a title="YSlow" href="http://developer.yahoo.com/yslow/" target="_blank">YSlow</a>, a Firebug Addon for Firefox. It breaks your site down into a number of elements and grades you on a set of (mildly) arbitrary benchmarks. Great place to start. Compare your progress as you move forward. Find what gives you the best boost and try to replicate those changes on every site.</p>
<h2><strong>1. Requests</strong></h2>
<p>The more files you request (HTTP Requests), the slower your site load. In addition, the ORDER in which you request them and WHEN you request them can play a factor as well</p>
<ul>
<li><strong>Combine as many javascript functions/libraries/plugins as you can in a single include.</strong> I&#8217;m a huge offender in this category, sometimes with 8 to 15 javascript includes. Sites have to load these 1 at a time, in sequence. Try and keep it to 5 or 6 at max. Less is more.</li>
<li>If you can&#8217;t combine javascript, <strong>try loading them right before your closing &lt;/body&gt; tag</strong>. If they&#8217;re not needed for onLoad effects, at least your visitors won&#8217;t have to wait for the visuals</li>
<li><strong>CSS Sprites. </strong>Background images are a load-speed culprit . If possible, sprite (a technique where you combine a number of elements into one image and position them as needed) as many elements as you can. It takes a little while but it&#8217;s worth it. Check out YouTube&#8217;s <a title="Master Sprite" href="http://s.ytimg.com/yt/img/master-vfl93996.png" rel="shadowbox[post-203];player=img;" target="_blank">master sprite</a>. THAT&#8217;S optmization. There are many tutorials online for this technique, just Google &#8220;CSS Sprite&#8221; or &#8220;How to CSS Sprite.&#8221; You&#8217;ll survive.</li>
<li>I know a lot of people like to separate their CSS (style.css, layout.css, text.css, reset.css, ie6.css, ie7.css, etc&#8230;.) for organization&#8217;s purpose, but every request adds just a little bit to your load time. I<strong>t&#8217;s best to simply roll it into 1 to 2 main files</strong> (i like keeping a reset.css and 960.css combined for those applicable when using the grid, plus my main css sheet).</li>
<li><strong>Try using Google hosted <a title="Google Hosted jQuery" href="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js" target="_blank">jQuery</a>/<a title="Google Hosted MooTools" href="http://ajax.googleapis.com/ajax/libs/mootools/1.2.2/mootools-yui-compressed.js" target="_blank">MooTools</a>/<a title="Google Hosted Prototype" href="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" target="_blank">Prototype</a> includes. </strong>Chances are people will have these cached from visiting another site and will save a request. At least it will save you bandwidth</li>
<li><strong>Caching. </strong>There are a number of different levels you can approach here. First and most straightforward is ExpressionEngine template caching. Once your site is out of development, turn caching on for all major templates that don&#8217;t change at a moment&#8217;s notice. My general rule of thumb is <strong>5 minutes for major templates</strong> (home page, first level landing pages, nav includes, etc) and <strong>60 minutes for less used templates</strong> (contact form, sitemap, etc). Secondly, if you have templates that just change too often, maybe you have {exp:weblog:entries} tags that don&#8217;t change often, such as an intro paragraph to a news section or something similar. <strong>You can actually cache your tags.</strong> Example:
<pre class="html">cache=<span class="htmlAttributeValue">&quot;yes&quot;</span> refresh=<span class="htmlAttributeValue">&quot;30&quot;</span></pre>
</li>
</ul>
<h2><strong>2. Sizes</strong></h2>
<p>I&#8217;m going to assume you&#8217;ve already optimized all your images. You wouldn&#8217;t be here if you were looking for that tip. (Save-for-web @ 100% <img src='http://jackmcdade.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<ul>
<li><strong>Minimify your javascript.</strong> This gets rid of any extra markup, whitespace, etc&#8230; to save precious kb. Check out the YUI Compressor (http://developer.yahoo.com/yui/compressor/) to get those bad boys down in size.</li>
<li><em><strong>Gzip your javascript files.</strong></em> This gives me awesome results everytime. Once i tried this i never went back. It can change depending on your server, but as long as you&#8217;re on a LAMP stack, this should get you close. You&#8217;ll need to have mod_deflate loaded in PHP for starters. Behond that, it&#8217;s really a simple .htaccess update. I prefer to set it up to gzip everything and exclude the files i don&#8217;t want compressed (images, zip and rar files, gz, etc&#8230;). This usually cuts my js file sizes in HALF. The following .htaccess info should be able to be dropped right in your site.</li>
</ul>
<pre class="xml"># Gzip Our Scripts
######################################################
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \
\.(?:exe|t?gz|zip|b<span class="xmlNumber">z2|</span>sit|rar)$ \
no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
# Just in case some noob is using an old browser...
######################################################
BrowserMatch ^Mozilla<span class="xmlNumber">/4 </span>gzip-only-text/html
BrowserMatch ^Mozilla<span class="xmlNumber">/4\</span><span class="xmlNumber">.0[</span><span class="xmlNumber">678</span>] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html</pre>
<h2><strong>3. Queries</strong></h2>
<p>Hopefully you&#8217;re doing this already, but disabling any parameter you don&#8217;t need in a {exp:weblog:entries} tag will help to speed up the query process and thus your site.</p>
<ul>
<li> <strong>My standard disable string</strong> is disable=&#8221;member_data|categories|trackbacks|pagination&#8221;.<br />
I usually leave category_fields and (of course) custom_fields out of there.</li>
</ul>
<p>I try to do all these tweaks on all my sites. So far, i&#8217;ve cut average load times from 4 seconds to under 1.3 seconds across the board. Simply by using these techniques. Give it a shot.</p>
<p>That&#8217;s it for part one! If anyting doesn&#8217;t work or you&#8217;d like to add your tips, feel free to comment and i&#8217;ll add your tips in (and give you credit of course). I hope it helps you.</p>
]]></content:encoded>
			<wfw:commentRss>http://jackmcdade.com/optimizing-expressionengine-sites-for-minimum-load-times-part-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Back on the Trail Again &#8211; Work and Play</title>
		<link>http://jackmcdade.com/back-on-the-trail-again/</link>
		<comments>http://jackmcdade.com/back-on-the-trail-again/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 04:09:43 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://jackmcdade.com/?p=195</guid>
		<description><![CDATA[So my vacation has been over for two weeks now. I've settled back into the fact that I'll be working hard but have decided to try to play harder. It's spring time, fishing and golf have arrived, and the weather is amazing. Saratoga Springs in spring is a great place to be.]]></description>
			<content:encoded><![CDATA[<p>So my vacation has been over for two weeks now. I&#8217;ve settled back into the fact that I&#8217;ll be working hard but have decided to try to play harder. It&#8217;s spring time, fishing and golf have arrived, and the weather is amazing. Saratoga Springs in spring is a great place to be.</p>
<p>So now that i&#8217;m back, i&#8217;m laying down the trail on where I&#8217;m headed. I&#8217;ve launched a couple of sites at the ol&#8217; day job (<a href="http://fingerpaintmarketing.com" target="_blank">FingerPaint Marketing</a>) since I&#8217;ve been back: <a href="http://radiantpools.com" target="_blank">Radiant Pools</a> and <a href="http://lemerygreisler.com" target="_blank">Lemery Greisler</a>, as well as a small freelance site that had been kicking around for a while: <a href="http://visualplanetllc.com" target="_blank">Visual Planet</a>. All <a href="http://expressionengine.com">ExpressionEngine</a>. Some really great projects on the horizon including a revamp of our corporate site as well as some high-traffic medical and insurance sites. Good stuff.</p>
<p>Now for the main stuff. There&#8217;s a few great things coming down the pipe that may benefit more than just myself. I&#8217;ve joined forces with the guys from the <a href="http://buildguild.org" target="_blank">Build Guild</a> to officially start the New York Capital Region [Albany] Chapter of the Build Guild! This is pretty exciting as it&#8217;s a great way to get to know other web designers and developers in the area, network, swap tips and stories, and plain old have a good time with people who have like interests. The Albany Chapter will have the same focus as the original in Boston. So check out their site to see what&#8217;s in store. http://albany.buildguild.org will be coming soon.</p>
<p>Also I have some tricks up my sleeves with my ExpressionEngine work as well. I&#8217;ve been working on a quick site deploy framework and my partner in crime, Tom Jaeger, has been eyebrows deep in some custom addons as well. I know you&#8217;ve all been waiting to hear about Boomerang and Bullseye and whatnot, i promise&#8211; they will be released sooner rather than later! Keep an eye on <a href="http://smoothfunction.com" target="_blank">SmoothFunction.com</a> for more details.</p>
<p>And last but not least&#8230;</p>
<p>I&#8217;m gonna be a DAD! That&#8217;s right, my awesome and beautiful wife Jen (who is a web dev too, by the way) is carrying a little McBaby right now. She&#8217;s at around 15 weeks or so at this point, so another month or month and a half and we might know if it&#8217;s a little-Jack or a mini-Jen. <img src='http://jackmcdade.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>That&#8217;s all for now!</p>
]]></content:encoded>
			<wfw:commentRss>http://jackmcdade.com/back-on-the-trail-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExpressionEngine Patterns &amp; Best Practices: The Genesis</title>
		<link>http://jackmcdade.com/expressionengine-patterns-best-practices-the-genesis/</link>
		<comments>http://jackmcdade.com/expressionengine-patterns-best-practices-the-genesis/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 00:30:36 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[patterns]]></category>

		<guid isPermaLink="false">http://jackmcdade.com/?p=92</guid>
		<description><![CDATA[ExpressionEngine gives you flexibility. Nearly unlimited flexibility. This is an awesome thing, except when it bites you. Sometimes there is something to be said for a more rigid CMS/Blogging engine, such as WordPress. This shortcoming could be alleviated/improved upon with some development patterns and best practices.]]></description>
			<content:encoded><![CDATA[<p>ExpressionEngine gives you flexibility. Nearly <em>unlimited</em> flexibility. This is an awesome thing, except when it bites you in oversight. Sometimes there is something to be said for a more rigid CMS/Blogging engine, such as WordPress, as it takes care of a lot of little details without you having to think about them. Archiving by month, full entry-view details, pagination, thumbnails, galleries and so on. Drop a template in WP, mod out some graphics and you&#8217;ve gotten somewhere pretty quickly.</p>
<p>This shortcoming could be alleviated/improved upon with some development patterns and best practices. This is a pretty large undertaking and as such could be approached a number of ways. Maybe I&#8217;ll let you all decide. Here are the options as I see it:</p>
<ol>
<li>Community involvement. I could put up a site where contributions could be made to the pattern list. We could also incorporate an addon directory if there was enough interest. Or, if someone is already working on such a project, i could lend a hand.</li>
<li>A long-lasting series by yours-truly, each post focusing on a specific area, i.e. News, Searches, Categories, Members, etc&#8230;</li>
<li>A big ass bundle i could slave over and release all in one shot for a very small fee. Like a dunkin&#8217; donuts coffee style fee. Or maybe i&#8217;ll just be a super nice guy and hope for a donation here or there.</li>
</ol>
<p>What do you all think? I&#8217;m open to however demand dictates! One thing is for sure, <a href="http://twitter.com/stinhambo/status/1242902645" target="_blank">StinHambo</a> thinks it&#8217;s giving away too much of our knowledge&#8230; Your input will help me decide. Leave some comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://jackmcdade.com/expressionengine-patterns-best-practices-the-genesis/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>My Standard ExpressionEngine Addons</title>
		<link>http://jackmcdade.com/my-standard-expressionengine-addons/</link>
		<comments>http://jackmcdade.com/my-standard-expressionengine-addons/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 06:05:41 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[addons]]></category>
		<category><![CDATA[brandon kelly]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[leevi graham]]></category>
		<category><![CDATA[modules]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[recommendations]]></category>
		<category><![CDATA[solspace]]></category>

		<guid isPermaLink="false">http://jackmcdade.com/?p=48</guid>
		<description><![CDATA[Everyone has their own list of ExpressionEngine addons they roll, or at least they should. Call them building blocks, or foundations. Or whatever. Here's what I deploy with nearly every single site and why:]]></description>
			<content:encoded><![CDATA[<p>Everyone has their own list of ExpressionEngine addons they roll with, or at least they should. Call them building blocks, foundations, what have you. In fact, once you nail this list down, take a look at Ryan Irelan&#8217;s post on setting up a <a href="http://eeinsider.com/articles/automatically-rebuilding-an-ee-sandbox/" target="_blank">quick deploy script</a> &#8212; trust me. It&#8217;s worth it.</p>
<p>Here&#8217;s what I deploy with nearly every single site and why:</p>
<h3><span style="color: #000000;"><a title="Structure" href="http://www.ngenworks.com/software/ee/structure/" target="_blank">Structure</a></span></h3>
<p><strong>Type:</strong> Module/Extension Combo<br />
<strong>Price:</strong> $65<br />
<strong>Creator:</strong> ME! + Travis Schmisser</p>
<p><a href="http://buildwithstructure.com"><img class="size-thumbnail thumbnail wp-image-79 alignright" title="screen-main" src="http://jackmcdade.com/wp-content/uploads/2009/02/screen-main-150x150.png" alt="screen-main" width="150" height="150" /></a></p>
<p>I love <a href="http://buildwithstructure.com">Structure</a>. I love love love it. I can build out big sites with fully dynamic navigation <em>really</em> fast. And on top of that, the interface is super client friendly. Drag and drop page re-order, dynamic and static content all in one hierarchical view&#8230; Very slick.</p>
<p>It basically replaces the Pages module with loads of more options by taking control of the URL structure, letting you build out static sites almost like a sitemap. One main weblog and a default template for static pages with the ability to change that out on a per page level. This lets you have a handful of the templates control the whole site.</p>
<p>Edit: Since this article, i have tag teamed with Travis Schmeisser to take this module commercial and keep it moving. Huzzah!</p>
<h3><a title="LG Better Meta" href="http://leevigraham.com/cms-customisation/expressionengine/lg-better-meta/" target="_blank">LG Better Meta</a></h3>
<p><strong>Type:</strong> Extension<br />
<strong>Price:</strong> $39.95<br />
<strong>Creator:</strong> Leevi Graham</p>
<p><a href="http://jackmcdade.com/wp-content/uploads/2009/02/lg-better-meta-17-cp-tab.png" rel="shadowbox[post-48];player=img;"><img class="size-thumbnail thumbnail wp-image-83 alignright" title="lg-better-meta-17-cp-tab" src="http://jackmcdade.com/wp-content/uploads/2009/02/lg-better-meta-17-cp-tab-150x150.png" alt="LG Better Meta" width="150" height="150" /></a></p>
<p>This bad larry from <a title="Leevi Graham" href="http://leevigraham.com" target="_blank">Leevi Graham</a> kicks some serious EE butt. Is SEO important to you? (If your answer is no, we should probably talk) Then you need this extension. It lets you manage all the meta content on each and every page, using the latest in DC Meta type standards. Oh and it generates your XML sitemap. Twofer! You can control a number aspects of the sitemap, including frequency, robot controls, etc. If you haven&#8217;t tried it yet, <a title="LG Better Meta" href="http://leevigraham.com/cms-customisation/expressionengine/lg-better-meta/" target="_blank">do it now</a>. He just needs to make the sitemap portion of this one compatible with Structure and I&#8217;ll be a really happy guy.</p>
<h3><a href="http://leevigraham.com/cms-customisation/expressionengine/lg-add-sitename/" target="_blank">LG Site Name</a></h3>
<p><strong>Type:</strong> Extension<br />
<strong>Price:</strong> Free<br />
<strong>Creator:</strong> Leevi Graham</p>
<p><a href="http://jackmcdade.com/wp-content/uploads/2009/02/lg-add-site-name-with-image.png" rel="shadowbox[post-48];player=img;"><img class="alignright thumbnail size-thumbnail wp-image-85" title="lg-add-site-name-with-image" src="http://jackmcdade.com/wp-content/uploads/2009/02/lg-add-site-name-with-image-150x150.png" alt="lg-add-site-name-with-image" width="150" height="150" /></a>Ever want to customize the header in your control panel? Maybe put the client (or your for that matter) logo in there? Done. This extension is a breeze to work with, letting you insert your own HTML and/or CSS into the header. And it&#8217;s Multi Site Manager compatible too. We&#8217;re currently using this for a multi-country site in MSM to let the user know which country they&#8217;re editing. We&#8217;ve got flags up in there and everything. Pretty cool. Also from Leevi Graham.</p>
<p><a href="http://leevigraham.com/cms-customisation/expressionengine/lg-add-sitename/" target="_blank">Get it now</a>.</p>
<h3><a href="http://utilitees.silenz.org/index.php/addons/software/search-marker/" target="_blank">Search Marker</a></h3>
<p><strong>Type: </strong>Plugin<br />
<strong>Price: </strong>Free<br />
<strong>Creator:</strong> utilitEEs</p>
<p><a href="http://jackmcdade.com/wp-content/uploads/2009/02/search_marker.png" rel="shadowbox[post-48];player=img;"><img class="size-thumbnail thumbnail wp-image-84 alignright" title="search_marker" src="http://jackmcdade.com/wp-content/uploads/2009/02/search_marker-150x150.png" alt="search_marker" width="150" height="50" /></a></p>
<p>This is <a href="http://utilitees.silenz.org/index.php/addons/software/search-marker/" target="_blank">little bugger</a> is super useful. It lets you highlight the search keyword in your results page. It just throws a tag around it and lets you style at will. It changed my life. Kind of.</p>
<h3><a href="http://utilitees.silenz.org/index.php/addons/software/trunchtml/" target="_blank">TruncHTML</a></h3>
<p><strong>Type:</strong> Plugin<br />
<strong>Price:</strong> Free<br />
<strong>Creator:</strong> utilitEEs</p>
<p>You may have used Word Wrap or even Word Wrap Plus, but they do lack one thing. They can cut your HTML off, breaking your site or at least your styling. This <a href="http://utilitees.silenz.org/index.php/addons/software/trunchtml/" target="_blank">free plugin </a>from utilitEEs takes care of that. Limit the number of words or characters and make sure those tags close, perfect for automatic excerpts or summaries.</p>
<h3><a href="http://www.solspace.com/software/detail/freeform/" target="_blank">FreeForm</a></h3>
<p><strong>Type:</strong> Module<br />
<strong>Price:</strong> Free<br />
<strong>Creator:</strong> Solspace</p>
<p>Contact forms. Resume submissions. Surveys. Just about any type of form you can think of, <a href="http://www.solspace.com/software/detail/freeform/" target="_blank">this module</a> nails it. Just a simple tag pair very similar to {exp:weblog:entries}, you put in the input fields, it takes care of the rest. It emails the contents of the submissions to whoever you want, saves everything in a db and takes very little time to set up. The info can even be pulled back dynamically in your templates if you need to. I&#8217;ve used it to personalize a thank you page and serve up a pdf based off a drop-down selection. In no time. The one downside there is that the entry id ends up in the URL structure.</p>
<p>There are talks of a Pro version coming up with even more features, so I&#8217;m excited about that. I hope it includes customized data exports. The standard tab delimited export usually isn&#8217;t enough when working with corporate IT departments and their bizarre data parsing requirements&#8230;</p>
<h3><a href="http://leevigraham.com/cms-customisation/expressionengine/lg-add-cp-tabs/" target="_blank">LG Add CP Tabs</a></h3>
<p><strong>Type:</strong> Extension<br />
<strong>Price:</strong> Free<br />
<strong>Creator:</strong> Leevi Graham</p>
<p>If you&#8217;re handing off a site to a client who will be adding a number of admins or members with control panel access, <a href="http://leevigraham.com/cms-customisation/expressionengine/lg-add-cp-tabs/" target="_blank">this one</a> is a must. I seriously don&#8217;t know why this function isn&#8217;t built it. It lets you set the default tabs and links for a given member group which will be applied every time you add a new member. So if you&#8217;ve been teaching clients how to set up the needed tabs&#8230; you&#8217;ve been missing out. And wasting time.</p>
<h3><a href="http://brandon-kelly.com/apps/editor/" target="_blank">Editor</a></h3>
<p><strong>Type:</strong> Extension<br />
<strong>Price:</strong> Free<br />
<strong>Creator:</strong> Brandon Kelly</p>
<p>Ever see Ryan Irelan&#8217;s screencast on setting up a control panel for client access? Well this replicates the &#8220;Edit Page&#8221; button on the site, with some extra flair. For everyone else, <a href="http://brandon-kelly.com/apps/editor/">this</a> adds an Edit icon next to your content on the front end of your site while you&#8217;re logged in. One click -&gt; right into the edit page. Piece of cake. Done and done.</p>
<p>You can even hack the css in the extension to customize the position and style. Note: it uses an icon with a low opacity, so sometimes it&#8217;s tough to see on a light colored site. A quick tweak and you&#8217;re back in business.</p>
<h3><a href="http://leevigraham.com/cms-customisation/expressionengine/lg-addon-updater/" target="_blank">LG Addon Updater</a></h3>
<p><strong>Type:</strong> Extension<br />
<strong>Price:</strong> Free<br />
<strong>Creator:</strong> Leevi Graham</p>
<p><a href="http://leevigraham.com/cms-customisation/expressionengine/lg-addon-updater/" target="_blank">This one</a> is a gimme if you&#8217;re running a number of addons. It&#8217;s becoming the defacto method for notifying users of an available update, as well it should be. It&#8217;s simple and straightforward and just plain works. Throw this puppy in each and every time.</p>
<p>For what it&#8217;s worth there are a many, many more awesome addons so I&#8217;ll be featuring some of those in the future. These are the ones i pretty much can&#8217;t build without, but addons such as <a href="http://brandon-kelly.com/apps/playa" target="_blank">Playa</a>, <a href="http://leevigraham.com/cms-customisation/expressionengine/lg-data-matrix/" target="_blank">Data Matrix</a>, and the others may come in handy as well.</p>
<p>So there you have it it. My secrets. What do you use?</p>
]]></content:encoded>
			<wfw:commentRss>http://jackmcdade.com/my-standard-expressionengine-addons/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>My Thoughts on ExpressionEngine 2.0</title>
		<link>http://jackmcdade.com/my-thoughts-on-expressionengine-20/</link>
		<comments>http://jackmcdade.com/my-thoughts-on-expressionengine-20/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 22:00:45 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[ExpressionEngine]]></category>

		<guid isPermaLink="false">http://jackmcdade.com/?p=22</guid>
		<description><![CDATA[ExpressionEngine 2.0 is coming soon, I can feel it! With the latest post it seems there are putting the finishing touches on. I hope the module they're completely re-working is Pages.]]></description>
			<content:encoded><![CDATA[<p>ExpressionEngine 2.0 is coming soon, I can feel it! With the <a href="http://expressionengine.com/blog/entry/2.0_progress_1.5_left" target="_blank">latest post</a> it seems there are putting the finishing touches on. I hope the module they&#8217;re completely re-working is Pages. I think it&#8217;s a fantastic solution for static content &#8212; but right now it&#8217;s VERY limited. If it could do multi-level navigation&#8230;well let&#8217;s just say I&#8217;d be the happiest guy in the world. Right now I can&#8217;t seem to get a standard down for it. I&#8217;ve tried <a href="http://www.ngenworks.com/software/ee/structure/">Structure</a> &#8212; not a bad module but has it&#8217;s limitations (every single entry is controlled by Structure in one giant nav), <a href="http://docs.markhuot.com/ee/plugins/pages_nested_menu/">Pages Nested Menu Plugin</a> &#8211; not bad either but a little client unfriendly and also has its limitations (similar).</p>
<p>I&#8217;ve considered going to the categories technique but that presents its own set of issues and challenges. <a href="http://fingerpaintmarketing.com">We&#8217;ve</a> considered developing our own module for this very thing but I&#8217;m holding out for EE 2.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://jackmcdade.com/my-thoughts-on-expressionengine-20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In the Beginning I Wrote this Post</title>
		<link>http://jackmcdade.com/in-the-beginning-i-wrote-this-post/</link>
		<comments>http://jackmcdade.com/in-the-beginning-i-wrote-this-post/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 04:23:46 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[ExpressionEngine]]></category>

		<guid isPermaLink="false">http://jackmcdade.com/?p=3</guid>
		<description><![CDATA[If you want to call this a blog you can, but my intentions aren't the same as all bloggers. I don't plan on regurgitating lists, links and resources from the "big" sites.]]></description>
			<content:encoded><![CDATA[<p>If you want to call this a blog you can, but my intentions aren&#8217;t the same as all bloggers. I don&#8217;t plan on regurgitating lists, links and resources from the &#8220;big&#8221; sites. Those guys are promoted enough by their size and their followers. Every time there&#8217;s a decent web resource, my RSS feeds light up with everyone spitting it back out. I&#8217;m not shooting for the SEO bump. I love <a title="Smashing Magazine" href="http://smashingmagazine.com" target="_blank">Smashing Magazine</a>, <a title="BittBox" href="http://bittbox.com">BittBox</a><a>, </a><a title="PSD Tuts" href="http://psdtuts.com">PSD Tuts</a> and the rest of those guys. If you need what they have to offer (as I do), by all means, head on over! Follow their feeds. It&#8217;s worthy!</p>
<p>I have something different planned. What might that be? I&#8217;m unsure. I plan to just share my knowledge. Anything unique I feel I have personally to offer. I suppose it&#8217;s possible that may be a link or two, but you won&#8217;t see &#8220;The Top 97 Web Designer Resources You&#8217;ve Never Seen!&#8221; &#8212; my subtitile: &#8220;and You&#8217;ll Never Use.&#8221; I know <a title="ExpressionEngine" href="http://expressionengine.com">ExpressionEngine</a>. Web and Interface Design. XHTML/CSS. PHP/<a title="CodeIgniter" href="http://codeigniter.com">CodeIgniter</a>, <a title="Analytics" href="http://google.com/analytics">Analytics</a> and measurements. Strategy. Those are my things. Sure it may be a wide range but hey, most of you do even more.</p>
<p>I&#8217;m here for questions, I&#8217;m here to chat, and hell &#8212; hit me up on Xbox Live, I&#8217;ll even go a few rounds in whatever you want (handle: Whitepatch&#8230;haven&#8217;t forked over the $$ to change my old nickname). You&#8217;ll find me regularly in <a title="Ryan Irelan's EEchat" href="http://eescreencasts.campfirenow.com/">Ryan Irelan&#8217;s EEchat</a> on Wednesday nights. I&#8217;m on the <a title="ExpressionEngine Forums" href="http://expressionengine.com/forums">ExpressionEngine Forums</a> almost every day. I twit. Or is it tweet? I never had the time to figure that one out. I end up spending it trying to make insane deadlines, which either make you look like a hero or a failure. Gotta love win/lose situations!</p>
]]></content:encoded>
			<wfw:commentRss>http://jackmcdade.com/in-the-beginning-i-wrote-this-post/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
