<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>bybjorn.com | Bjørn Børresen - freelance web developer</title>
	
	<link>http://www.bybjorn.com</link>
	<description>bybjorn.com &gt;&gt; Bjørn Børresen - freelance web developer</description>
	<lastBuildDate>Tue, 19 Mar 2013 18:49:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/bjornblog" /><feedburner:info uri="bjornblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>How to debug REST/JSON services</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/K_nG7St21J4/</link>
		<comments>http://www.bybjorn.com/762/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 18:28:56 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[webservice]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=762</guid>
		<description><![CDATA[I recently had to write a webservice in PHP that were to be used by iPhone/Android apps to post data and images to. With standard HTTP POSTS I&#8217;ve usually just created a quick dummy html to post data to the server to test, but this time I had to do some research on how to [...]]]></description>
				<content:encoded><![CDATA[<p>I recently had to write a webservice in PHP that were to be used by iPhone/Android apps to post data and images to. With standard HTTP POSTS I&#8217;ve usually just created a quick dummy html to post data to the server to test, but this time I had to do <a href="https://twitter.com/#!/o0o0o" title="read: ask Frode">some research</a> on how to quickly test the services while developing&#8230; Just writing it down here so I don&#8217;t forget <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<h4>cURL to the rescue</h4>

<p>So, let&#8217;s say I have a service that requires a session_id, title and comment_text. This can be called from the command line with cURL like this:</p>

<p><code>
curl -X POST -d '{"session_id":"2399024390","title":"This is my title","comment_text":"Some text"}' http://example.com/api/method
</code></p>

<p>You&#8217;ll get the response on the command line right there so it makes it quick to debug stuff while developing.</p>

<h4>What about posting files?</h4>

<p>I had a challenge where one of the services were to accept a base64_encoded image in the JSON post, so the simple curl example above wouldn&#8217;t suffice. My friend Frode had the idea of using PHP on the command line to save the JSON request array to a file and then posting that request using cURL afterwards. That did the trick!</p>

<p>So, to create the JSON array to POST to the server I ran this PHP code:</p>

<p><code>
php -r 'file_put_contents("json.txt", json_encode(array("session_id" => "3d6e4871170d4c1c2d91a18264904587b2c8ee0d","image_caption" => "This is an image","sender_email" => "blabla@gmail.com","sender" => "My nick", "image_base64" => base64_encode(file_get_contents("gmail.png")))));'
</code></p>

<p>Notice the &#8220;image_base64&#8243; key in the JSON array there. The server expects to receive a base64 encoded binary image (this is how I got it from the apps that were interacting with the webservice). So that code would read <em>gmail.png</em> which was located in the same folder, base64 encode it and add it to the JSON array.</p>

<p>With a complete JSON array all that remained was the actual POST:
<pre><code>
curl -X POST -d @json.txt http://example.com/gallery/api/image/post
</code></pre></p>

<p>And the server returned <em>{&#8220;status&#8221;:&#8221;ok&#8221;}</em> and all was well!</p>

<p>There are <strong>probably better ways and some awesome tools</strong> for doing this out there so please hit me with those in the comments <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=K_nG7St21J4:CRAqDUf6rZ0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=K_nG7St21J4:CRAqDUf6rZ0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=K_nG7St21J4:CRAqDUf6rZ0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/K_nG7St21J4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/762/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/762/</feedburner:origLink></item>
		<item>
		<title>Minimal HTML5 iPad Offline Cache Test</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/zejQT8OFxJY/</link>
		<comments>http://www.bybjorn.com/723/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 13:39:16 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=723</guid>
		<description><![CDATA[I just pushed a HTML5 template called &#8220;Minimal HTML5 iPad Offline Cache Test&#8221; to github: https://github.com/bjornbjorn/minimal_html5_offline_test Basically it&#8217;s a demo of a simple webpage that can be cached offline on an iPad. It also contains the meta tags required to make it work as a so-called &#8220;webclip&#8221;, that is you can add it to the [...]]]></description>
				<content:encoded><![CDATA[<p>I just pushed a HTML5 template called &#8220;Minimal HTML5 iPad Offline Cache Test&#8221; to github:</p>

<p><a href="https://github.com/bjornbjorn/minimal_html5_offline_test" title="Minimal HTML5 iPad Offline Cache Test">https://github.com/bjornbjorn/minimal_html5_offline_test</a></p>

<p>Basically it&#8217;s a demo of a simple webpage that can be cached offline on an iPad. It also contains the meta tags required to make it work as a so-called &#8220;webclip&#8221;, that is you can add it to the homescreen on an iPad and it will open in fullscreen without the URL bar at top and without any other safari elements.</p>

<p>You can try out a demo here:
<a href="http://dev.bybjorn.com/ipadoffline/">http://dev.bybjorn.com/ipadoffline/</a></p>

<h2>Testing the demo</h2>

<p>To test it on your iPad <a href="http://dev.bybjorn.com/ipadoffline/">navigate to the demo</a> and click the icon with the arrow to the left of the URL bar and then click &#8220;Add to Home Screen&#8221; in the menu:</p>

<p><img src="http://www.bybjorn.com/wp-content/uploads/2011/10/add_to_home_840.png" alt="" title="Add to home screen" width="840" height="630" class="aligncenter size-full wp-image-736" /></p>

<p>After that you should see the icon on your homescreen:</p>

<p><div id="attachment_740" class="wp-caption aligncenter" style="width: 342px"><img src="http://www.bybjorn.com/wp-content/uploads/2011/10/added_to_homescreen.png" alt="" title="" width="332" height="313" class="size-full wp-image-740" /><p class="wp-caption-text">The Minimal HTML5 Offline Cache Test added to homescreen</p></div>
<br/>
Click the icon and it should look like this:</p>

<p><img src="http://www.bybjorn.com/wp-content/uploads/2011/10/html5_tester_online_mode.png" alt="" title="online" width="840" height="630" class="aligncenter size-full wp-image-742" /></p>

<p>Sweet. No trace of Safari &#8211; it looks like a native app (or it could if we just styled it).</p>

<p>Now, let&#8217;s test it offline. <em>Set your iPad in &#8220;Airplane mode&#8221;</em> and click the icon again to test. You should see this:</p>

<p><img src="http://www.bybjorn.com/wp-content/uploads/2011/10/html5_tester_offline_mode.png" alt="" title="offline" width="840" height="630" class="aligncenter size-full wp-image-747" /></p>

<p>Don&#8217;t worry, that popup means that everything works. You&#8217;re in offline mode, so Safari is not able to cache anything. You&#8217;ll find the code for listening to these window.applicationCache errors in offlinetest.js .. you do not have to load that file if you do not want to.</p>

<p>If you&#8217;re not able to use the page linked above offline on your iPad the problem is most likely with your iPad.</p>

<h2>Troubleshooting &#8211; what if it does not work</h2>

<p>The template above should work, if it doesn&#8217;t work something is most likely wrong with either your iPad or your webserver (or your files..)</p>

<p>Here&#8217;s some quick troubleshooting pointers:</p>

<ul>
<li>If the <a href="http://dev.bybjorn.com/ipadoffline/">demo page</a> does not work for you, try upgrading your iPad software. I was running 4.2.2 and had problems getting offline caching to work but after upgrading to 4.3.5 everything worked perfectly.</li>
<li>If the demo works, but it does not work when you upload on your own server, it might be that the .htaccess does not work on your server so that the cache.manifest file isn&#8217;t getting sent to the browser with the <em>&#8220;text/manifest&#8221;</em> mime-type. Try out the <a href="http://manifest-validator.com">manifest validator</a>.</li>
</ul>

<p>Also, note this (<a href="http://diveintohtml5.org/offline.html">from &#8220;Dive Into HTML5&#8243;</a>):</p>

<blockquote>
  <p>The first is something you just read, but I bet it didn’t really sink in, so here it is again: if even a single resource listed in your cache manifest file fails to download properly, the entire process of caching your offline web application will fail. Your browser will fire the error event, but there is no indication of what the actual problem was.</p>
</blockquote>

<p>Download the files from github: <a href="https://github.com/bjornbjorn/minimal_html5_offline_test">https://github.com/bjornbjorn/minimal_html5_offline_test</a></p>

<p>Good luck! <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=zejQT8OFxJY:_aIOOY-VhBg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=zejQT8OFxJY:_aIOOY-VhBg:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=zejQT8OFxJY:_aIOOY-VhBg:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/zejQT8OFxJY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/723/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/723/</feedburner:origLink></item>
		<item>
		<title>Changes in this blog</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/3BO4lUCLMDg/</link>
		<comments>http://www.bybjorn.com/705/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 12:09:01 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[metadata]]></category>
		<category><![CDATA[meta]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=705</guid>
		<description><![CDATA[It&#8217;s probably about time to let my subscribers know that I&#8217;ve started blogging over at the AddonBakery Blog &#8211; so all posts which relate to my ExpressionEngine Addons will end up there (instead of here). If you have an interest in getting the latest news about SEO Lite, Simple Registration, et al. you should subscribe [...]]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s probably about time to let my subscribers know that I&#8217;ve started blogging over at the <a href="http://www.addonbakery.com/blog/" title="Inside The Bakery">AddonBakery Blog</a> &#8211; so all posts which relate to my <a href="http://www.addonbakery.com/expressionengine-addons.html" title="EE addons">ExpressionEngine Addons</a> will end up there (instead of here).</p>

<p>If you have an interest in getting the latest news about <a href="http://www.addonbakery.com/expressionengine-addons/seolite.html">SEO Lite</a>, <a href="http://www.addonbakery.com/expressionengine-addons/simple-registration.html">Simple Registration</a>, et al. you should <a href="http://feeds.feedburner.com/addonbakery">subscribe to this feed</a>.</p>

<p>This blog will be reserved for all non-addon specific ramblings. Who knows, I might also put up a portfolio here. I probably should, I am after all a freelance developer&#8230; I&#8217;ll do it when I get the time <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<p>Anyway, <a href="http://feeds.feedburner.com/addonbakery">subscribe here</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=3BO4lUCLMDg:hTnsfNyRUrE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=3BO4lUCLMDg:hTnsfNyRUrE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=3BO4lUCLMDg:hTnsfNyRUrE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/3BO4lUCLMDg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/705/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/705/</feedburner:origLink></item>
		<item>
		<title>Is Automattic pulling old tricks on EllisLab?</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/H91ZlQFLbz8/</link>
		<comments>http://www.bybjorn.com/635/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 22:15:12 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=635</guid>
		<description><![CDATA[For those who don&#8217;t quite understand the title; Automattic is the company behind the world&#8217;s favourite blogging engine1 &#8211; WordPress, and EllisLab are creators of fine products such as CodeIgniter &#8211; and, the commercial CMS ExpressionEngine. Now that you have the basics, the title will make sense later. MacDailyNews moves from EE to WP The [...]]]></description>
				<content:encoded><![CDATA[<p>For those who don&#8217;t quite understand the title; <a href="http://automattic.com/">Automattic</a> is the company behind the world&#8217;s favourite blogging engine<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> &#8211; WordPress, and <a href="http://www.ellislab.com">EllisLab</a> are creators of fine products such as <a href="http://www.codeigniter">CodeIgniter</a> &#8211; and, the commercial CMS <a href="http://bybjorn.com/ee2_the_most_flexible_cms_yet/">ExpressionEngine</a>. Now that you have the basics, the title will make sense later.</p>

<h3>MacDailyNews moves from EE to WP</h3>

<p><a href="http://publisherblog.automattic.com/2011/02/16/macdailynews-wpcom-vip/" title="migration from ee to wp">The latest blogpost</a> on the WordPress Publisher Blog tells the news of the high profile migration of <a href="http://macdailynews.com/">MacDailyNews</a> from <a href="http://bybjorn.com/ee2_the_most_flexible_cms_yet/">ExpressionEngine</a> to <a href="http://vip.wordpress.com/">WordPress VIP</a>:</p>

<div id="attachment_649" class="wp-caption aligncenter" style="width: 650px"><a href="http://www.bybjorn.com/wp-content/uploads/2011/02/macdailynews.png"><img src="http://www.bybjorn.com/wp-content/uploads/2011/02/macdailynews.png" alt="" title="macdailynews" width="640" height="501" class="size-full wp-image-649" /></a><p class="wp-caption-text">MacDailyNews migrates from EE to WP</p></div>

<p>&nbsp;</p>

<p>To quote <a href="http://publisherblog.automattic.com/2011/02/16/macdailynews-wpcom-vip/">the blogpost</a>:</p>

<blockquote>
  <p>&#8220;With an archive dating back to 2002 and over 750,000 comments, this is the largest Expression Engine<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> migration to date. MacDailyNews brings with them a very active community and an ever-burning desire to publish.&#8221;</p>
</blockquote>

<p>It made me think of a <strong>specific moment last friday</strong>. I was eating breakfast in a cabin <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=Galten,+Hovden,+Norge&amp;aq=0&amp;sll=59.85,8.066667&amp;sspn=0.048455,0.181789&amp;ie=UTF8&amp;ll=59.820575,8.537579&amp;spn=0.046341,0.181789&amp;t=h&amp;z=13">in the mountains</a> of Norway, listening to the radio &#8211; the breaking news being the <a href="http://www.google.com/search?q=nokia+%2B+microsoft">Nokia &amp; Microsoft partnership</a>, but &#8211; and isn&#8217;t technology beautiful &#8211; I was also reading this blogpost on my mobile:</p>

<p><a href="http://www.majordojo.com/2011/02/how-did-wordpress-win.php"><img src="http://www.bybjorn.com/wp-content/uploads/2011/02/wp.png" alt="" title="wp" width="649" height="164" class="aligncenter size-full wp-image-645" /></a></p>

<p>In it, Byrne Reese <em>the former Product Manager of Movable Type and TypePad at Six Apart</em> lays out specific reasons he thinks contributed to WordPress winning the &#8220;blog wars&#8221; over MovableType.</p>

<h3>Tactic: Migrate, then blog the hell out of it</h3>

<p>Here&#8217;s one of the <a href="http://www.majordojo.com/2011/02/how-did-wordpress-win.php">main reasons he lists</a>:</p>

<blockquote>
  <p>One thing rarely cited by the outside world, probably because it was not visible or apparent to anyone, was the systematic targeting of high profile brands to switch from using any competing platform to using WordPress. In fact, in the four years I was at Six Apart, if I had a dollar every time a significant and loyal TypePad and Movable Type customer confided in me that an employee of Automattic cold called them to encourage and entice them to switch to WordPress I would have quit a rich man. Automattic would extend whatever services it could, at no expense to the customer, getting them to switch. They would give away hosting services. They would freely dedicate engineers to the task of migrating customers&#8217; data from one system to another. They would do whatever it took to move people to WordPress.</p>
  
  <p><strong>And once a migration was complete they did the single most important thing: they blogged the hell out of it.</strong></p>
</blockquote>

<p><em>(emphasis mine)</em></p>

<p><a href="http://www.majordojo.com/2011/02/how-did-wordpress-win.php">Read the entire blogpost here</a>, it&#8217;s quite interesting (and well written).</p>

<p>So, it could seem that Automattic is pulling old tricks on EllisLab. However, a <a href="http://www.google.com/search?hl=no&amp;biw=1584&amp;bih=757&amp;q=site%3Apublisherblog.automattic.com+expressionengine">quick google</a> shows that there hasn&#8217;t been much mention of ExpressionEngine on the publisher blog until now. Also, it&#8217;s not the same situation as back in the days when MovableType and WordPress were equally popular.</p>

<p>Nonetheless &#8230;</p>

<h3>What do you think?</h3>

<ul>
<li>Is Automattic using the same tactics on EllisLab that they were using earlier on Six Apart?</li>
<li>Will we see more of these blogposts from Automattic as ExpressionEngine grows in popularity?</li>
<li>Or is ExpressionEngine simply too small for them to even bother?</li>
<li>Will ExpressionEngine <a href="http://www.google.com/trends?q=expressionengine%2C+movabletype&amp;ctab=0&amp;geo=all&amp;date=all&amp;sort=0">suffer the same &#8220;fate&#8221; as MovableType</a>? </li>
</ul>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>Ok, WordPress does more than blogs, I know.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:2">
<p>(sic) We all know that should be ExpressionEngine, no space in there.&#160;<a href="#fnref:2" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=H91ZlQFLbz8:jBHCU5tappE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=H91ZlQFLbz8:jBHCU5tappE:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=H91ZlQFLbz8:jBHCU5tappE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/H91ZlQFLbz8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/635/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/635/</feedburner:origLink></item>
		<item>
		<title>Basecamp Style Subdomains With ExpressionEngine</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/zKIv42BRgyQ/</link>
		<comments>http://www.bybjorn.com/598/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 16:32:48 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[ExpressionEngine]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=598</guid>
		<description><![CDATA[Today cityzenllc asked a question on Twitter about setting up EE w/subdomains. The &#8220;Basecamp Style Subdomains With CodeIgniter&#8221; over at NetTuts was tweeted and retweeted all over the place, or maybe just twice, but anyway &#8211; this is supereasy in EE, and can be done by adding just a couple of lines to index.php: What [...]]]></description>
				<content:encoded><![CDATA[<p>Today <a href="http://twitter.com/#!/cityzenllc" title="cityzenllc">cityzenllc</a> asked <a href="http://twitter.com/#!/cityzenllc/status/16577549404479488" title="">a question on Twitter</a> about setting up EE w/subdomains.</p>

<p>The <a href="http://net.tutsplus.com/tutorials/php/basecamp-style-subdomains-with-codeigniter/" title="">&#8220;Basecamp Style Subdomains With CodeIgniter&#8221;</a> over at NetTuts was tweeted and retweeted all over the place, or maybe just twice, but anyway &#8211; <em>this is supereasy in EE</em>, and can be done by adding just a couple of lines to index.php:</p>

<p><pre>
<pre class="brush: php; title: ; notranslate">
if($_SERVER['HTTP_HOST'] == 'login.example.com')
{
    $assign_to_config['site_url'] = 'http://login.example.com/';
    $req = strtolower(trim($_SERVER['REQUEST_URI'], '/'));
    if($req == '' || substr($req, 0, 9 ) == 'index.php')
    {
        $assign_to_config['template_group'] = 'login';
        $assign_to_config['template'] = 'index';
    }
}
</pre>
</pre></p>

<p>What the above snippet of code will do is check if the current URL the user is on is &#8216;login.example.com&#8217; &#8211; if it is it will change the &#8216;site_url&#8217; variable to override the default one (so that {path=&#8221;} etc will use that URL. Also it will make sure the &#8216;index&#8217; template in the template group called &#8216;login&#8217; is used (if the user is not on a subpage that is).</p>

<p>Of course you could add all kinds of magic here &#8211; having Apache accept all and every subdomain, fetching a specific template group and adding the subdomain to the global variables (<em>$assign_to_config['global_vars']</em>) .. for instance to implement a <strong>username.example.com</strong> solution. You could even throw some .htaccess in the mix if you really needed it <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

<p>How have you solved this with ExpressionEngine?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=zKIv42BRgyQ:VkWhIXiI1So:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=zKIv42BRgyQ:VkWhIXiI1So:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=zKIv42BRgyQ:VkWhIXiI1So:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/zKIv42BRgyQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/598/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/598/</feedburner:origLink></item>
		<item>
		<title>SEO Lite v1.1</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/5YaXTMjE54o/</link>
		<comments>http://www.bybjorn.com/521/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 15:14:05 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[seolite]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=521</guid>
		<description><![CDATA[I just pushed a new version of SEO Lite to github and it has some added goodies, among other things these parameters: Parameters url_title; retrieve by url_title (often found as a url segment) entry_id; retrieve by entry_id use_last_segment = &#8216;yes&#8217;; pure magic! (it will use the last segment, this is useful if you have the [...]]]></description>
				<content:encoded><![CDATA[<p>I just pushed a new version of <a href="/466/">SEO Lite</a> to github and it has some added goodies, among other things these parameters:</p>

<h3>Parameters</h3>

<ul>
<li>url_title; retrieve by url_title (often found as a url segment)</li>
<li>entry_id; retrieve by entry_id</li>
<li>use_last_segment = &#8216;yes&#8217;; pure magic! (it will use the last segment, this is useful if you have the same header all over the website and you sometimes need to use {segment_2} and sometimes {segment_3}</li>
<li>default_title &#8211; set the title tag directly (ie. do not get from content) &#8211; useful for static pages, main page, etc.</li>
<li>default_description &#8211; override the description &#8211; same as above</li>
<li>default_keywords &#8211; override the keywords &#8211; same as above</li>
<li>title_prefix &#8211; a string to prefix the title with (per request)</li>
<li>title_postfix &#8211; a string to postfix the title with (per request)</li>
<li>title_separator &#8211; this will be added after the title (and padded with space on both sides)</li>
</ul>

<h3>Some Usage Examples</h3>

<p>Let&#8217;s use this template:</p>

<p><pre>
<pre class="brush: xml; title: ; notranslate">
&lt;title&gt;{title}{site_name}&lt;/title&gt;
&lt;meta name='keywords' content='{meta_keywords}' /&gt;
&lt;meta name='description' content='{meta_description}' /&gt;
&lt;!-- generated by seo_lite --!&gt;
</pre>
</pre></p>

<p>yeah I know the {title} and {site_name} are pretty close there, but we&#8217;ll fix that with the new <em>title_separator</em> parameter <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<h4>Frontpage</h4>

<p>For the frontpage we just want the site name + the default keywords / description:</p>

<p><pre class="brush: xml; title: ; notranslate">
{exp:seo_lite}
</pre></p>

<p>Will produce this title:</p>

<p><pre class="brush: xml; title: ; notranslate">
&lt;title&gt;My Site Name&lt;/title&gt;
(... + default desc / keywords ...)
</pre></p>

<h4>Our 404 Page</h4>

<p><pre class="brush: xml; title: ; notranslate">
{exp:seo_lite default_title=&quot;404 - Not Found&quot; title_separator=&quot;|&quot;}
</pre></p>

<p>produces:</p>

<p><pre class="brush: xml; title: ; notranslate">
&lt;title&gt;404 - Not Found | My Site Name&lt;/title&gt;
(... + default desc / keywords ...)
</pre></p>

<h4>A FAQ Entry</h4>

<p><pre class="brush: xml; title: ; notranslate">
{exp:seo_lite entry_id=&quot;{entry_id}&quot; title_postfix=&quot;&amp;nbsp;| FAQ&quot; title_separator=&quot;|&quot;}
</pre></p>

<p>will produce this title for a specific faq entry:</p>

<p><pre class="brush: xml; title: ; notranslate">
&lt;title&gt;A Question | FAQ | My Site Name&lt;/title&gt;
</pre></p>

<p>note that the &amp;nbsp; is needed because EE will trim parameters for spaces.</p>

<h4>Using SEO Lite with the EllisLab Discussion Forum Module</h4>

<p>Edit the forum_global/html_header.html file and replace the title-tag there with:</p>

<p><pre class="brush: xml; title: ; notranslate">
{exp:seo_lite default_title=&quot;{page_title} | {forum_name}&quot; title_separator=&quot;|&quot;}
</pre></p>

<p>It will output:
<pre class="brush: xml; title: ; notranslate">
&lt;title&gt;The title of the current forum or thread here | Forum Title Here | My Site Name&lt;/title&gt;
</pre></p>

<p>Of coure you need to <a href="http://www.expressionengine.com/index.php?affiliate=bjorn&amp;page=/user_guide/modules/forum/other_features.html">run the forums through regular templates</a> for the above to work, but that&#8217;s something I&#8217;d always recommend doing, unless you enjoy pain.</p>

<h4>Implementing SEO Lite in the wiki</h4>

<p>Edit wiki_themes/<your_theme>/wiki_page.html and replace the title-tag there with:</p>

<p><pre class="brush: xml; title: ; notranslate">
{exp:seo_lite default_title=&quot;{title} | {wiki_name}&quot; title_separator=&quot;|&quot;}
</pre></p>

<p>It will output:</p>

<p><pre class="brush: xml; title: ; notranslate">&lt;title&gt;The title of the current wiki page | Wiki Name Here | My Site Name&lt;/title&gt;</pre></p>

<p>Of course for the wiki / forum pages you&#8217;ll just get the benefit of keeping it consistent and getting the default keywords / description in there, since there isn&#8217;t a way of adding entry-specific keywords/description for these entries (yet)..</p>

<h3>MSM Support</h3>

<p>I got a couple of comments about MSN support, and although it&#8217;s untested I think I&#8217;ve implemented support for it. The way it works is that you need an entry in exp_seolite_config for each site, so <em>when you switch to another site you need to visit the SEO Lite control panel and an entry will be added for that site</em>. Then you can start using SEO Lite on that additional site as well.</p>

<p>This way you can have different templates for each site etc.</p>

<h3>Suggestions?</h3>

<p>Let me know if you have suggestions to added functionality or something you&#8217;ve found quirky when implementing it on a site, etc.</p>

<h3>Download</h3>

<p><a href="http://github.com/bjornbjorn/SEO-Lite/zipball/master">Download the latest release here (zip)</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=5YaXTMjE54o:KqD_-t6GvRQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=5YaXTMjE54o:KqD_-t6GvRQ:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=5YaXTMjE54o:KqD_-t6GvRQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/5YaXTMjE54o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/521/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/521/</feedburner:origLink></item>
		<item>
		<title>SEO Lite – The one calorie SEO addon for ExpressionEngine 2.x</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/NquVzRm-Now/</link>
		<comments>http://www.bybjorn.com/466/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 11:07:41 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[devkit]]></category>
		<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[seolite]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=466</guid>
		<description><![CDATA[A while back I released DevKit for ExpressionEngine using the module &#8220;SEO Lite&#8221; as an example. Now this module is ready for download! Click here to download SEO Lite Full documentation: SEO Lite documentation A SEO module for ExpressionEngine &#8211; what does it do? Sure you could add custom fields for this kind of meta [...]]]></description>
				<content:encoded><![CDATA[<p>A while back I released <a href="http://www.bybjorn.com/344/">DevKit for ExpressionEngine</a> using the module &#8220;SEO Lite&#8221; as an example. Now this module is ready for download!</p>

<p><a href="http://wedoaddons.com/addon/seo-lite">Click here to download SEO Lite</a></p>

<p>Full documentation: <a href="http://wedoaddons.com/addon/seo-lite/documentation">SEO Lite documentation</a></p>

<h3>A SEO module for ExpressionEngine &#8211; what does it do?</h3>

<p>Sure you could add custom fields for this kind of meta data, but SEO Lite makes it cleaner and easier to use for the client.</p>

<p>SEO Lite is a lightweight addon for <a href="http://bybjorn.com/ee2_the_most_flexible_cms_yet/">ExpressionEngine</a> that adds SEO meta data for title, keywords and description for entries on your site, enabling them to rank better in the search engines. It uses a <em>template</em> which you can customize to your needs.</p>

<p><a href="http://www.bybjorn.com/wp-content/uploads/2010/07/seolite_settings.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/07/seolite_settings-267x300.jpg" alt="" title="SEO Lite settings" width="267" height="300" class="aligncenter size-medium wp-image-470" /></a></p>

<p>It will add a new tab to the publish entry page called &#8220;SEO Lite&#8221; where you specify title, keywords, and description for the entry.</p>

<p><a href="http://www.bybjorn.com/wp-content/uploads/2010/07/seolite_publish_tab.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/07/seolite_publish_tab-300x281.jpg" alt="" title="SEO Lite publish tab" width="300" height="281" class="aligncenter size-medium wp-image-473" /></a></p>

<p><strong>If you do not specify anything the original entry title will be used, together with the default values for keywords and description.</strong></p>

<h3>Why Lite?</h3>

<p>First, it&#8217;s very <em>lightweight</em> &#8211; you only use one tag to output the template, and this tag uses only <strong>one database query</strong> to fetch the template, entry title, default entry keywords/description or/and the specific keywords/descriptions for that entry.</p>

<p>So you add the power of SEO optimalization with only one query which should be a good tradeoff and perfect for high-traffic websites.</p>

<p>Second, it&#8217;s lite functionality-wise as well. No frills. If you want a more extensive module I recommend <a href="http://expressionengine-addons.com/nsm-better-meta">NSM Better Meta</a> which is a very good commercial alternative.</p>

<h3>The template</h3>

<p>The default meta data template looks like this:</p>

<p><pre>
<pre class="brush: xml; title: ; notranslate">
&lt;title&gt;{title} - {site_name}&lt;/title&gt;
&lt;meta name='keywords' content='{meta_keywords}' /&gt;
&lt;meta name='description' content='{meta_description}' /&gt;
&lt;!-- generated by seo_lite --!&gt;
</pre>
</pre></p>

<p>This can be edited in the SEO Lite Settings. The only thing that&#8217;s replaced by SEO Lite is {title}, {meta_keywords} and {meta_description} <em>and you can use any kind of global variables and EE conditionals in it which should make it pretty powerful</em>.</p>

<h3>The Tag</h3>

<p>Use this tag in your header template to output the template above:</p>

<p><pre>
<pre class="brush: xml; title: ; notranslate">
{exp:seo_lite url_title=&quot;{segment_3}&quot;}
</pre>
</pre></p>

<p>The url_title parameter uses {segment_3} to find the entry based on the current url. If you have the entry_id you may also use it like this:</p>

<p><pre>
<pre class="brush: xml; title: ; notranslate">
{exp:seo_lite entry_id=&quot;{entry_id}&quot;}
</pre>
</pre></p>

<h3>Installing the module in a WooTheme</h3>

<p>Here&#8217;s a video showing how to install the module and use it with any of the <a href="http://www.bybjorn.com/woo">WooThemes</a>:</p>

<p><object width="500" height="375"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13755854&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=13755854&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"></embed></object></p>

<p>Of course this process will be the almost identical on any site.</p>

<h3>ScribeSEO Support In The Works</h3>

<p>I&#8217;m currently implementing support for <a href="http://bit.ly/biwFpa">ScribeSEO</a>. To get an update when this is ready <a href="http://feeds.feedburner.com/bjornblog">subscribe to my RSS feed</a> or <a href="http://www.twitter.com/bjornbjorn">follow me on Twitter</a>.</p>

<h3>Download</h3>

<p><strong><a href="http://github.com/bjornbjorn/SEO-Lite/zipball/master">Download .zip</a></strong></p>

<p>Documentation, <strong>support</strong>, download etc. <a href="http://wedoaddons.com/addon/seo-lite">available over at WeDoAddons.com</a>.</p>

<p>Let me know what you think! <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=NquVzRm-Now:H9nZGdc8Css:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=NquVzRm-Now:H9nZGdc8Css:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=NquVzRm-Now:H9nZGdc8Css:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/NquVzRm-Now" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/466/feed/</wfw:commentRss>
		<slash:comments>66</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/466/</feedburner:origLink></item>
		<item>
		<title>Why the ExpressionEngine community is a better place to be for a single developer</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/3wU0TSFEnvo/</link>
		<comments>http://www.bybjorn.com/371/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 11:38:47 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[devkit]]></category>
		<category><![CDATA[entrepreneur]]></category>
		<category><![CDATA[money]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=371</guid>
		<description><![CDATA[There&#8217;s probably a lot of good reasons to go with WordPress, but if you&#8217;re a single developer ExpressionEngine might be worth considering. Please allow me to present (&#42;drum roll&#42;) &#8220;The Top 10 Reasons The EE Community Is A Better Place To Be For A Single Developer / Entrepreneur&#8221; 1. You Don&#8217;t Have To Worry About [...]]]></description>
				<content:encoded><![CDATA[<p>There&#8217;s probably a lot of good reasons to go with <a href="http://www.wordpress.org" title="WordPress">WordPress</a>, but if you&#8217;re a single developer <a href="http://bybjorn.com/ee2_the_most_flexible_cms_yet/">ExpressionEngine</a> might be worth considering. Please allow me to present (&#42;drum roll&#42;) <em>&#8220;The Top 10 Reasons The EE Community Is A Better Place To Be For A Single Developer / Entrepreneur&#8221;</em></p>

<h4>1. You Don&#8217;t Have To Worry About GPL Related Bullsh*t</h4>

<p>The GPL discussion is all the rave in the WP community these days. In fact, it has been for a good while and many of largest premium theme providers for WP has already GPL&#8217;d their themes &#8211; with one notable exception; Chris Pearson, the creator of <a href="http://bit.ly/9rlSAF">Thesis</a>, a very popular premium theme. Matt Mullenweg (of WordPress) has criticized this very openly, and it&#8217;s now speculated that <a href="http://mixergy.com/chris-pearson-matt-mullenweg/">the only way to solve this is in court</a>.</p>

<p>Anyway, to make my point here <a href="http://bybjorn.com/ee2_the_most_flexible_cms_yet/">ExpressionEngine</a> is as we know a commercial product. Which means that you can create commercial addons, commercial themes, commercial whatever &#8211; <em>without worrying about being infected by the GPL virus</em>.</p>

<p>An example; most of the people reading this blog has heard of <a href="http://www.bybjorn.com/woo">WooThemes</a>, one of the most successful theme providers for WP. Try to google &#8220;WooThemes&#8221; and you&#8217;ll most likely get this:</p>

<div id="attachment_383" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bybjorn.com/wp-content/uploads/2010/07/woothemesbundlewtf.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/07/woothemesbundlewtf-300x82.jpg" alt="" title="woothemesbundlewtf" width="300" height="82" class="size-medium wp-image-383" /></a><p class="wp-caption-text">WooThemes Google WTF</p></div>

<p>So someone is selling all their themes as a bundle for $10. And they&#8217;re doing it all legally! Because it&#8217;s GPL. It&#8217;s a scumbag move, sure &#8211; but it&#8217;s legal. (Sidenote; WooThemes continues to be a very profitable business because of excellent support which is basically what they&#8217;re selling &#8211; <em>and</em> because most people want to do the right thing I guess, which is buying the themes directly from them of course).</p>

<p><strong>This is not something you have to worry about as an ExpressionEngine developer.</strong></p>

<p>Note; you still have to <em>think about</em> licensing though, as the whole &#8220;Brandon-Kelly-Did-I-Really-Creative-Commons-That?&#8221;-<a href="http://eematrix.com/post/473369022/expressionengine-matrix-its-time-for-a-fork#comment-41748244">EEMatrix controversy</a> demonstrated.</p>

<h4>2. The Affiliate Program</h4>

<p>Being a commercial product ExpressionEngine has an <a href="http://www.expressionengine.com/index.php?affiliate=bjorn&amp;page=/affiliates">affiliate program</a>. You get the money deposited to your PayPal account each month with personal thanks and gratitude from the ExpressionEngine team.</p>

<p><em>This point is not to be underestimated.</em> An affiliate program means you can blog and talk about ExpressionEngine and make money from something you would normally do being a part of the community.</p>

<p>Are there a lot of affiliate programs for WordPress? Sure, popular addons like <a href="https://www.e-junkie.com/ecom/gb.php?cl=54585&amp;c=ib&amp;aff=13473">Gravity Forms</a>, most premium theme providers like <a href="http://www.bybjorn.com/woo">WooThemes</a> and <a href="http://bit.ly/9rlSAF">Thesis</a> have their affiliate programs <strong>but that&#8217;s not the same &#8211; the EE affiliate program is for the CMS itself</strong>; everyone working with ExpressionEngine needs to buy a license.</p>

<p>Demand for EE 2.0 is <a href="http://twitter.com/EllisLab/status/8338095568">through the roof</a> (so much so they dropped the free version, everyone was paying). And they might as well buy a license after reading one of <em>your</em> blogposts <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p><strong><a href="http://www.expressionengine.com/index.php?affiliate=bjorn&amp;page=/affiliates">Click here for more details about the EE affiliate program</a></strong></p>

<h4>3. There&#8217;s Money Here &#8211; People Are Used To Paying</h4>

<p>EE is the choice of professional designers etc. delivering websites to clients. I don&#8217;t know about you, but if an addon or <a href="http://www.woothemes.com/why-ee/">theme</a> can save me one hour, it&#8217;s definitively worth $60.</p>

<p>People using EE are comfortable with paying for services that save them money or time. As mentioned in the previous point EllisLab dropped the free EE Core version since no one was using it anyway. Most were paying customers.</p>

<p><strong>Some communities consist of people who expect everything to be free. The EE community doesn&#8217;t. And that&#8217;s good for a third party dev!</strong></p>

<h4>4. We Have An Addon Store Just Like Apple</h4>

<p><a href="http://www.devot-ee.com">Devot:ee</a> the ultimate addon directory for EE <a href="http://devot-ee.com/news/item/many-changes-at-devotee/">recently opened an addon store</a> enabling developers to sell addons directly on their site. Yeah, just like the AppStore!</p>

<p>Here&#8217;s a screenshot of a sales report <a href="http://devot-ee.com/news/item/sales-reports-are-now-live-for-expressionengine-add-on-developers/">courtesy of Ryan Masuga</a>:</p>

<p><a href="http://www.bybjorn.com/wp-content/uploads/2010/07/sample_sales.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/07/sample_sales.jpg" alt="" title="sample_sales" width="400" height="272" class="aligncenter size-full wp-image-396" /></a></p>

<p><strong>This means you can create commercial addons, have them listed on the &#8220;official&#8221; EE addon store and make money without worrying about setting up a webshop etc.</strong></p>

<h4>5. You Can Be Famous In Six Months</h4>

<p>The WordPress community is <em>huge</em>. I don&#8217;t know but there are probably hundreds of relatively known WP developers. The EE community &#8211; not so big. About 10 &#8211; 20 relatively known developers. If you create 3 addons you&#8217;ll be invited to speak at <a href="http://eeci2010.com/">EECI2011</a>, hehe. <strong>In six months you can make a dent in the WP community or you can be a f*cking EE rockstar. Your choice.</strong></p>

<p><a href='https://www.e-junkie.com/ecom/gb.php?cl=12635&#038;c=ib&#038;aff=13473' target='_blank'><img src="http://www.bybjorn.com/wp-content/uploads/2010/07/rockstar.jpg" alt="" title="EE rockstar!" width="338" height="157" class="aligncenter size-full wp-image-402" /></a></p>

<h4>6. It&#8217;s MVC And It&#8217;s Easy To Get Started</h4>

<p>With 2.0 EllisLab made a great choice of going <a href="http://www.codeigniter.com">CodeIgniter</a> all the way. This means that your EE addon is a CodeIgniter module, with <a href="http://codeigniter.com/user_guide/general/helpers.html">helpers</a>, <a href="http://codeigniter.com/user_guide/general/creating_libraries.html">libraries</a>, <a href="http://codeigniter.com/user_guide/general/views.html">views</a> etc. EE comes bundles with CodeIgniter, and you can harness the power of the CodeIgniter framework in your EE modules. Nice!</p>

<p><a href="http://www.codeigniter.com"><img src="http://www.bybjorn.com/wp-content/uploads/2010/07/codeigniter-300x76.jpg" alt="" title="codeigniter" width="300" height="76" class="aligncenter size-medium wp-image-412" /></a></p>

<p>In addition to the CodeIgniter <a href="http://codeigniter.com/user_guide/index.html">user guide</a> (which is pretty good) there are <a href="http://www.expressionengine.com/index.php?affiliate=bjorn&amp;page=/user_guide/development/">developer docs for EE</a> and the newly created <a href="http://www.expressionengine.com/index.php?affiliate=bjorn&amp;page=/forums/viewforum/116/">Development and Programming forum</a> to encourage discussion among developers.</p>

<p>And of course, I can&#8217;t write this blog post without plugging <a href="http://www.bybjorn.com/344/">my own DevKit addon</a> which is an addon you use in your development environment to create the skeleton of a new addon.. check out this video:</p>

<p><object width="500" height="375"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=12828566&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=12828566&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="375"></embed></object></p>

<p><strong>Yup, it&#8217;s easy to get started, so give it a go!</strong></p>

<h4>7. If You Create Something Nice EllisLab Might Embrace It</h4>

<p>Take a look at the <a href="http://www.expressionengine.com/index.php?affiliate=bjorn&amp;page=/community">Community page on expressionengine.com</a>. Sites like <a href="http://eeinsider.com">EEInsider</a>, <a href="http://devot-ee.com">Devot:ee</a>, <a href="http://show-ee.com">Show EE</a>, <a href="http://director-ee.com/">Director-ee</a> etc. are all sites created by third-party devs and taken to heart by EllisLab (creators of EE). It doesn&#8217;t even have to be a <a href="http://eehash.com/">unique or new idea, just a nice implementation</a>.</p>

<p>Also, it could be argued that some of the most popular commercial addons for EE (<a href="http://www.buildwithstructure.com">Structure</a>, <a href="http://www.solspace.com/software/detail/tag/">SolSpace&#8217;s Tag</a> for instance) in reality is pretty basic functionality that should be added in a CMS (pages/tagging). I don&#8217;t know for sure, but I have a feeling EllisLab likes the fact that there&#8217;s a commercial sphere around EE and that they don&#8217;t want to step on too many third party toes by incorporating this functionality into EE (and therby destroying the market for these third party addons). Of course this is just speculation from my side, and it can be argued this is a bad thing &#8211; but for a third party dev this is a <em>good thing</em>^<sup>TM</sup> .. And yeah, <a href="http://www.expressionengine.com/index.php?affiliate=bjorn&amp;page=/archived_forums/viewthread/145250/#710620">Brandon Kelly&#8217;s FieldFrame is just the exception</a> that proves the rule.</p>

<p><strong>If you create something nice you might be featured on ExpressionEngine.com &#8211; and if you make a living selling an addon the ellisphant in the room might just let you continue with that.</strong></p>

<h4>8. The Twitter Stream Is Actually Maintainable</h4>

<p>The <a href="http://search.twitter.com/search?q=%23eecms">#eecms twitter stream</a> can actually be followed and read, without much noise or spam. It&#8217;s a nice pace. You take the weekend off, have a couple of beers or enjoy some quality time with the family, then come back and see what happened while you were away. Try that with <a href="http://search.twitter.com/search?q=%23wordpress">#wordpress</a> .. it&#8217;s more like &#8220;grab a coffee and see what happened while you were away&#8221; :-p</p>

<p><img src="http://www.bybjorn.com/wp-content/uploads/2010/07/eecms.jpg" alt="" title="eecms" width="361" height="537" class="aligncenter size-full wp-image-419" /></p>

<h4>9. You Can Deliver A Website To Your Client And Then Forget About It</h4>

<p>Ok, this last point might be a bit FUD&#8217;y but still &#8211; I make sure the WordPress blogs I deliver to clients are always kept up-to-date for all eternity. I mean who wants to see this in the Google search results (image courtesy of <a href="http://www.pearsonified.com/2010/04/wordpress-pharma-hack.php">Pearsonified</a>):</p>

<div id="attachment_423" class="wp-caption aligncenter" style="width: 496px"><a href="http://www.bybjorn.com/wp-content/uploads/2010/07/pharma.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/07/pharma.jpg" alt="" title="pharma" width="486" height="167" class="size-full wp-image-423" /></a><p class="wp-caption-text">Get cheap pills over at Pearsonified</p></div>

<p>Everyone doing WordPress knows: you update when there&#8217;s a new version out, or else you might be at risk. Belive it or not; it&#8217;s not like that with EE. You can actually chill and not worry about these kinds of things happening. There&#8217;s very seldom a security patch, and if there is one there&#8217;s not enough people using EE for the Viagra mafioso to bother anyway.</p>

<p><strong>Of course, that said, it&#8217;s always good practice to upgrade your clients to the latest version anyway, but with EE it can wait until tuesday <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </strong></p>

<h4>10. There Is No Ten</h4>

<p>Do you really need ten reasons? There was only 9, that should be enough for anyone. If I added another reason it&#8217;d probably be some standard one about EllisLab&#8217;s great support etc.</p>

<p>So let me finish with this; if you&#8217;re interested in checking out EE <a href="http://www.expressionengine.com/index.php?affiliate=bjorn">buy a license</a> (don&#8217;t bother with the free Zend encoded trial IMHO, buy it and you&#8217;ll get the source and be able to debug, see what&#8217;s happening under the hood, etc.) &#8211; <a href="http://www.expressionengine.com/index.php?affiliate=bjorn&amp;page=/forums/viewforum/98/">say hello in the forums</a> or in the comments below or <a href="http://twitter.com/bjornbjorn">to me on twitter</a>, follow the #eecms hashtag &#8211; participate in the discussion on Twitter, and of course <strong>don&#8217;t forget to <a href="http://feeds.feedburner.com/bjornblog">subscribe to my feed</a> if you enjoyed this post.</strong></p>

<p><strong>What do you think? Are there other benefits about the EE community? Was I a bit too generalizing somewhere? Is WordPress really a MUCH MUCH BETTER CMS AND EVERYONE ELSE MUST DIE?</strong> Let me know!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=3wU0TSFEnvo:5FD_qeU84FU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=3wU0TSFEnvo:5FD_qeU84FU:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=3wU0TSFEnvo:5FD_qeU84FU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/3wU0TSFEnvo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/371/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/371/</feedburner:origLink></item>
		<item>
		<title>Introducing DevKit for EE 2.0</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/b7IDBcyQy0c/</link>
		<comments>http://www.bybjorn.com/344/#comments</comments>
		<pubDate>Sat, 22 May 2010 16:28:45 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[devkit]]></category>
		<category><![CDATA[ExpressionEngine]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=344</guid>
		<description><![CDATA[I&#8217;ve spent the last 8 months developing modules (and templates) for EE 2.0. Pretty early I got annoyed by some of the redundant manual tasks I had to do over and over again .. so I started creating some addons to help me out. Now I&#8217;ve bundled (some of that) functionality in this thing I&#8217;ve [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve spent the last 8 months developing modules (and templates) for EE 2.0. Pretty early I got annoyed by some of the redundant manual tasks I had to do over and over again .. so I started creating some addons to help me out. Now I&#8217;ve bundled (some of that) functionality in this thing I&#8217;ve named <em>DevKit for EE 2.0</em>, download it here: <a href="http://github.com/bjornbjorn/devkit.ee_addon/zipball/master" title="devkit.zip">zip</a> / <a href="http://github.com/bjornbjorn/devkit.ee_addon" title="ee devkit github page">github page</a>.</p>

<p>For now it contains functionality to <strong>generate the skeleton of a new EE module</strong> &#8211; you just give it some details (name, description, etc.) and an installable EE 2.0 module will be generated. It will add some helpful functions as well. Then it&#8217;s up to you to fill it with business logic <img src='http://www.bybjorn.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>

<p>Also it has a <strong>one-click load of snippets and global variables</strong> from the filesystem. Personally I like to use the built in EE functionality to add that to the main navigation at the top, so that when updating the global variables in my files I just hit that button and they&#8217;re all updated.</p>

<p>And then there is a <strong>YAML 2 dbforge generator</strong> that will help you out when you have a lot of database tables you need to generate (this is handy for the upd.yourmodule.php install() and uninstall() functions). Personally I&#8217;m too lazy to write dbforge code, YAML is quicker (see the screenshot). This is very basic, but it works.</p>

<h3>Here are some screenshots:</h3>

<div id="attachment_350" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bybjorn.com/wp-content/uploads/2010/05/devkit_create_new_module.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/05/devkit_create_new_module-300x236.jpg" alt="" title="DevKit: Create new module" width="300" height="236" class="size-medium wp-image-350" /></a><p class="wp-caption-text">DevKit: Create new module</p></div>

<p><br/></p>

<div id="attachment_352" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bybjorn.com/wp-content/uploads/2010/05/devkit_dbforge_generator.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/05/devkit_dbforge_generator-300x277.jpg" alt="" title="YAML 2 dbforge code generator" width="300" height="277" class="size-medium wp-image-352" /></a><p class="wp-caption-text">YAML 2 dbforge Code Generator</p></div>

<p><br/></p>

<div id="attachment_355" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bybjorn.com/wp-content/uploads/2010/05/devkit_update_snippets.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/05/devkit_update_snippets-300x209.jpg" alt="" title="devkit_update_snippets" width="300" height="209" class="size-medium wp-image-355" /></a><p class="wp-caption-text">Update/Import snippets/global variables from disk</p></div>

<p><br/></p>

<h3>Like it?</h3>

<p>I hope that other EE developers find this helpful. If you do, please let me know, and also &#8211; if you&#8217;d like to contribute / help out improving this DevKit let me know and I&#8217;ll add you to the project <a href="http://github.com/bjornbjorn/devkit.ee_addon" title="github">on github</a> so you can commit code to it.</p>

<p>This is a small step for EE, and a humble start, but maybe this can evolve into an awesome tool / framework for EE 2.0 development.</p>

<p>Download: <a href="http://github.com/bjornbjorn/devkit.ee_addon/zipball/master" title="devkit.zip">devkit.zip</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=b7IDBcyQy0c:GHsF0Bq6wko:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=b7IDBcyQy0c:GHsF0Bq6wko:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=b7IDBcyQy0c:GHsF0Bq6wko:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/b7IDBcyQy0c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/344/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/344/</feedburner:origLink></item>
		<item>
		<title>WooThemes launch of ExpressionEngine themes gets TechCrunch frontpage</title>
		<link>http://feedproxy.google.com/~r/bjornblog/~3/i61ssqBHUsM/</link>
		<comments>http://www.bybjorn.com/263/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 12:02:52 +0000</pubDate>
		<dc:creator>Bjørn Børresen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ExpressionEngine]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[woothemes]]></category>

		<guid isPermaLink="false">http://www.bybjorn.com/?p=263</guid>
		<description><![CDATA[Themes have moved &#160; Please note that these themes have now moved to ThemeForest, you can find them here: ExpressionEngine Themes @ AddonBakery Ok, I&#8217;m kind of busy these days so I haven&#8217;t got time for the most elaborate posts &#8212; but anyway, as some of you might know I&#8217;ve teamed up with WooThemes to [...]]]></description>
				<content:encoded><![CDATA[<blockquote class='tip'>
<p><strong>Themes have moved</strong></p>
<p>&nbsp;</p>
<p>Please note that these themes have now moved to ThemeForest, you can find them here: <a href='http://themes.addonbakery.com'>ExpressionEngine Themes @ AddonBakery</a></p>
</blockquote>

<p>Ok, I&#8217;m kind of busy these days so I haven&#8217;t got time for the most elaborate posts &#8212; but anyway, as some of you might know <a href="http://www.woothemes.com/2010/01/welcome-to-weethemes/">I&#8217;ve teamed up with WooThemes</a> to create theme packages for my publishing engine of choice; <a href="http://bybjorn.com/ee2_the_most_flexible_cms_yet/">ExpressionEngine</a>.</p>

<p>Yesterday was a busy day since we launched it, and thanks to <a href="http://twitter.com/adii">adii</a> and <a href="http://twitter.com/danielbru">Daniel Brusilovsky</a> it made the frontpage on TechCrunch:</p>

<p><a href="http://www.techcrunch.com/2010/01/14/woothemes-expressionengine-themes/">http://www.techcrunch.com/2010/01/14/woothemes-expressionengine-themes/</a></p>

<div id="attachment_278" class="wp-caption aligncenter" style="width: 810px"><a href="http://www.bybjorn.com/wp-content/uploads/2010/01/woothemes_on_techcrunch_frontpage_800.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/01/woothemes_on_techcrunch_frontpage_800.jpg" alt="" title="woothemes_on_techcrunch_frontpage_800" width="800" height="703" class="size-full wp-image-278" /></a><p class="wp-caption-text">WooThemes and ExpressionEngine on the TechCrunch frontpage</p></div>

<p><br/>
<strong>I think that&#8217;s great, both for WooThemes and EllisLab/ExpressionEngine.</strong></p>

<p>And of course, it also resulted in this:</p>

<p><a href="http://www.bybjorn.com/wp-content/uploads/2010/01/woothemes_danielbru_tweet.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/01/woothemes_danielbru_tweet.jpg" alt="" title="woothemes_danielbru_tweet" width="776" height="284" class="aligncenter size-full wp-image-280" /></a></p>

<p><a href="http://www.bybjorn.com/wp-content/uploads/2010/01/woothemes_techcrunch_tweet.jpg"><img src="http://www.bybjorn.com/wp-content/uploads/2010/01/woothemes_techcrunch_tweet.jpg" alt="" title="woothemes_techcrunch_tweet" width="777" height="405" class="aligncenter size-full wp-image-282" /></a></p>

<p>The author&#8217;s tweet (300k followers) + TechCrunch&#8217;s tweet (1,3m followers) + general Twitter crazyness with the &#8220;woourl.com/ee&#8221; being passed around, resulted in the <a href="http://www.rsaweb.co.za/">rsaweb</a> guys working their butts off to keep the server up (it went down a couple of times as well, but all in all they did a good job).</p>

<p>It&#8217;s exciting times, since we&#8217;re basically testing out some new grounds here; is there a market for premium ExpressionEngine themes? Who knows. I hope so, and it&#8217;s going to be interesting to see how the traffic and hype converts to actual sales.</p>

<p>What do you think?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/bjornblog?a=i61ssqBHUsM:XF_kUPMaWno:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=i61ssqBHUsM:XF_kUPMaWno:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=dnMXMwOfBR0" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/bjornblog?a=i61ssqBHUsM:XF_kUPMaWno:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/bjornblog?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/bjornblog/~4/i61ssqBHUsM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.bybjorn.com/263/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.bybjorn.com/263/</feedburner:origLink></item>
	</channel>
</rss>
