<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">

	<title type="text">CI News</title>
	<subtitle type="text">CI News:</subtitle>
	<link rel="alternate" type="text/html" href="http://codeigniter.com/news/" />
	<link rel="self" type="application/atom+xml" href="http://codeigniter.com/xml/atom/news" />
	<updated>2012-05-24T08:12:14Z</updated>
	<rights>Copyright (c) 2012, Marcus Neto</rights>
	<generator uri="http://expressionengine.com/" version="2.2.2">ExpressionEngine</generator>
	<id>tag:codeigniter.com,2012:05:09</id>

	
		<entry>
			<title>BAMify Ads</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/bamify_ads" />
			<id>tag:codeigniter.com,2012:news/15.17890</id>
			<published>2012-05-09T22:54:13Z</published>
			<updated>2012-05-24T08:12:14Z</updated>
			<author>
				<name>Marcus Neto</name>
				<uri>http://marcusneto.com</uri>			</author>
		
			
				<category term="Showcase"
					scheme="http://codeigniter.com/news/category/showcase"
					label="Showcase" />
			
		
			<content type="html"><![CDATA[
				<h3>What can you tell us about the team that built the BAMify Ads site?</h3>
<p><a href="http://www.bamifyads.com/">Bamify Ads</a> was built by myself (Mike Griffiths) and Bryn Jones. We are senior developers from a successful development studio in the UK.&nbsp; We spend our days making systems for large multi-nationals.&nbsp; We also own dogs. <br />
<a href="http://www.bamifyads.com/"><img src="http://codeigniter.com/files/ci_blog/bamify.png" alt="BAMify Ads Screenshot" height="444" width="320" style="float:right;margin:15px;border:1px solid #eee;" /></a></p><h3>What can you tell us about the site in general? What are the goals of the site and the main audience?</h3>
<p>The first thing we want to point out is that it&#8217;s free.&nbsp; Totally free.&nbsp; No scams, no way of trying to pilfer money from people, no credit cards (ever).&nbsp; The aim of the site is to offer free online advertising to anyone who wants it (meeting our ToS, eg. no porn, racism, etc).&nbsp; The idea is to place what we call an &#8216;Adspace&#8217; on your website which is just a couple of lines of JS, this then serves adverts to your site from our network.&nbsp; Every impression of an Adspace earns you a bunch of credits (depending on the size of the Adspace).&nbsp; You can then upload as many adverts as you like to our network, these ads are shown across thousands of sites and use the credits you&#8217;re earning on your own website.&nbsp; We give you 5,000 credits for free upon sign up to get the ball rolling.</p>

<p>Interestingly, this can cause a sort of endless loop of credits.&nbsp; For example, let&#8217;s say you have a couple of large Adspaces on your website homepage, and a few adverts running on the network.&nbsp; If your advert has a good CTR then you will earn credits every time your advert is shown on the network.&nbsp; For example, your website is bobsclothes.com, you have 2 Adspaces here.&nbsp; I am a visitor to joesworkshop.com and I see your amazing advert, so I click on it.&nbsp; That impression on joesworkshop.com has cost you a credit, but because I have clicked through to your website - bobsclothes.com - I have just earned you 10 credits because you have shown me ads for other sites there.</p>

<p>We have a few target audiences.&nbsp; A lot of our users have small, independent websites; often blogs, hobby websites, that sort of thing.&nbsp; There are also technical users, a lot of Open Source projects use us.&nbsp; We don&#8217;t just deal with small sites though, we have a few large gaming sites that use us.</p>

<h3>What was your major consideration in using CodeIgniter for this?</h3>
<p>We like the small footprint CI has.&nbsp; BAMify Ads serves tens of millions of ads, so we need something solid and scalable that doesn&#8217;t get in our way.&nbsp; CI fits the bill.</p>

<h3>What is next on the plate for the BAMify Ads site? Any additional functionality you can tell us about?</h3>
<p>We have just introduced mobile ads.&nbsp; You can now use BAMify Ads on your mobile-optimised website or a native App (Android and iOS).&nbsp; There are libraries for some of the popular native App frameworks, such as Corona SDK (Ansca Mobile).&nbsp; Placing ads on your app or mobile site is as easy as placing it on your website.</p>

<p>We&#8217;re in the process of revamping the stats and reporting areas of the control panel.&nbsp; We want to be more transparent about where your credits are being spent and allow you, the user, to work out which adverts perform the best.</p>

<h3>Do you have any other information you&#8217;d like to share with the community? Tips from this project you&#8217;d like to share? Lessons you&#8217;ve learned?</h3>

<p>The whole project has been a learning experience for us.&nbsp; Handling large data sets isn&#8217;t something you can just read about and understand, you need to see how much of an effect small optimisation changes can make.&nbsp; Our success has largely been down to having a good product and being open with our users.&nbsp; Our users like the product, so they not only use it, but try and get others to use it too.&nbsp; That has helped our growth a lot.</p>
			]]></content>
		</entry>
	
		<entry>
			<title>Simplifying Tools Used for Feedback</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/simplifying_tools_used_for_feedback" />
			<id>tag:codeigniter.com,2012:news/15.17743</id>
			<published>2012-04-04T14:33:06Z</published>
			<updated>2012-04-04T09:44:08Z</updated>
			<author>
				<name>Derek Jones</name>
				<uri>http://derekderekderek.com/</uri>			</author>
		
			
		
			<content type="html"><![CDATA[
				<p>EllisLab and the CodeIgniter Reactor team have been thrilled with participation in discussions, pull requests, code review, and idea submissions on <a href="https://github.com/ellisLab/CodeIgniter">GitHub</a>.&nbsp; It has resulted in a steady decline in traffic to the UserVoice forum that we opened prior to moving our codebase to GitHub, as the majority of those conversations have organically moved there as well.&nbsp; So effective today, EllisLab and the CodeIgniter Reactor team are closing the <a href="http://codeigniter.uservoice.com/">UserVoice forum</a>.</p>

<p>You can still comment on existing ideas if you wish, but voting and new ideas are closed, pending a deletion of the UserVoice forum which will take place on May 1st, 2012.&nbsp; This should allow ample time for the community and team to move any discussions to GitHub from UserVoice that aren&#8217;t already taking place there.</p>

<p>Thanks to everyone who has contributed to these discussions!&nbsp; We are confident that the simplification of how we gather feedback will make it easier for the team to monitor, and encourage the best exchanges from all voices.</p>
			]]></content>
		</entry>
	
		<entry>
			<title>A Quick Look at Sparks</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/a_quick_look_at_sparks" />
			<id>tag:codeigniter.com,2012:news/15.17651</id>
			<published>2012-03-13T16:38:00Z</published>
			<updated>2012-03-13T11:43:02Z</updated>
			<author>
				<name>Pascal Kriete</name>
				<uri>http://pascalkriete.com</uri>			</author>
		
			
		
			<content type="html"><![CDATA[
				<p>On the back of a CIConf in London last month, I would like to delve a little into a common theme amongst CodeIgniter developers. Speeding up development through simple automation. To do that we&#8217;re going to take a look at the CodeIgniter Sparks project and how it can drastically speed up your development. To demonstrate, I will walk through building a little portfolio that leeches off the GitHub API.</p>

<p>But first, what is sparks?</p>

<p>Sparks is a package management system for CodeIgniter. It hosts ready-to-go user contributed code that you can pull into your projects. If you have acquired a game through Steam; installed new software with Homebrew; or sped up your work with a Ruby Gem, then you already know what a package management system can do for you.</p>

<p>Why not PEAR?</p>

<p>PHP has an existing package management system, PEAR. Ideally a framework specific package manager would simply wrap around the language equivalent. Unfortunately with PEAR&#8217;s odd approach to packaging that isn&#8217;t feasible. It is regretable that the PHP standard has not enjoyed the success that gems, easy_install, and npm have seen.</p>

<p>How do I get it?</p>

<p>The <a href="http://getsparks.org/install">getsparks</a> website has installation instructions. For demo purposes I will use the option that isn&#8217;t listed on that page: The CodeIgniter reactor team has been hard at work getting sparks into the core, so I&#8217;ll be working from the <a href="https://github.com/EllisLab/CodeIgniter/tree/feature/sparks">sparks branch</a> on GitHub.</p>

<p>Let&#8217;s get started!</p>

<p>Find a calm area somewhere in your webroot, and run:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">git&nbsp;</span><span style="color: #007700">clone&nbsp;-</span><span style="color: #0000BB">b&nbsp;feature</span><span style="color: #007700">/</span><span style="color: #0000BB">sparks&nbsp;</span><span style="color: #007700">--</span><span style="color: #0000BB">depth&nbsp;1&nbsp;git</span><span style="color: #007700">:</span><span style="color: #FF8000">//github.com/EllisLab/CodeIgniter.git&nbsp;</span>
</span>
</code></div>

<p>This will do a shallow clone of the CodeIgniter Reactor repository and put us on the sparks branch. If you view the root of this new folder in your web browser, you should see the CodeIgniter welcome screen.</p>

<p>Next up, let&#8217;s find our first Spark. We can run sparks on the command line from the root of the CodeIgniter directory we just created. The command looks like this:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">php&nbsp;index</span><span style="color: #007700">.</span><span style="color: #0000BB">php&nbsp;</span><span style="color: #007700">--</span><span style="color: #0000BB">spark&nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">command</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">&#91;arguments&#93;&nbsp;</span>
</span>
</code></div>

<p>For example, to show a list of commands we can use:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">php&nbsp;index</span><span style="color: #007700">.</span><span style="color: #0000BB">php&nbsp;</span><span style="color: #007700">--</span><span style="color: #0000BB">spark&nbsp;help&nbsp;</span>
</span>
</code></div>

<p>You can also replace&#8212;spark with -s if you don&#8217;t want to type it out every time.</p>

<p>In order to build this little portfolio site, we need to access the Github API. We know that the GitHub API is a RESTful api, so let&#8217;s see if we can find something to help us using the search command:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">php&nbsp;index</span><span style="color: #007700">.</span><span style="color: #0000BB">php&nbsp;</span><span style="color: #007700">--</span><span style="color: #0000BB">spark&nbsp;search&nbsp;rest&nbsp;</span>
</span>
</code></div>

<p>You should see a list of packages. Scanning that list, <a href="http://getsparks.org/packages/restclient/versions/HEAD/show">restclient</a> seems to fit the bill. Installing it is just as easy as finding it:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">php&nbsp;index</span><span style="color: #007700">.</span><span style="color: #0000BB">php&nbsp;</span><span style="color: #007700">--</span><span style="color: #0000BB">spark&nbsp;install&nbsp;restclient&nbsp;</span>
</span>
</code></div>

<p>A bunch of output should spring up. The important lines are at the end. We can see that sparks installed the curl library dependency for us. We are also told what version of the spark we just installed. Sparks have versioning built right in, so you can have multiple versions of the same spark installed in parallel.</p>

<p>Time to try it. Open up application/controllers/welcome.php and load your new spark at the top of the index method:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">spark</span><span style="color: #007700">(</span><span style="color: #DD0000">'restclient/2.0.0'</span><span style="color: #007700">);&nbsp;</span>
</span>
</code></div>

<p>Once it&#8217;s loaded, we will do a test request to GitHub.</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$user&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'github'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">rest</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">initialize</span><span style="color: #007700">(array(</span><span style="color: #DD0000">'server'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'https://api.github.com/'</span><span style="color: #007700">));<br /></span><span style="color: #0000BB">$repos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">rest</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">get</span><span style="color: #007700">(</span><span style="color: #DD0000">'users/'</span><span style="color: #007700">.</span><span style="color: #0000BB">$user</span><span style="color: #007700">.</span><span style="color: #DD0000">'/repos'</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$repos</span><span style="color: #007700">);&nbsp;</span>
</span>
</code></div>

<p><strong>Sidenote: It returns false.</strong> This can happen on some local install, in particular MAMP, when there are certificate issues. If you&#8217;re seeing this, you can add the following in front of the get calls in this walkthrough:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">rest</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">option</span><span style="color: #007700">(</span><span style="color: #0000BB">CURLOPT_SSL_VERIFYPEER</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">FALSE</span><span style="color: #007700">);&nbsp;</span>
</span>
</code></div>

<p>So now we get data, but the output isn&#8217;t very pretty. So remove that var_dump and we will make use of a view instead. Rename the existing view to something more fitting (I like &#8220;home&#8221;). Then load it and pass along our repo data:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">view</span><span style="color: #007700">(</span><span style="color: #DD0000">'home'</span><span style="color: #007700">,&nbsp;array(</span><span style="color: #DD0000">'repos'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$repos</span><span style="color: #007700">));&nbsp;</span>
</span>
</code></div>

<p>In that view we can now loop through our repos and output them in a pretty format. After taking a look at our previous dump, I decided to include the title, description, and a link to github.</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">foreach&nbsp;(</span><span style="color: #0000BB">$repos&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">$repo</span><span style="color: #007700">):</span><span style="color: #0000BB">?&gt;<br /></span><span style="color: #007700">&lt;</span><span style="color: #0000BB">div&nbsp;</span><span style="color: #007700">class=</span><span style="color: #DD0000">"project"</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">h2</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$repo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name?&gt;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">h2</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">p</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$repo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">description?&gt;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">p</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">a&nbsp;href</span><span style="color: #007700">=</span><span style="color: #DD0000">"&lt;?php&nbsp;echo&nbsp;</span><span style="color: #0000BB">$repo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">html_url?&gt;</span><span style="color: #DD0000">"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">View&nbsp;on&nbsp;Github</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">a</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">endforeach;</span><span style="color: #0000BB">?&gt;&nbsp;</span>
</span>
</code></div>

<p>We are definitely getting somewhere. Now wouldn&#8217;t it be nice if we could also show off our awesome documentation right on our portfolio? Of course it would be. It&#8217;s usually a little more text, so we&#8217;ll start by adding a link to another page. Go ahead and add that to the loop in the view now:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">anchor</span><span style="color: #007700">(</span><span style="color: #DD0000">'/welcome/docs/'</span><span style="color: #007700">.</span><span style="color: #0000BB">$repo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'Documentation'</span><span style="color: #007700">)</span><span style="color: #0000BB">?&gt;&nbsp;</span>
</span>
</code></div>

<p>We are using the url helper here, so flip back to your controller and make sure it gets loaded it as well:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">helper</span><span style="color: #007700">(</span><span style="color: #DD0000">'url'</span><span style="color: #007700">);&nbsp;</span>
</span>
</code></div>

<p>While you&#8217;re there, create the controller method for this action:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">docs</span><span style="color: #007700">(</span><span style="color: #0000BB">$which</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">&#123;&#125;&nbsp;</span>
</span>
</code></div>

<p>GitHub has a nice convention where any README in the project root is show as documentation. A lot of these are written in markdown, so for this example we will try to look for a &#8220;README.md&#8221;. GitHub&#8217;s API can once again give us most of what we need.</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$trees&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">rest</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">get</span><span style="color: #007700">(</span><span style="color: #DD0000">'repos/'</span><span style="color: #007700">.</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">user</span><span style="color: #007700">.</span><span style="color: #DD0000">'/'</span><span style="color: #007700">.</span><span style="color: #0000BB">$which</span><span style="color: #007700">.</span><span style="color: #DD0000">'/git/trees/HEAD'</span><span style="color: #007700">);&nbsp;</span>
</span>
</code></div>

<p>I have picked up at the rest->get() call. The previous setup still needs to be run, but it is identical to what we had before. In my case I decided to add a constructor with any setup code.</p>

<p>We&#8217;re working with git and not a filesystem so the naming is a little strange, but a tree is basically a file. So we need to loop through all the files in the root and look for a README.md. Remember, you can always var_dump and double check your data. When I did this, I noticed that the API returns a new API url for the object data, so that is what I will store.</p>

<p>$doc_url = &#8216;&#8217;;</p>

<p>foreach ($trees->tree as $info)<br />
{<br />
	if ($info->path == 'README.md')<br />
	{<br />
		$doc_url = str_replace('https://api.github.com/', '', $info->url);<br />
		break;<br />
	}<br />
}</code></p>

<p>So now that we have the new api url for the readme, we can get the text for it as well. Note, that the content is encoded, so we have an added step:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$readme&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">rest</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">get</span><span style="color: #007700">(</span><span style="color: #0000BB">$doc_url</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">base64_decode</span><span style="color: #007700">(</span><span style="color: #0000BB">$readme</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">content</span><span style="color: #007700">);&nbsp;</span>
</span>
</code></div>

<p>We&#8217;re almost there! We can stick that output into a view and it will work just fine:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">view</span><span style="color: #007700">(</span><span style="color: #DD0000">'docs'</span><span style="color: #007700">,&nbsp;array(</span><span style="color: #DD0000">'content'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">$content</span><span style="color: #007700">));<br /></span><span style="color: #FF8000">//&nbsp;view:<br /></span><span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$content?&gt;&nbsp;</span>
</span>
</code></div>

<p>However, we really don&#8217;t want to show raw markdown to our visitors. Let&#8217;s go back to the command line and see what we can find:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">php&nbsp;index</span><span style="color: #007700">.</span><span style="color: #0000BB">php&nbsp;</span><span style="color: #007700">--</span><span style="color: #0000BB">spark&nbsp;search&nbsp;markdown&nbsp;</span>
</span>
</code></div>

<p>The markdown spark looks perfect! Go ahead and install it.</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">php&nbsp;index</span><span style="color: #007700">.</span><span style="color: #0000BB">php&nbsp;</span><span style="color: #007700">--</span><span style="color: #0000BB">spark&nbsp;install&nbsp;markdown&nbsp;</span>
</span>
</code></div>

<p>Armed with our new tool, we can load up that spark, and render the parsed markdown:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">load</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">spark</span><span style="color: #007700">(</span><span style="color: #DD0000">'markdown/1.2.0'</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&nbsp;in&nbsp;the&nbsp;view<br /></span><span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">parse_markdown</span><span style="color: #007700">(</span><span style="color: #0000BB">$content</span><span style="color: #007700">)</span><span style="color: #0000BB">?&gt;&nbsp;</span>
</span>
</code></div>

<p>And there you have it!</p>

<p>Of course, we do not want to run API calls for every request when we put this site live, or we will be in trouble very quickly. So as a last step, you should cache these pages:</p>

<div class="codeblock"><code><span style="color: #000000">
<span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">output</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">cache</span><span style="color: #007700">(</span><span style="color: #0000BB">60</span><span style="color: #007700">*</span><span style="color: #0000BB">24</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;cache&nbsp;for&nbsp;a&nbsp;day&nbsp;</span>
</span>
</code></div>

<p>Your finished controller should look similar to this: <a href="https://gist.github.com/2029827">https://gist.github.com/2029827</a></p>

<p>And finally, thank you to the reactor and sparks team for the awesome work on this!</p>
			]]></content>
		</entry>
	
		<entry>
			<title>Pancake App</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/pancake_app" />
			<id>tag:codeigniter.com,2012:news/15.17386</id>
			<published>2012-01-25T16:56:02Z</published>
			<updated>2012-01-25T12:14:03Z</updated>
			<author>
				<name>Marcus Neto</name>
				<uri>http://marcusneto.com</uri>			</author>
		
			
				<category term="Showcase"
					scheme="http://codeigniter.com/news/category/showcase"
					label="Showcase" />
			
		
			<content type="html"><![CDATA[
				<p>Three days ago I received my copy of Inc magazine. I was scanning through it and low and behold there is a <a href="http://www.inc.com/magazine/201202/my-favority-tool-for-handling-invoices.html">1/4 page blurb about Pancake App!</a> Phil is a leader within the CodeIgniter community and a member of the Reactor Team so I was very excited to see this. After doing some research I found that we have never done a showcase on Pancake App so this entry is to make that right. Congratulations to Phil, Lee, Bruno and Adam! You guys deserve the recognition that Inc. Magazine is bringing you. </p>

<h3>Tell us a little about Phil and Lee.</h3>

<p>Lee Tengum is a PHP developer with a keen eye for design. I am a long-time CodeIgniter user and contributor who also likes to build distributed applications. We make a good team, as I couldn&#8217;t design a website to save my life and I have plenty of experience building backend systems.</p>

<h3>How did you two come to work together?</h3>

<p>We&#8217;ve been working together on various projects for years now after we crossed paths on the CodeIgniter forums back in 2007. Lee built a very simple CMS which I ended up buying and that CMS became the great grandaddy of PyroCMS. Since then there have been a few client projects we&#8217;ve worked on and while Lee is a talented programmer we generally split the work as Lee on UI and myself on the main development. About a year ago Lee started building a simple internal application to collect payments from a difficult client. </p>

<p>After showing it to a few different people they were interested and wanted more features added in, which was when Lee decided to migrate the code to CodeIgniter and get more people involved. Throughout Pancakes lifetime it has had contributions from several prominent CodeIgniter developers and the team currently consists of Lee, Bruno De Barros, Adam Jackett and myself.</p>

<p><a href="http://www.pancakeapp.com"><img src="http://codeigniter.com/files/ci_blog/pancakeapp.jpg" alt="Pancake App website screenshot" width="320" style="margin:15px 0px 15px 20px;float:right;" /></a></p>

<h3>What can you tell us about the app in general?</h3>

<p>I like to describe <a href="http://www.pancakeapp.com">PancakeApp</a> as a freelancers sidekick. PancakeApp handles the full project life-cycle from Proposal to Payment. You can draft Proposals and send them to your client, who can then accept or reject until an iteration is agreed on, all from within the app. That saves a lot of PDF emailing! With the Proposal agreed upon you can make a Project, add Milestones and Tasks and even track time against each task. You can generate invoices based on the Projects which automatically take all your tasks and tracked time into consideration, so your Project is instantly turned into line items and totals. You can of course also create invoices from scratch. The invoices are sent to the client who then has multiple options of paying based on what you&#8217;ve enabled in the settings, so you can take money via PayPal, Authorize.net, Bank Transfer or even accept cash; instructions will be listed on the invoice.</p>

<p>You might be thinking of a hosted service that sounds similar too, but <a href="http://www.pancakeapp.com">PancakeApp</a> is not a hosted service. It&#8217;s a single payment to download the software and then it&#8217;s all yours to go on your own server. No worries about other companies having your client details, no monthly fees, just one payment. </p>

<p>There is one last thing that makes <a href="http://www.pancakeapp.com">PancakeApp</a> awesome: Auto-updating. If you turn this feature on in the control panel, PancakeApp will upgrade in the background as soon as we release a new version. You don&#8217;t need to keep logging into your FTP server to replace files or worry about running an upgrade script, we send out a HTTP notification to installations to grab the new files and CodeIgniter Migrations take care of the database changes.</p>

<h3>I know you are on the Reactor team but when building something major like this you can build it using anything. So what was your major consideration in using CodeIgniter for this?</h3>

<p>The most obvious answer would be that both me and Lee know the framework well and have been using it a long time, but the main reason is that CodeIgniter is currently the most simple and most portable framework around. While some frameworks undergo large rewrites to implement the very latest PHP 5.3 features, CodeIgniter maintains backwards compatibility for older servers meaning it is perfect for distributed applications in two ways: 1) We won&#8217;t have to re-write PancakeApp in a year, it has already gone from 1.7.x to 2.1.0 without a hitch, but also 2) it will work on PHP 5.1.6 servers. While as developers we have probably all upgraded any servers in our control to PHP 5.3 and are trying to convince our clients to upgrade theirs, when you release a distributed application like PancakeApp it has to work in as many places as possible and CodeIgniter makes that incredibly simple. After-all if we used a PHP 5.3-only framework and 30% of servers are still on PHP 5.2, we&#8217;ve just reduced our target market by 30%! </p>

<h3>What is next on the plate for pancake app? Any additional functionality you can tell us about?</h3>

<p>There are some brilliant features coming for PancakeApp at the moment. We&#8217;ve just finished up some improvements to User Management and Permissions meaning that you can add plenty of users with varying levels of access, and there are plans to improve the existing REST API even more to allow for more integration with other services.</p>

<h3>Do you have any other information you&#8217;d like to share with the community? Tips from this project you&#8217;d like to share? Lessons you&#8217;ve learned? </h3>

<p>The API is something I really wish I&#8217;d focused on more at the start. It is a well-known developer habbit to build an application or website then add the API in as more of an after-thought. While we are happy to have an API if we&#8217;d build it first and used it as a core for the system (much like Twitter does for example) then we&#8217;d have been able to make it much more powerful and have web features and API features keep up with each other without duplication of effort.</p>

<p>A positive lesson we learned was open, honest, personal customer support. While PancakeApp was still in its first year we had a few users on Twitter and in various forums make some complaints that certain features were not included. While some developers would take a defensive position, we admitted there was room for improvement and engaged them in conversation. Those users who complained all now have a PancakeApp license and have become some of our best evangelists. It&#8217;s thanks to users like this that PancakeApp has started to spread and we even got quite a <a href="http://www.inc.com/magazine/201202/my-favority-tool-for-handling-invoices.html">big mention in Inc Magazine this month!*</a></p>
			]]></content>
		</entry>
	
		<entry>
			<title>ZoomShift</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/zoomshift" />
			<id>tag:codeigniter.com,2012:news/15.17359</id>
			<published>2012-01-20T20:47:02Z</published>
			<updated>2012-01-23T08:42:04Z</updated>
			<author>
				<name>Marcus Neto</name>
				<uri>http://marcusneto.com</uri>			</author>
		
			
				<category term="Showcase"
					scheme="http://codeigniter.com/news/category/showcase"
					label="Showcase" />
			
		
			<content type="html"><![CDATA[
				<h3>What can you tell us about the team that built ZoomShift?</h3>
<p><a href="http://www.zoomshift.com/">Zoomshift</a> is a rather young 4-person team composed of 2 developers, a designer, and a sales and content person. Our team is very tight knit and incredibly passionate about entrepreneurship and technology. We are strong believers in lean methodology and are constantly searching for new technologies to set our product apart. We all agree that we can&#8217;t see ourselves doing anything else. We love what we do and have a strong passion for entrepreneurship.<br />
<a href="http://www.zoomshift.com/"><img src="http://codeigniter.com/files/ci_blog/zoomshift.png" alt="" width="320" style="float:right;margin:15px;" /></a></p><h3>What can you tell us about the site in general? What are the goals of the site and the main audience?</h3>
<p>The idea for <a href="http://www.zoomshift.com/">ZoomShift</a> was born from experience working in the service industry. From serving tables to selling tickets we realized first-hand that employee scheduling can be an absolute nightmare for many organizations. After doing some research we were unable to find a solution that was intuitive, affordable, and truly simplified the scheduling process. In turn, we decided to build ZoomShift with the goal of making scheduling simple for both employees and managers. Our vision for ZoomShift has always been very focused with the mentality that less is more. We focus on the core functionality of online employee scheduling and purposefully leave out all of the extra features that many other solutions provide. </p>

<p>Currently, we have customers ranging from restaurants and hotels to volunteer organizations and small medical clinics. ZoomShift is not designed to fit one specific industry, but rather it is intended to work for any organization that needs to schedule employees hourly. We love that our customers are other small businesses and from their feedback we are constantly finding new ways to make scheduling even simpler.</p>

<h3>What was your major consideration in using CodeIgniter?</h3>
<p>Choosing CodeIgniter was an easy decision for us. We wanted a lightweight and flexible framework that was relatively easy to learn. From a development perspective we didn&#8217;t want to be confined, and we knew that we would be needing to extend the framework quite a bit. CodeIgniter offered us a solid foundation in MVC that we could then comfortably build on top of. Also, it was incredibly important to us that the framework was well documented. The documentation was evidence to us that CodeIgniter was polished and built with care. We clearly made the right decision with CodeIgniter. It&#8217;s simple, not bloated, and suitable for the pro down to the novice. </p>

<h3>What is next on the plate for ZoomShift? Any additional functionality.</h3>
<p>Mobile is next. We have been waiting to pull the trigger on mobile development for a few months now. We really wanted to dial in the core feature set of the application before turning our focus to mobile. Now that we have a steady customer base and have validated our core features it is time to push onto mobile. While the current application runs smoothly on mobile browsers we want to offer our customers a native application for iOS and Android.</p>

<h3>Do you have any other information you&#8217;d like to share with the community?</h3>
<p>Build a strong team. It is the team behind a product that makes it great, and an idea is only worth something if you have the team to execute it. Finding a group of talented individuals that share a passion is incredibly powerful. Do what you love, talk about what you love, and go where other people are doing what you love. If you immerse yourself and reach out to others you will naturally build relationships with people that think like you do. These relationships will be a source of energy and inspiration as well as an incredible source of knowledge. Do what you love and make friends.</p>
			]]></content>
		</entry>
	
		<entry>
			<title>CPA Site Solutions touts CI</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/cpa_site_solutions_touts_ci" />
			<id>tag:codeigniter.com,2011:news/15.17229</id>
			<published>2011-12-20T13:00:51Z</published>
			<updated>2011-12-19T19:47:53Z</updated>
			<author>
				<name>Marcus Neto</name>
				<uri>http://marcusneto.com</uri>			</author>
		
			
				<category term="Showcase"
					scheme="http://codeigniter.com/news/category/showcase"
					label="Showcase" />
			
		
			<content type="html"><![CDATA[
				<p>CPA Site Solutions just <a href="http://www.cpasitesolutions.com/cpa-websites/2011/12/innovative-methods-for-email-marketing-system-rebuild/">put out this Press Release that touts CodeIgniter</a>. They used it to create their new email marketing system.</p>

<p>And I quote:</p>

<p>“We evaluated several frameworks for PHP web application development.&nbsp; Many of them could have worked, but they really tried to lock you in to their way of doing things,” explains Bob Rayl, Chief Technology Officer at CPA Site Solutions. “They did not offer the flexibility we need to accomplish some of the heavily proprietary functionality we bundle into our systems.”</p>

<p>As part of the original article they also state that CI helped cut their development time.</p>

<p><i>If you have used CodeIgniter for a project that you think deserves a mention <a href="mailto:marcus.neto@ellislab.com">email Marcus</a></i></p>
			]]></content>
		</entry>
	
		<entry>
			<title>PHP Framework Usage Survey</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/php_framework_usage_survey" />
			<id>tag:codeigniter.com,2011:news/15.17149</id>
			<published>2011-12-09T21:02:18Z</published>
			<updated>2011-12-09T15:08:20Z</updated>
			<author>
				<name>Derek Jones</name>
				<uri>http://derekderekderek.com/</uri>			</author>
		
			
		
			<content type="html"><![CDATA[
				<p>A <a href="https://www.surveymonkey.com/s/5H6C7Y7">PHP framework usage survey</a> has been created with our community in mind.&nbsp; Though not strictly limited to CodeIgniter and ExpressionEngine developers, the questions are particularly relevant to you.&nbsp; The anonymous survey is very brief—just seven questions—and should take no more than five minutes or so to complete.&nbsp; The survey is open immediately and will remain open over the weekend.</p>

<p>We quickly discovered after opening the survey that Survey Monkey has a setting to enable &#8220;Other&#8221; as an option in addition to providing the &#8220;Other&#8221; box.&nbsp; This results in requiring you to make a valid selection in addition to filling in your own response.&nbsp; If you need to fill in your own response, go ahead and select an item from the list in addition to your answer for “Other”, and we will remove the selected item from the results.&nbsp; We are unable to edit that option as the survey has already begun collecting data, and we do apologize for any inconvenience this causes.</p>

<p><a href="https://www.surveymonkey.com/s/5H6C7Y7">Take the survey</a>.</p>

<p>Thanks for participating!</p>
			]]></content>
		</entry>
	
		<entry>
			<title>Sky Clerk</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/sky_clerk" />
			<id>tag:codeigniter.com,2011:news/15.17039</id>
			<published>2011-12-05T14:37:49Z</published>
			<updated>2011-12-05T14:38:50Z</updated>
			<author>
				<name>Marcus Neto</name>
				<uri>http://marcusneto.com</uri>			</author>
		
			
				<category term="Showcase"
					scheme="http://codeigniter.com/news/category/showcase"
					label="Showcase" />
			
		
			<content type="html"><![CDATA[
				<h3>What can you tell us about the team that built skyclerk.com? </h3>

<p><a href="http://skyclerk.com/?utm_source=codeigniter&amp;utm_campaign=posts">Skyclerk</a> is a product of <a href="http://www.cloudmanic.com/">Cloudmanic Labs</a>, once a consulting firm, now more of a product company. Currently, we are a 5-person team: 2 designers, 2 programmers, and a content person. Our team is simply amazing. We have a love of strong design, from the UI to the code. We spend much time looking at different products on the market and have a great deal of internal debate on how we could make things better. While the resumes of the team are impressive, our real secret sauce is our deeply shared passion to always make super high quality products.</p>

<p><a href="http://skyclerk.com/"><img src="http://codeigniter.com/files/ci_blog/skyclerk.png" alt="" width="320" style="float:right;margin:15px;" /></a></p>

<h3>What can you tell us about the site in general? What are the goals of the site and the main audience?</h3>

<p>Our main mission is to make small business bookkeeping simple, fast, and engaging. Skyclerk started out many years ago as an internal tool. Most bookkeeping products were just too complex, slow, and annoying to work with. In our non-skyclerk days often someone would take an entire day off of work each month just to do bookkeeping. Also, not every small business owner has a masters degree in accounting (at times it seems you need one for other solutions). </p>

<p>Everyday we focus on finding new ways to make bookkeeping even more straight forward and seamless. Currently we don’t provide all the bells and whistles other bookkeeping packages provide, so our customers tend to be smaller companies, often no bigger than 10 people. Our customers are anyone from a web designer, to a small law firm, to pool cleaners. We have customers all over the world, the UK and Brazil being our top countries outside of the United States. </p>

<h3>What was your major consideration in using CodeIgniter for this?</h3>

<p>Flexibility. We played around with all the other PHP frameworks, and always felt confined to doing things by the framework’s rules; very hard to expand. Some of them seemed too bloated. Before we discovered CodeIgniter we set out to write our own framework, with which Skyclerk was originally written. We were having internal debates on open sourcing our framework but the extra hard work of documenting it and adding the extra polish needed for public consumption seemed like a lot of overhead for a small company. One day we stumbled on CodeIgniter from a Google search of well documented frameworks. After looking at its guts, we realized CodeIgniter was where we were striving to be. We shortly killed our framework and have been a CodeIgniter shop ever since. So fast, so not bloated, so expandable. Perfect for what we value in a code base. </p>

<h3>What is next on the plate for skyclerk.com? Any additional functionality you can tell us about?</h3>

<p>At Cloudmanic we break our time up into what we call a 60/20/20 rule. We spend 60% of our time bettering our current features and product offering. This 60% comes mainly from user feedback. We have engaged users, who are always happy to tell us what they like and dislike. 20% of our time is spend building new features. Sometimes we build features from market demand and sometimes we build features we just internally really want. The last 20% is spent building new random things, for which we do not require a reason. The interest or passion of a team member is all that is needed, and all that matters. Sometimes these ideas flop. Sometimes it turns into some open source tools we release, and sometimes they become brand new products. </p>

<p>We have spend a great deal of time on our mobile apps (Android is released, and iPhone will be release soon). Invoicing is coming very soon, as well as some pretty cool integrations with other software providers. </p>

<h3>Do you have any other information you&#8217;d like to share with the community? Tips from this project you&#8217;d like to share? Lessons you&#8217;ve learned?</h3>

<p>Take bets. I think this goes for any sort of software development. If you have an idea of how to do something better, just go for it. You might hit a dead-end or you might discover an amazing new way of doing something. Either way, the learnings will improve your software development. In the past we just followed the conventional wisdom. Often times via little bets we find better ways to build more scalable software. </p>

<p>Also, as a software team we build software on a no schedule bases. We do not have timeline or due dates. We never take shortcuts. Allowing the team freedom to dedicate as much time as necessary to build the best product possible is one of the worthiest development lessons we have learned. Oddly enough we get things done pretty quickly. The stress of a deadline just clouds judgement. </p>

<p>Lastly, we live in an Open Source world. Read through other people’s code. We have learned so much by simply checking out random code from Github and reading through it. The more tricks you have in your bag the better.&nbsp; </p>

<p>&nbsp;</p>
			]]></content>
		</entry>
	
		<entry>
			<title>CodeIgniter 2.1.0 Belated Release Announcement</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/codeigniter_2.1.0_belated_release_announcement" />
			<id>tag:codeigniter.com,2011:news/15.17042</id>
			<published>2011-11-28T15:37:38Z</published>
			<updated>2011-11-28T09:40:40Z</updated>
			<author>
				<name>Phil Sturgeon</name>
				<uri>http://philsturgeon.co.uk/</uri>			</author>
		
			
		
			<content type="html"><![CDATA[
				<p>Since the announcement of CodeIgniter moving to GitHub three months ago at CICON2011 we’ve seen the <a href="http://codeigniter.com/news/amazing_progress_report_addition_of_irc_to_codeigniter.com">community thrive</a>. CodeIgniter quickly climbed the rankings on GitHub’s Most Watched PHP Projects page all the way up to 4th place at time of writing, we’ve had contributions from 77 developers, merged over 100 pull requests and we still have plenty more to go.</p>

<p>Instead of simply continuing the 2.0.x branch CodeIgniter is now on 2.1.x which not only signifies the impact of our contributions but reflects some bigger changes that have been added since the last version:</p>

<p>1. <a href="/user_guide/libraries/migration.html">Migrations</a> - version your database schema with simple up() and down() methods.<br />
2. PDO Database Driver - CodeIgniter now supports PDO which opens up the number of Database engines you can use significant.<br />
3. More PHP 5 syntax - since removing support for PHP 4 we’ve been deleting old PHP 4 code and replacing it with much quicker PHP 5 code.</p>

<p>These are a few of the largest changes but 2.1 brings a huge number of other changes which are all listed in the <a href="http://codeigniter.com/user_guide/changelog.html">changelog</a>.</p>

<p>With the move to Git and GitHub the EllisLab Team and the Engineers can support branches and multiple version management much easier. This means that while we work on fixing bugs in the stable 2.1 branch we can work on big new features such as HMVC and the integration of Sparks, along with some great ideas we’ll announce at a later date. All changes and bug fixes going into 2.1.x will be merged with 3.0 (the develop branch) as we go, so no work is being duplicated in development time. This simple means we need you to pick which branch to send your pull request to: bugs in 2.1 and new features in 3.0.</p>

<p>Other things waiting until the 3.0 release are the new User Guide and the change of license to OSL. These are some large changes which require time to finish up perfectly and the User Guide certainly is a work in progress. 3.0 will be a few months away so there is lots of time to get it perfect and you will all have a chance to help out on GitHub.</p>

<p>In the mean time we certainly suggest you upgrade. CodeIgniter 2.1 is a better, more stable, more useful version of 2.0 which should be perfectly compatible with your existing 2.0.x applications.</p>
			]]></content>
		</entry>
	
		<entry>
			<title>Get Ambassador</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/get_ambassador" />
			<id>tag:codeigniter.com,2011:news/15.16959</id>
			<published>2011-11-15T11:00:54Z</published>
			<updated>2011-11-15T09:30:55Z</updated>
			<author>
				<name>Marcus Neto</name>
				<uri>http://marcusneto.com</uri>			</author>
		
			
				<category term="Showcase"
					scheme="http://codeigniter.com/news/category/showcase"
					label="Showcase" />
			
		
			<content type="html"><![CDATA[
				<p>This showcase is with Nick Schwab the Technical Diplomat (CTO) for <a href="http://getambassador.com">GetAmbassador.com</a> a new Social Referral platform.</p>

<h3>What can you tell us about the team that built getambassador.com?</h3>

<p>We&#8217;re a team of 3 fresh out of the TechStars New York program - two web developers (myself and Cody Christian) building the platform while Jeff Epstein hustles on the business side. Cody and I each have over 7 years of PHP experience, 3 years of CodeIgniter experience, and have been building websites for over 10 years. In addition, Jeff and I both bring experience from capitalized exits from previous internet companies to the team.</p>

<p><a href="http://getambassador.com"><img src="http://codeigniter.com/files/ci_blog/getambassador.png" alt="Get Ambassador Website Screen Shot" width="320" style="float:right;margin:15px;" /></a></p>

<h3>What can you tell us about the site in general? What are the goals of the site and the main audience?</h3>

<p><a href="http://getambassador.com">Ambassador</a> is a social referral platform to allow any company to get more users by rewarding their existing ones for referring their friends. We realized that many companies have built the same basic referral architecture for their websites and we wanted to break the chain of repetition by building a simple SaaS platform which manages the architecture at large scale. Not only do we save companies time and money with our full-scale referral platform, but we also deliver insights into the referral behavior and true value of their customers through an elegant dashboard. Ambassador is free for consumers who want to create a profile of their favorite brands to start earning rewards and we offer a variety of service plans for businesses who want to use our platform to power their referral program.</p>

<h3>What was your major consideration in using CodeIgniter for this?</h3>

<p>We wanted a framework with great documentation and excellent modulation through the MVC approach. Naturally, CodeIgniter was a perfect fit. Additional factors included the liveliness of the CodeIgniter community (and some of the great 3rd party contributions they&#8217;ve made) and the framework&#8217;s support of custom libraries to allow us to easily build a version-controlled API.</p>

<h3>What is next on the plate for getambassador.com? Any additional functionality you can tell us about?</h3>

<p>We&#8217;re building more integrations into 3rd party applications to make it as easy as possible for companies to get started using our platform and we&#8217;re always building out more insights for companies so they can get a better look at the referral influence of their customers.</p>

<h3>Do you have any other information you&#8217;d like to share with the community? </h3>

<p>We&#8217;re hiring great developers to help us build out the platform and integrate with 3rd parties. If you&#8217;re a programming prodigy who likes to solve complex relational problems, we should chat.</p>

<h3>Tips from this project you&#8217;d like to share? Lessons you&#8217;ve learned? </h3>

<p>Leverage the community. There are excellent libraries contributed by some talented developers which allow you to build faster.<br />
Always build in modules. If (and when) the product changes, you&#8217;ll be thankful you did.<br />
Routes are your friend, especially when building a product with a versioned API.<br />
Iterate. Start with a proof of concept - a minimal viable product - and test your assumptions before building features you might not actually need.</p>

<p>&nbsp;</p>
			]]></content>
		</entry>
	
		<entry>
			<title>GoCart</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/gocart" />
			<id>tag:codeigniter.com,2011:news/15.16878</id>
			<published>2011-11-05T19:31:27Z</published>
			<updated>2011-12-05T14:38:28Z</updated>
			<author>
				<name>Marcus Neto</name>
				<uri>http://marcusneto.com</uri>			</author>
		
			
				<category term="Showcase"
					scheme="http://codeigniter.com/news/category/showcase"
					label="Showcase" />
			
		
			<content type="html"><![CDATA[
				<p>Every week we hear of really awesome places that CodeIgniter is being used. I want to start sharing those with the community-at-large. I will start by posting them here under a new Showcase Category with the hopes that any future revisions of CI.com will have a section for stuff like this. You guys and gals make some really cool stuff and deserve a platform to show it off. </p>

<p>So without further ado&#8230;</p>

<p>This showcase is an interview with Kyle Roseborrough about <a href="http://gocartdv.com/">GoCart</a></p>

<h3>What can you tell us about the GoCart team?</h3>
<p>We have  a pair of PHP developers who knew there was a better way to build a shopping cart. Noah (lead developer) has 6 years experience in PHP development and 4 years in CodeIgniter. Gabe has about 10 years experience in web application development.&nbsp; Kyle has been working in UI and management for 10 years.<br />
<a href="http://gocartdv.com/"><img src="http://codeigniter.com/files/ci_blog/gocart.png" alt="GoCart Website Screen Shot" width="320" style="float:right;margin:15px;" /></a></p>

<h3>What can we tell about the site in general?</h3>
<p><a href="http://gocartdv.com/">GoCartdv</a>.com was built to showcase <a href="http://gocartdv.com/">GoCart</a> and offer some basic information on the system.</p>

<h3>What are the goals of the site and the main audience?</h3>
<p>The main audience is CodeIgniter developers who are wanting a simple, scalable, CodeIgniter shopping cart. The goal is to get people involved in development to improve the cart and allow it to fully embody the goal of the project. To be easy to customize for developers and easy to use for end users/customers</p>

<h3>What was your major consideration in using CodeIgniter for this?</h3>
<p>CodeIgniter has great documentation and is easy to learn. We build lot of custom projects on CodeIgniter and it only made sense for us to build our cart on it. When looking for commerce solutions, we never found a suitable solution built on CodeIgniter so we decided to set out to do it on our own.</p>

<h3>What is next on the plate for GoCart?</h3>
<p>We really want GoCart to foster a great community of people contributing back to the roadmap and path the project will take. We want the focus to remain the same though &#8220;Easy to Customize, Easy to Use&#8221;. It would be great if we could get enough people using.</p>

<h3>Any additional functionality you can tell us about?</h3>
<p>Well, not really. GoCart is intended to be a shopping cart, plain and simple. It does have some basic page and banner management and a whole slew of cart related features, but ultimately it&#8217;s an ecommerce platform.</p>

<h3>Do you have any other information you&#8217;d like to share with the community?</h3>
<p>We built GoCart to be simple and scalable. As time goes on, we want the software to become easier and easier to use. We want GoCart to be scalable and to be able to work with new platforms as they come out. We feel that CodeIgniter and the CodeIgniter community is a huge benefit here. It enables developers to tie into a whole plethora of libraries, helpers and applications easily and support each other in the endeavor to make CodeIgniter better. Essentially, what&#8217;s good for CodeIgniter is good for GoCart.</p>

<h3>Tips from this project you&#8217;d like to share?</h3>
<p>If you really want something, do it yourself. If it doesn&#8217;t happen then you probably don&#8217;t want it as bad as you think.</p>

<h3>Lessons you&#8217;ve learned?</h3>
<p>- Not every idea is a good one. Generally you need someone else around to discuss ideas and methods with. Collaboration is the best way to build a good application. <br />
- No one knows what the next trend will be.&nbsp; Having a scalable platform that will adjust to a new set of tools and user demands is very important.</p>

<p><br />
If you have a project that you would like to see in our showcase <a href="mailto:marcus.neto@ellislab.com">email me</a></p>
			]]></content>
		</entry>
	
		<entry>
			<title>New User Guide in Development</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/new_user_guide_in_development" />
			<id>tag:codeigniter.com,2011:news/15.16646</id>
			<published>2011-10-05T19:23:01Z</published>
			<updated>2011-10-05T15:21:03Z</updated>
			<author>
				<name>Derek Jones</name>
				<uri>http://derekderekderek.com/</uri>			</author>
		
			
		
			<content type="html"><![CDATA[
				<p>We are happy to announce today that the user guide has had some significant improvements, and the first commit of these changes were just <a href="https://github.com/EllisLab/CodeIgniter/commit/8ede1a2ecbb62577afd32996956c5feaf7ddf9b6">pushed today</a>.</p>

<p>As many of you likely heard at CICON 2011, the Reactor team has had an internal project going on for some time to move the user guide to <a href="http://sphinx.pocoo.org/">Sphinx</a>.&nbsp; In addition to handling the tedium of generating page and document tables of contents, or maintaining internal links and references, the documentation is now easier to write, as you can simply focus on the content instead of markup and presentation.&nbsp; Don&#8217;t forget syntax highlighting of PHP, HTML, CSS, and JavaScript in code samples.&nbsp; Based on ReStructured Text, it&#8217;s also more human readable in a text editor than HTML is, which is likely where you spend most of your time.&nbsp; As an added benefit, Sphinx can output HTML, PDF, and even EPUB formats all from the same source files.&nbsp; We will likely be taking advantage of that at a later date.</p>

<p>But we didn&#8217;t stop there, we also enlisted the thunderous powers of EllisLab&#8217;s Chief Creative Officer, <a href="http://ellislab.com/company/team/james_mathias">James Mathias</a> for a style redesign.&nbsp; They are clean, easy to read, and beautiful.</p>

<p>Setting up your dev environment to work with Sphinx (if you want to render and output locally) is very easy, and takes about five minutes.&nbsp; For those that want to geek out, we have added a readme file to the user guide source folder so the step by step instructions are available <a href="https://github.com/EllisLab/CodeIgniter/tree/develop/user_guide_src">right from GitHub</a>.</p>

<p>Today marks the first commit with the new user guide to the unreleased develop branch, so you may encounter some bumps.&nbsp; Most notably are the code blocks, which pandoc lost our line breaks on, and some navigation issues as we experiment with different table of contents presentation and depth.&nbsp; We&#8217;ll be cleaning these up prior to the next release (much is as simple as some line breaks and tabs), but feel free to pitch in and submit some pull requests if you see anything out of whack.</p>

<p>And lastly, for the first time ever, we have <a href="http://codeigniter.com/nightly_user_guide/">live nightly builds of documentation</a> for the develop branch available at the CodeIgniter web site.&nbsp; Enjoy!</p>
			]]></content>
		</entry>
	
		<entry>
			<title>Upcoming Site Downtime</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/upcoming_site_downtime" />
			<id>tag:codeigniter.com,2011:news/15.16553</id>
			<published>2011-09-21T16:17:43Z</published>
			<updated>2011-09-21T10:17:44Z</updated>
			<author>
				<name>Derek Jones</name>
				<uri>http://derekderekderek.com/</uri>			</author>
		
			
		
			<content type="html"><![CDATA[
				<p>The EllisLab family of sites (<a href="http://expressionengine.com/">ExpressionEngine.com</a>, <a href="http://codeigniter.com/">CodeIgniter.com</a>, <a href="http://mojomotor.com/">MojoMotor.com</a>, and <a href="http://ellislab.com/">EllisLab.com</a>) will be down for scheduled maintenance on Thursday, September 22, 2011 beginning at approximately 10-11pm Eastern and lasting a number of hours. Access to critical resources such as the store, your product downloads, and documentation will be unaffected.</p>
			]]></content>
		</entry>
	
		<entry>
			<title>Contribution Guide</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/contribution_guide" />
			<id>tag:codeigniter.com,2011:news/15.16481</id>
			<published>2011-09-06T13:36:15Z</published>
			<updated>2011-09-06T07:46:16Z</updated>
			<author>
				<name>Phil Sturgeon</name>
				<uri>http://philsturgeon.co.uk/</uri>			</author>
		
			
		
			<content type="html"><![CDATA[
				<p>CodeIgniter is a community driven project and accepts contributions of code and documentation from the community. These contributions are made in the form of Issues or <a href="http://help.github.com/send-pull-requests/">Pull Requests</a> on the EllisLab <a href="https://github.com/EllisLab/CodeIgniter">CodeIgniter repository</a> on GitHub.</p>

<p>Issues are a quick way to point out a bug. If you find a bug or documentation error in CodeIgniter then please check a few things first:</p>

<ul>
&nbsp;   <li>There is not already an open Issue</li>
&nbsp;   <li>The issue has already been fixed (check the develop branch, or look for closed Issues)</li>
&nbsp;   <li>Is it something really obvious that you fix it yourself?</li>
</ul>

<p>Reporting issues is helpful but an even better approach is to send a Pull Request, which is done by “Forking” the main repository and committing to your own copy. This will require you to use the version control system called <a href="http://git-scm.com/">Git</a>.</p>

<h4>Guidelines</h4>

<p>Before we look into how, here are the guidelines. If your Pull Requests fail to pass these guidelines it will be declined and you will need to re-submit when you’ve made the changes. This might sound a bit tough, but it is required for us to maintain quality of the code-base.</p>

<p><strong>PHP Style:</strong> All code must meet the <a href="http://codeigniter.com/user_guide/general/styleguide.html">Style Guide</a>, which is essentially the <a href="http://en.wikipedia.org/wiki/Indent_style#Allman_style">Allman indent style</a>, underscores and readable operators. This makes certain that all code is the same format as the existing code and means it will be as readable as possible.</p>

<p><strong>Documentation:</strong> If you change anything that requires a change to documentation then you will need to add it. New classes, methods, parameters, changing default values, etc are all things that will require a change to documentation. The change-log must also be updated for every change. Also PHPDoc blocks must be maintained.</p>

<p><strong>Compatibility:</strong> CodeIgniter is compatible with PHP 5.1.6 so all code supplied must stick to this requirement. If PHP 5.2 or 5.3 functions or features are used then there must be a fallback for PHP 5.1.6.</p>

<p><strong>Branching:</strong> CodeIgniter uses the <a href="http://nvie.com/posts/a-successful-git-branching-model/">Git-Flow</a> branching model which requires all pull requests to be sent to the &#8220;develop&#8221; branch. This is where the next planned version will be developed. The &#8220;master&#8221; branch will always contain the latest stable version and is kept clean so a &#8220;hotfix&#8221; (e.g: an emergency security patch) can be applied to master to create a new version, without worrying about other features holding it up. For this reason all commits need to be made to &#8220;develop&#8221; and any sent to &#8220;master&#8221; will be closed automatically. If you have multiple changes to submit, please place all changes into their own branch on your fork.</p>

<p><strong>One thing at a time:</strong> A pull request should only contain one change. That does not mean only one commit, but one change - however many commits it took. The reason for this is that if you change X and Y but send a pull request for both at the same time, we might really want X but disagree with Y, meaning we cannot merge the request. Using the Git-Flow branching model you can create new branches for both of these features and send two requests.</p>

<h4>How-to Guide</h4>

<p>There are two ways to make changes, the easy way and the hard way. Either way you will need to <a href="https://github.com/signup/free">create a GitHub account</a>.</p>

<h5>Easy way</h5>

<p>GitHub allows in-line editing of files for making simple typo changes and quick-fixes. This is not the best way as you are unable to test the code works. If you do this you could be introducing syntax errors, etc, but for a Git-phobic user this is good for a quick-fix.</p>

<h5>Hard way</h5>

<p>The best way to contribute is to &#8220;clone&#8221; your fork of CodeIgniter to your development area. That sounds like some jargon, but &#8220;forking&#8221; on GitHub means &#8220;making a copy of that repo to your account&#8221; and &#8220;cloning&#8221; means &#8220;copying that code to your environment so you can work on it&#8221;.</p>

<ol>
	<li>Set up Git (<a href="http://help.github.com/win-set-up-git/">Windows</a>, <a href="http://help.github.com/mac-set-up-git/">Mac</a> &amp; <a href="http://help.github.com/linux-set-up-git/">Linux</a>)</li>
	<li><a href="https://github.com/EllisLab/CodeIgniter">Go to the CodeIgniter repo</a></li>
	<li><a href="http://help.github.com/fork-a-repo/">Fork it</a></li>
	<li>Clone your CodeIgniter repo: git@github.com:&lt;your-name&gt;/CodeIgniter.git</li>
	<li>Checkout the &#8220;develop&#8221; branch
		At this point you are ready to start making changes. Fix existing bugs on the Issue tracker after taking a look to see nobody else is working on them.
	</li>

	<li>Commit the files</li>
	<li>Push your develop branch to your fork</li>
	<li>Send a pull request <a href="http://help.github.com/send-pull-requests/">http://help.github.com/send-pull-requests/</a></li>
</ol>

<p>The Reactor Engineers will now be alerted about the change and at least one of the team will respond. If your change fails to meet the guidelines it will be bounced, or feedback will be provided to help you improve it.</p>

<p>Once the Reactor Engineer handling your pull request is happy with it they will post it to the internal EllisLab discussion area to be double checked by the other Engineers and EllisLab developers. If nobody has a problem with the change then it will be merged into develop and will be part of the next release.</p>

<h4>Keeping your fork up-to-date</h4>

<p>Unlike systems like <a href="http://subversion.tigris.org/">Subversion</a>, Git can have multiple remotes. A remote is the name for a URL of a Git repository. By default your fork will have a remote named &#8220;origin&#8221; which points to your fork, but you can add another remote named &#8220;codeigniter&#8221; which points to git://github.com/EllisLab/CodeIgniter.git. This is a read-only remote but you can pull from this develop branch to update your own.</p>

<p>If you are using command-line you can do the following:</p>

<blockquote><p>git remote add codeigniter git://github.com/EllisLab/CodeIgniter.git<br /><br />
git pull codeigniter develop <br /><br />
git push origin develop</p>
</blockquote>

<p>Now your fork is up to date. This should be done regularly, or before you send a pull request at least.</p>

<p><span style="font-size:11px;">[<em>Editor&#8217;s note:</em> This article will be added to the User Guide]</span></p>
			]]></content>
		</entry>
	
		<entry>
			<title>Amazing Progress Report &amp;amp; Addition of IRC to CodeIgniter.com</title>
			<link rel="alternate" type="text/html" href="http://codeigniter.com/news/amazing_progress_report_addition_of_irc_to_codeigniter.com" />
			<id>tag:codeigniter.com,2011:news/15.16468</id>
			<published>2011-08-31T20:29:25Z</published>
			<updated>2011-08-31T14:34:26Z</updated>
			<author>
				<name>Derek Jones</name>
				<uri>http://derekderekderek.com/</uri>			</author>
		
			
		
			<content type="html"><![CDATA[
				<p>In less than two weeks since the announcement was made at CICON that CodeIgniter was <a href="https://github.com/EllisLab/CodeIgniter">moving to GitHub</a>, we&#8217;ve seen some incredible results from the change.&nbsp; Already CodeIgniter is the 10th <a href="https://github.com/languages/PHP/most_watched">most watched PHP project</a> at GitHub (currently 758), with 42 open pull requests, 53 merged pull requests, 170 forks, and 41 individual contributors.&nbsp; Incredible!</p>

<p>Behind the scenes, the Reactor engineers and the EllisLab team are regularly conversing about potential changes, and working jointly on larger more sprawling projects like converting the userguide to Sphinx, and getting things ready for the inclusion of Sparks.</p>

<p>We also noticed what seemed to be a spike in activity on the #CodeIgniter Freenode IRC channel, so we&#8217;ve decided to make it more prominent to encourage its continued use.&nbsp; You&#8217;ll now notice an IRC tab in the main navigation, letting you access the <a href="http://codeigniter.com/irc/">#CodeIgniter IRC channel</a> right here at CodeIgniter.com.</p>

<p>Join in the discussions, and if you haven&#8217;t already, start watching the <a href="https://github.com/EllisLab/CodeIgniter">CodeIgniter repo at GitHub</a>, contributing, and even just commenting on people&#8217;s requests or engaging in peer code review.&nbsp; With our community&#8217;s energy, I think we might even eclipse some of the larger PHP projects at GitHub!&nbsp; You all are awesome, and we thank you.</p>
			]]></content>
		</entry>
	

</feed>
