<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    
    <title>Blog</title>
    <link>http://johndwells.com/index.php/blog/index/</link>
    <description></description>
    <dc:language>en</dc:language>
    <dc:creator>webmaster@johndwells.com</dc:creator>
    <dc:rights>Copyright 2010</dc:rights>
    <dc:date>2010-02-07T17:51:13+00:00</dc:date>
    <admin:generatorAgent rdf:resource="http://expressionengine.com/" />
    

    <item>
      <title>Pedantic As Fuck: Coding Guidelines</title>
      <link>http://johndwells.com/site/pedantic-as-fuck-coding-guidelines/</link>
      <guid>http://johndwells.com/site/pedantic-as-fuck-coding-guidelines/#When:17:51:13Z</guid>
      <description>Folder Structure:

	To support EE integration, all template assets (css, images, scripts etc) should be nested within an encompassing &amp;ldquo;style&amp;rdquo; folder; then subfolders are used to separate asset type:

/style/
        /css
        /images
        /scripts
        /flash


	Image Filename Prefixes:

	To help organize a cluttered image directory, I use 6 different prefixes to group files into their usage. These should cover 99% of any possible scenario. The only trick is to know when one prefix should be chosen in lieu of another. These are therefore arranged in a &amp;ldquo;cascade&amp;rdquo;:

	
		sprite_* &#45; any sprite graphics
	
		btn_* &#45; any button graphics (e.g. submit buttons, etc)
	
		icon_* &#45; any icon graphics (e.g. arrows, bullets, etc)
	
		logo_* &#45; any logos
	
		bg_* &#45; a graphic that is used as a background image via CSS
	
		img_* &#45; any images included via the &amp;lt;img /&amp;gt; tag


	The cascade works by starting at the top, see if the image qualifies for that prefix; if so, use it, if not, continue to next prefix.

	If multiple prefixes match, use them in sequence of the cascade. The exception is &amp;ldquo;bg_*&amp;rdquo;, which is implied if any higher prefix is used.

	Example:
	
	A submit button &amp;ldquo;&amp;lt;button&amp;gt;Submit Me!&amp;lt;/button&amp;gt;&amp;rdquo; uses a background image to override the browser&amp;rsquo;s default look. The design calls for 3 states: off, on, and active. The image should be created as a sprite to reduce server requests. Following the cascade, it qualifies as a sprite and button. Therefore it&amp;rsquo;s name might be: sprite_btn_submit.gif

	Miscellaneous

	Main/global stylesheet should be named &amp;ldquo;screen.css&amp;rdquo;

	Filenames are all lowercase, words separated by underscores only (e.g. logo_google.png).

	Filenames should be verbose for clarity

	You are encouraged to separate CSS as much as is necessary to keep things organised

	You are encouraged to go comment&#45;crazy in CSS &amp;amp; JS

	Use HTML comments to indicate the closing of any structural divs (or spans were helpful):
	&#45; If the div has an ID value, use &amp;ldquo;&amp;rdquo;
	Example:



	
	.......



	&#45; If the div has a CLASS value, use &amp;ldquo;&amp;rdquo; Example:



	
	.......



	Use Google&amp;rsquo;s CDN for js libraries (e.g. jquery)

	Use most current jquery (1.4.1 as of this writing: http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js)

	When referencing asset files from within the HTML source, use absolute linking (e.g. &amp;ldquo;/style/css/screen.css&amp;rdquo;). Assets linked from within CSS can be relative (e.g. &amp;ldquo;../images/sprite_navigation.gif&amp;rdquo;).

	Preferred doctype: xhtml 1.0 transitional

	IE6/7, PNG support: Up to you!</description>
      <dc:subject></dc:subject>
      <dc:date>2010-02-07T17:51:13+00:00</dc:date>
    </item>

    <item>
      <title>Should I pay for that beta?</title>
      <link>http://johndwells.com/site/should-i-pay-for-that-beta/</link>
      <guid>http://johndwells.com/site/should-i-pay-for-that-beta/#When:02:53:58Z</guid>
      <description>Last week I fired off a tweet about Solspace, a web development company that contributes heavily to the space of ExpressionEngine add&#45;ons.&amp;nbsp; I challenged their business model of charging a fee for their &#8220;beta&#8221; modules, which quickly drew a response from their lead developer.&amp;nbsp; We exchanged a few tweets, but it left me frustrated; Twitter isn&#8217;t always the best medium for a debate, especially between two strangers. Or perhaps I&#8217;m simply not articulate enough to say everything in 140 characters. Either way, I thought I&#8217;d delve into the idea a bit more here.
Last week I fired off a tweet about Solspace, a web development company that contributes heavily to the space of ExpressionEngine add&#45;ons.&amp;nbsp; I challenged their business model of charging a fee for their &#8220;beta&#8221; modules, which quickly drew a response from their lead developer.&amp;nbsp; We exchanged a few tweets, but it left me frustrated; Twitter isn&#8217;t always the best medium for a debate, especially between two strangers. Or perhaps I&#8217;m simply not articulate enough to say everything in 140 characters.

Let&#8217;s see what kicked this off.&amp;nbsp; On Nov 24th I twittered:

@johndwells EE was released this way. EE 2.0&#8217;s release is effectively a public beta. And any non&#45;beta update is free, so I see no problem.

My first reply was from another EE community member, who said she&#8217;s known the two behind Solspace for years, has used one of their stable pay&#45;for modules for years, and contended it was still a good deal.

Then Solspace&#8217;s lead developer Paul Burdick got back to me, aligning their business model directly with ExpressionEngine&#8217;s, by saying that EE&#8217;s 2.0 release, which is pay&#45;for (and includes a price increase) is effectively a beta release.&amp;nbsp; Two days later, serendipitously for Paul&#8217;s arguement, EllisLab announced they were renaming the December 1 release of EE 2.0, from &#8220;release candidate&#8221; to &#8220;public beta&#8221;. Ah.

But let me just clarify my case: for first&#45;time customers, paying for a beta release is off&#45;putting.&amp;nbsp; I will be purchasing 1 freelancer&#8217;s license of EE 2.0 for myself, because I know and trust EE and I also want to be a part of the community that makes EE 2.0 great; but I won&#8217;t be purchasing it for my clients.&amp;nbsp; I&#8217;m willing to invest $99 in EE 2.0 because I know and trust EE 1.6.8.

With Solspace, let&#8217;s consider their recently released Super Search 1.0.0 Beta module.&amp;nbsp; EE has long needed a better solution to search.&amp;nbsp; Right now I&#8217;m quoting for a job that heavily relies on an intelligent search engine</description>
      <dc:subject>Business, ExpressionEngine</dc:subject>
      <dc:date>2010-01-07T02:53:58+00:00</dc:date>
    </item>

    <item>
      <title>Tips to improve your clients&#8217; experience using ExpressionEngine</title>
      <link>http://johndwells.com/site/tips-to-improve-your-clients-experience-using-expressionengine/</link>
      <guid>http://johndwells.com/site/tips-to-improve-your-clients-experience-using-expressionengine/#When:15:26:14Z</guid>
      <description>One of ExpressionEngine&#8217;s strengths is it&#8217;s malleable, usable UI. Out of the box, EE gives you a significant amount of flexibility to customise the admin control panel to suit your needs. In this post, I&#8217;ll mention a few tips from the EE community on how to take that UI customisation one step further.
When I switched from Wordpress to ExpressionEngine, there were a many reasons behind the move.&amp;nbsp; Custom fields, absurdly simple templating system, .</description>
      <dc:subject>ExpressionEngine</dc:subject>
      <dc:date>2009-12-28T15:26:14+00:00</dc:date>
    </item>

    <item>
      <title>Code Every Day: Day 1</title>
      <link>http://johndwells.com/site/code-every-day-day-1/</link>
      <guid>http://johndwells.com/site/code-every-day-day-1/#When:15:24:28Z</guid>
      <description>&amp;nbsp;function activate_extension&#40;&#41;&#123;	global $DB;&amp;nbsp;	$hooks = array&#40;			&#39;lg_addon_update_register_source&#39; =&amp;gt; &#39;lg_addon_update_register_source&#39;			,&#39;lg_addon_update_register_addon&#39; =&amp;gt; &#39;lg_addon_update_register_addon&#39;			,&#39;edit_entries_additional_tableheader&#39; =&amp;gt; &#39;edit_entries_additional_tableheader&#39;			,&#39;edit_entries_modify_tableheader&#39; =&amp;gt; &#39;edit_entries_modify_tableheader&#39;			,&#39;edit_entries_additional_celldata&#39; =&amp;gt; &#39;edit_entries_additional_celldata&#39;			,&#39;edit_entries_modify_tablerow&#39; =&amp;gt; &#39;edit_entries_modify_tablerow&#39;    &#41;;&amp;nbsp;	foreach &#40;$hooks as $hook =&amp;gt; $method&#41;	&#123;		$sql&#91;&#93; = $DB&#45;&amp;gt;insert_string&#40;$this&#45;&amp;gt;db_prefix . &#39;_extensions&#39;,					array&#40;                    &#39;extension_id&#39; =&amp;gt; &#39;&#39;,                    &#39;class&#39;   =&amp;gt; Seesaw_extension_class,                    &#39;method&#39;  =&amp;gt; $method,                    &#39;hook&#39;     =&amp;gt;$hook,                    &#39;settings&#39;  =&amp;gt; &#39;&#39;,                    &#39;priority&#39;  =&amp;gt; 10,                    &#39;version&#39; =&amp;gt; $this&#45;&amp;gt;version,                    &#39;enabled&#39; =&amp;gt; &amp;quot;y&amp;quot;                    &#41;                  &#41;;	&#125;&amp;nbsp;	// run all sql queries	foreach &#40;$sql as $query&#41;	&#123;		$DB&#45;&amp;gt;query&#40;$query&#41;;	&#125;&amp;nbsp;	// Set up &amp;amp; save default settings	$default_settings = $this&#45;&amp;gt;_merge_settings&#40;array&#40;&#41;&#41;;	$this&#45;&amp;gt;_save_settings&#40;$default_settings&#41;;&amp;nbsp;	return TRUE;&#125;&amp;nbsp;

This is the code example.</description>
      <dc:subject>Programming</dc:subject>
      <dc:date>2009-12-28T15:24:28+00:00</dc:date>
    </item>

    <item>
      <title>Preload Images with jQuery</title>
      <link>http://johndwells.com/site/preload-images-with-jquery/</link>
      <guid>http://johndwells.com/site/preload-images-with-jquery/#When:16:07:57Z</guid>
      <description>These days, high bandwidth images are becoming the norm for a lot of our site designs. And while it may sound trivial, we don&#39;t really care for the empty white space that our visitors stare at while these massive images silently load. But with a sprinkle of jQuery and an animated gif, we can let the visitor know the design is still being built.  Let&#39;s look at how.There are obviously a gazillion ways to skin this cat, so let&#39;s keep it simple and define a basuc scenario:

I have a very large image (400kb) set as the background of my site. I&#39;d like to show a &quot;loading&quot; animated graphic that displays until the large image is available, and then show the large graphic instead.

What We Need


The latest and greatest jQuery (I like to link to a Google&#45;hosted copy)
An animated gif (either create your own or generate one with Ajaxload
A big ol&#39; image 


$&#40;document&#41;.ready&#40;function&#40;&#41; &#123;	var imgSrc = &amp;quot;{image}&amp;quot;;	var img = new Image&#40;&#41;;	$&#40;img&#41;		// once the image has loaded, execute this code		.load&#40;function &#40;&#41; &#123;			$&#40;&#39;body&#39;&#41;.css&#40;&amp;quot;background&#45;image&amp;quot;, &amp;quot;url(&amp;quot; + $&#40;this&#41;.attr&#40;&#39;src&#39;&#41; + &amp;quot;)&amp;quot;&#41;.css&#40;&amp;quot;background&#45;position&amp;quot;, &amp;quot;top left&amp;quot;&#41;;		&#125;&#41;		// if there was an error loading the image, react accordingly		.error&#40;function &#40;&#41; &#123;			alert&#40;&#39;error&#39;&#41;;		&#125;&#41;&amp;nbsp;		// *finally*, set the src attribute of the new image to our image		.attr&#40;&#39;src&#39;, imgSrc&#41;;&#125;&#41;;</description>
      <dc:subject></dc:subject>
      <dc:date>2009-11-04T16:07:57+00:00</dc:date>
    </item>

    <item>
      <title>120,000 New Blogs Created Worldwide Each Day *</title>
      <link>http://johndwells.com/site/120000-new-blogs-created-worldwide-each-day/</link>
      <guid>http://johndwells.com/site/120000-new-blogs-created-worldwide-each-day/#When:19:17:54Z</guid>
      <description>Yet another &amp;quot;Hello, World&amp;quot; blog post.&amp;nbsp; It&#39;s a bit like a tree falling in a forest; it&#39;s only doing it to hear itself.

	The past 48 hours have been a flurry of creative activity.&amp;nbsp; For months, possibly even years, I&#39;ve been pining and aching to revive my personal/professional website.&amp;nbsp; I&#39;ve enlisted friends to help.&amp;nbsp; I&#39;ve created a brief.&amp;nbsp; I&#39;ve launched a number of holding pages in between. And then two nights ago, struck violently with inspiration, I toiled from sundown to sunup, playing and tweaking refreshing, until I had myself a new site.

	On the surface, it may actually appear that little&#39;s changed; the homepage still amounts to a holding page.&amp;nbsp; And it is by no means finished, and that&#39;s the point; it should be a platform for experimentation, playful attempts, and some technical leaps of faith.

	I&#39;m excited to be on the web again.</description>
      <dc:subject></dc:subject>
      <dc:date>2009-10-15T19:17:54+00:00</dc:date>
    </item>

    
    </channel>
</rss>