<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code Fury &#187; Uncategorized</title>
	<atom:link href="http://codefury.net/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://codefury.net</link>
	<description>One programmer's formatted output stream</description>
	<lastBuildDate>Sat, 31 Dec 2011 22:20:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>The Top 10 CodeIgniter Sparks of 2011</title>
		<link>http://codefury.net/2011/12/top-10-codeigniter-sparks-of-2011/</link>
		<comments>http://codefury.net/2011/12/top-10-codeigniter-sparks-of-2011/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 22:15:08 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=487</guid>
		<description><![CDATA[John Crepezzi and I launched GetSparks.org (the CodeIgniter package manager and repository) a little under a year ago, and the response we received from the community was overwhelmingly positive. The best part of GetSparks isn&#8217;t the site itself. It&#8217;s a moderately simple app that provides a vehicle for quickly dropping other developers&#8217; code in your [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2011%2F12%2Ftop-10-codeigniter-sparks-of-2011%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2011%2F12%2Ftop-10-codeigniter-sparks-of-2011%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://seejohncode.com" target="_blank">John Crepezzi </a>and I launched <a href="http://getsparks.org">GetSparks.org</a> (the CodeIgniter package manager and repository) a little under a year ago, and the response we received from the community was overwhelmingly positive.</p>
<p>The best part of GetSparks isn&#8217;t the site itself. It&#8217;s a moderately simple app that provides a vehicle for quickly dropping other developers&#8217; code in your codebase.</p>
<p>Many of the packages on GetSparks are very well maintained. I am <strong>continually</strong> impressed by the amount of effort spark developers pour into their submissions when I peruse the site and try new packages out. One example would be <a href="http://wanwizard.eu/" target="_blank">WanWizard</a>&#8216;s <a title="DataMapper-ORM" href="http://getsparks.org/packages/DataMapper-ORM/versions/HEAD/show" target="_blank">DataMapper-ORM</a>: Look at how well thought out it is, and <a href="http://datamapper.wanwizard.eu/pages/requirements.html" target="_blank">how detailed the docs are</a>.</p>
<p>Another would be codeigniter-payments. I rolled in to the second day of CICon 2011 NYC to find @<a href="http://www.calvinfroedge.com" target="_blank">calvinfroedge</a> talking about a new payment spark he had made — <a href="http://getsparks.org/packages/codeigniter-payments/versions/HEAD/show" target="_blank">one of the most in-depth, flexible payment libs</a> I&#8217;ve ever seen.</p>
<p>GetSparks has almost clocked 50,000 package downloads at this point, but there are handful of sparks that have really stood out in terms of popularity. They are the year&#8217;s top 10:</p>
<table>
<tbody>
<tr>
<td>name</td>
<td>contributor</td>
<td>installs</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/php-activerecord/versions/HEAD/show">php-activerecord</a></td>
<td>machuga</td>
<td>1806</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/curl/versions/HEAD/show">curl</a></td>
<td>philsturgeon</td>
<td>1361</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/template/versions/HEAD/show">template</a></td>
<td>philsturgeon</td>
<td>1010</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/ion_auth/versions/HEAD/show">ion_auth</a></td>
<td>benedmunds</td>
<td>990</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/restclient/versions/HEAD/show">restclient</a></td>
<td>philsturgeon</td>
<td>931</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/DataMapper-ORM/versions/HEAD/show">DataMapper-ORM</a></td>
<td>WanWizard</td>
<td>748</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/gravatar_helper/versions/HEAD/show">gravatar_helper</a></td>
<td>seejohnrun</td>
<td>688</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/assets/versions/HEAD/show">assets</a></td>
<td>bstrahija</td>
<td>636</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/fire_log/versions/HEAD/show">fire_log</a></td>
<td>dperrymorrow</td>
<td>623</td>
</tr>
<tr>
<td><a href="http://getsparks.org/packages/markdown/versions/HEAD/show">markdown</a></td>
<td>katzgrau</td>
<td>622</td>
</tr>
</tbody>
</table>
<p>And of course, there are people whose contributions have made GetSparks.org the success it is. A special thanks goes out to:</p>
<ul>
<li>Beau Frusetta — First team member (retired), and the guy who made GetSparks look halfway decent</li>
<li>Mike Pauley — Team member</li>
<li>Sean Downey — Team member</li>
<li>Joe Auty — Team member</li>
<li>Jake Ingman — Who made us a sweet logo</li>
<li>Joel Cox — For some fine features and great sparks</li>
<li>Balsamiq — Who donated a copy of their mockup software</li>
<li>Spicer Matthews of CloudManic, who contributed the &#8220;forking&#8221; feature (which I have big plans for)</li>
</ul>
<p>Happy New Year everyone. Keep up the awesome work, and keep knocking out those timeshanks when developing a new app with new sparks (things like payments, emailing, auth, assets, etc).</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2011/12/top-10-codeigniter-sparks-of-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Video: chip — A Log File Monitor &amp; Multiplexer</title>
		<link>http://codefury.net/2011/04/video-chip-a-log-file-monitor-multiplexer/</link>
		<comments>http://codefury.net/2011/04/video-chip-a-log-file-monitor-multiplexer/#comments</comments>
		<pubDate>Wed, 27 Apr 2011 12:09:12 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=424</guid>
		<description><![CDATA[If you&#8217;ve ever had the need to investigate production issues in a load-balanced setup, you&#8217;d know why having a tool to pull down all of your remote log files into a single filtered stream can be handy. I think splunk is great at this, but in many cases, overkill. I wrote chip to accommodate this [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2011%2F04%2Fvideo-chip-a-log-file-monitor-multiplexer%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2011%2F04%2Fvideo-chip-a-log-file-monitor-multiplexer%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you&#8217;ve ever had the need to investigate production issues in a load-balanced setup, you&#8217;d know why having a tool to pull down all of your remote log files into a single filtered stream can be handy. I think <a title="splunk" href="http://splunk.com" target="_blank">splunk</a> is great at this, but in many cases, overkill.</p>
<p><strong>I wrote <a  target="_blank" href="http://github.com/katzgrau/chip">chip</a> to accommodate this demanding use case:</strong></p>
<p><em>I have n production servers. From my local machine, I want to view the web application logs across those servers on a single terminal, while highlighting error lines in red. Additionally, I want those errors emailed to me.</em></p>
<p>That&#8217;s what chip does. It&#8217;s a powerful log file monitor (like swatch) and multiplexer. That is, it combines local or remote logs into one stream that you can see. Watch the screencast:</p>
<p><iframe src="http://www.screenr.com/embed/kDi" width="500" height="305" frameborder="0"></iframe></p>
<p>A full description of what chip can do is at the <a  target="_blank"  href="https://github.com/katzgrau/chip">github project page</a>, but the gist is:</p>
<blockquote><p><code>chip</code> starts up and tries to open log file(s), either local or remote. If one isn&#8217;t specified, it reads from standard input. It goes through each line looking for patterns that <em>you</em> have specified as arguments. When it finds a match, chip does whatever you told it to do with that match.</p></blockquote>
<p>I use chip daily to watch production logs. When I&#8217;m investigating issues, I set up an additional pattern and handler to send certain log lines to my inbox. Just think: An instant monitor set up to watch all of your production logs while you do more important things. Useful for just tailing logs, splitting them, colorizing them, monitoring them, or any combination of the above. You can also use it as a more flexible alternative to `tee` when piping in input.</p>
<p>Anyway, now I can get back to working on the <a target="_blank" href="http://getsparks.org">GetSparks.org</a> project <img src='http://codefury.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><code>chip</code> is still technically a beta, but has been stable throughout my use of it. Check out chip at <a  target="_blank"  href="https://github.com/katzgrau/chip">https://github.com/katzgrau/chip</a>.</p>
<p><em>On Twitter, I&#8217;m <a  target="_blank"  href="http://twitter.com/_kennyk_">@_kennyk_</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2011/04/video-chip-a-log-file-monitor-multiplexer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Video: How GetSparks.org Uses CodeIgniter Sparks</title>
		<link>http://codefury.net/2011/03/video-how-getsparks-org-uses-codeigniter-sparks/</link>
		<comments>http://codefury.net/2011/03/video-how-getsparks-org-uses-codeigniter-sparks/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 13:54:40 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=402</guid>
		<description><![CDATA[If you aren&#8217;t already familiar, a package manager and repository for CodeIgniter libraries was released last week at GetSparks.org. In the few days between then and now, some very interesting and useful packages have been submitted. There&#8217;s one for combining, minifying and caching assets, one for database scaffolding, viewing logs, geocoding, template-ing, etc. Here&#8217;s a [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2011%2F03%2Fvideo-how-getsparks-org-uses-codeigniter-sparks%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2011%2F03%2Fvideo-how-getsparks-org-uses-codeigniter-sparks%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you aren&#8217;t already familiar, a package manager and repository for CodeIgniter libraries was released last week at GetSparks.org. In the few days between then and now, some <em>very</em> interesting and useful packages have been submitted. There&#8217;s one for combining, minifying and caching assets, one for database scaffolding, viewing logs, geocoding, template-ing, etc.</p>
<p>Here&#8217;s a short screencast that shows how GetSparks.org has already started using some of these sparks in its own development.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="345" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="flashvars" value="i=181605" /><param name="allowFullScreen" value="true" /><param name="src" value="http://screenr.com/Content/assets/screenr_1116090935.swf" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="540" height="333" src="http://screenr.com/Content/assets/screenr_1116090935.swf" allowfullscreen="true" flashvars="i=181605"></embed></object></p>
<p>If you&#8217;re interested in the project, follow it at <a href="http://twitter.com/getsparks">twitter.com/getsparks</a>. If you&#8217;re a developer and you&#8217;re interested in following or helping out with development, head to the github repository over at <a href="http://github.com/katzgrau/getsparks.org">http://github.com/katzgrau/getsparks.org</a>.</p>
<p>As always, if you&#8217;d like to join the project, find me at: katzgrau@gmail.com.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2011/03/video-how-getsparks-org-uses-codeigniter-sparks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Introducing CodeIgniter Sparks</title>
		<link>http://codefury.net/2011/03/introducing-codeigniter-sparks/</link>
		<comments>http://codefury.net/2011/03/introducing-codeigniter-sparks/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 04:24:48 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=394</guid>
		<description><![CDATA[If you&#8217;re familiar with package management, you&#8217;re aware of how awesome it can be. Yum, Apt, MacPorts, homebrew are examples of package managers on the Operating System level. Need to install some common software package like mysql? On OSX, it isn&#8217;t any harder than: $ brew install mysql For software development, you have Python&#8217;s eggs [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2011%2F03%2Fintroducing-codeigniter-sparks%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2011%2F03%2Fintroducing-codeigniter-sparks%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>If you&#8217;re familiar with package management, you&#8217;re aware of how awesome it can be. Yum, Apt, MacPorts, homebrew are examples of package managers on the Operating System level. Need to install some common software package like mysql? On OSX, it isn&#8217;t any harder than:</p>
<pre>$ brew install mysql
</pre>
<p>For software development, you have Python&#8217;s eggs and Rails&#8217; gems, which each work a bit differently, but generally achieve a solution to a big problem: Using, installing, and contributing other developers&#8217; libraries should be easy.</p>
<p>So if you&#8217;re a CodeIgniter developer, picture this common scenario: You need a library to interact with Amazon&#8217;s new Simple Email Service, but you know someone out there must have already written one. You end up on some guy&#8217;s blog, and it looks like he has a working library. You copy/paste, download, whatever.</p>
<p>Maybe the lib was written to work with CodeIgniter, or maybe it&#8217;s just a general PHP lib. Maybe it works, maybe it doesn&#8217;t. Maybe it has solid documentation, maybe it doesn&#8217;t. If it&#8217;s not to your liking, back to Google you go, and search for something else. This is all time-consuming.</p>
<p>As of today, this problem is solved for CodeIgniter. It&#8217;s called CodeIgniter Sparks, and you can read all about it at <a href="http://getsparks.org">http://getsparks.org</a>.</p>
<p>CodeIgniter &#8220;Sparks&#8221; is still in an alpha state at the time of this writing, but it&#8217;s planned to be a full package manager for CodeIgniter applications. You can install it by using a <a href="http://getsparks.org/install">one-liner</a>.</p>
<p>Thanks to some early contributions, you can now <a href="http://getsparks.org/packages/amazon-ses/versions/HEAD/show">get some Amazon SES</a> functionality by:</p>
<pre>$ php tools/spark install amazon-ses</pre>
<p>And <a href="http://en.wikipedia.org/wiki/NBA_Jam">boom-shakalaka</a>! It&#8217;s installed in your application. A special thanks to <a href="http://joelcox.nl/">Joël Cox</a> for that one.</p>
<p><a href="http://philsturgeon.co.uk/">Phil Sturgeon</a> and <a href="http://dhorrigan.com/">Dan Horrigan</a> each came through with their respective &#8216;<a href="http://getsparks.org/packages/template/versions/HEAD/show">template</a>&#8216; and &#8216;<a href="http://getsparks.org/packages/tags/versions/HEAD/show">tag</a>&#8216; packages.</p>
<p>It&#8217;s still very early in the project&#8217;s lifetime, but I don&#8217;t think its too early to say that this could be very beneficial to the frameworks as a whole. As I put in the &#8220;GetSparks.org Manifesto&#8221;:</p>
<blockquote>
<ol>
<li>There are plenty of feature requests for CodeIgniter, especially when it             comes to libraries. 99% of the suggested libraries don&#8217;t belong             built-in to the framework. We hope that Sparks helps keep CodeIgniter             one of the lightest, fastest frameworks for PHP.</li>
<li>Some fantastic and useful libraries have been written             for CodeIgniter, but they remain scattered around the internet on blogs,             wikis, forums, and github. Using these in your projects is a chore             of copy and paste.</li>
<li>When you&#8217;re thinking of using someone else&#8217;s code, there isn&#8217;t much             of a way to gauge whether it&#8217;s ready for the big-time. Is it fault             tolerant? Unit tested? Relatively recent?</li>
<li><strong>Most importantly:</strong> CodeIgniter developers don&#8217;t have             an easy way to share their code and contribute extensions to CodeIgniter             functionality.</li>
</ol>
</blockquote>
<p>It all comes down to making code easier to use and share among CodeIgniter developers.</p>
<p>If you&#8217;re interested in helping out on the project, reach out to <a href="mailto:team@getsparks.org">team@getsparks.org</a>. Right now, the team consists of me, <a href="http://johncrepezzi.com">John</a>, <a href="http://beau.frusetta.com/">Beau</a>, and <a href="http://twitter.com/mdpauley">Mike</a>. If you just want to follow along, check out <a href="http://github.com/katzgrau/getsparks.org">http://github.com/katzgrau/getsparks.org</a>. I&#8217;ve already received a ton of feedback, and it&#8217;s <em><strong>all</strong></em> appreciated.</p>
<p>PS: John and I put together a podcast explaining <a href="http://oconf.org/">why we thought all this was needed by CI</a> a couple weeks ago. Check it out!</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2011/03/introducing-codeigniter-sparks/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>List Your GitHub and BitBucket Projects On WordPress</title>
		<link>http://codefury.net/2011/02/list-your-github-and-bitbucket-projects-on-wordpress/</link>
		<comments>http://codefury.net/2011/02/list-your-github-and-bitbucket-projects-on-wordpress/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 14:00:08 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=375</guid>
		<description><![CDATA[Over the weekend I put a full day into creating and completing a WordPress plugin that probably doesn&#8217;t appeal to anybody except for developers: A tool to list your github and bitbucket projects right inside a post or on your side bar. You can see it in action on my projects page. Basically, I was [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2011%2F02%2Flist-your-github-and-bitbucket-projects-on-wordpress%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2011%2F02%2Flist-your-github-and-bitbucket-projects-on-wordpress%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Over the weekend I put a full day into creating and completing a WordPress plugin that probably doesn&#8217;t appeal to anybody except for developers: <a href="http://wordpress.org/extend/plugins/github-bitbucket-project-lister/">A tool to list your github and bitbucket projects right inside a post or on your side bar</a>.</p>
<p>You can see it in action on my projects page.</p>
<p>Basically, I was tired of updating my long-obsolete project list. These days, everything I do is kept on a publicly-hosted repository anyway, so why not pull my project info from those places so it updates automatically?</p>
<p>The plugin is simple to use. Just insert something like:</p>
<pre>
&#123;&#123;github:katzgrau&#125;&#125;
</pre>
<p>In your post or page where you want the list. Here&#8217;s a real-life example of the output:</p>
<p><ul><li>
    <h4>
        <a href="https://github.com/katzgrau/KLogger">
            KLogger — 87 following
        </a>
    </h4>
    <p>A Simple Logging Class For PHP</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/ajax-proxy">
            ajax-proxy — 5 following
        </a>
    </h4>
    <p>An easy-to-use PHP ajax proxy class and script for facilitating cross-domain ajax calls which supports cookies and has minimal dependencies (doesn't need curl)</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/WP-Easy-Cache">
            WP-Easy-Cache — 1 following
        </a>
    </h4>
    <p>A PHP class for easily caching data programmatically in WordPress. Oriented for develeopers pulling Twitter feeds, etc. A nice alternative to the weak built-in cache functions.</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/ci-robot-helper">
            ci-robot-helper — 5 following
        </a>
    </h4>
    <p>A spark that can be used to generate questions and answers to avoid robot form submissions</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/wordpress-github">
            wordpress-github — 21 following
        </a>
    </h4>
    <p>List your github and bitbucket projects on your WordPress blog really, really easily. Why? Because you're a baller.</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/getsparks.org">
            getsparks.org — 74 following
        </a>
    </h4>
    <p>getsparks.org - The CodeIgniter Package Managment Repository</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/spark-sdk">
            spark-sdk — 5 following
        </a>
    </h4>
    <p>A CodeIgniter Spark to assist in developing and validating new sparks.</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/chip">
            chip — 57 following
        </a>
    </h4>
    <p>A log file multiplexer and monitor. Tail multiple remote or local log files, set actions, and more. A friend to every developer and system admin. Alpha.</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/boomcalc">
            boomcalc — 1 following
        </a>
    </h4>
    <p>A jQuery plugin that renders a usable calculator in a DOM element.</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/notes">
            notes — 1 following
        </a>
    </h4>
    <p>An open-source multi-user website building application</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/access">
            access — 6 following
        </a>
    </h4>
    <p>A CodeIgniter Spark for easily protecting all or part of your site with HTTP Auth prompts</p>
</li>

<li>
    <h4>
        <a href="https://github.com/katzgrau/codeigniter-amazon-ses">
            codeigniter-amazon-ses — 2 following
        </a>
    </h4>
    <p>A CodeIgniter library to interact with Amazon Web Services (AWS) Simple Email Service (SES)</p>
</li>

</ul></p>
<p>I use BitBucket for CodeIgniter-related projects, and GitHub for pretty much everything else. So on my project page, I actually do:</p>
<pre>
&#123;&#123;github:katzgrau,bitbucket:katzgrau,sortby:watchers,sortdir:desc&#125;&#125;
</pre>
<p>Which pulls projects from both github and bitbucket, combines them, sorts them, and displays a list. A widget which comes with the plugin will do the same thing if you just want to list projects in your sidebar.</p>
<p>Anyway, check it out. You can find it in the WP admin plugin panel by searching for &#8216;GitHub&#8217;. Then just look for the &#8216;<a href="http://wordpress.org/extend/plugins/github-bitbucket-project-lister/">GitHub and BitBucket Project Lister</a>&#8216;. You can find the github repo (where it&#8217;s developed) here: <a href="https://github.com/katzgrau/wordpress-github">https://github.com/katzgrau/wordpress-github</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2011/02/list-your-github-and-bitbucket-projects-on-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social Networking, Mang. It&#8217;s Like the Internet All Over Again.</title>
		<link>http://codefury.net/2010/11/social-networking-mang-its-like-the-internet-all-over-again/</link>
		<comments>http://codefury.net/2010/11/social-networking-mang-its-like-the-internet-all-over-again/#comments</comments>
		<pubDate>Sat, 13 Nov 2010 00:18:21 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=275</guid>
		<description><![CDATA[Brief but intense &#8220;holy shit&#8221; moments have been hitting me quite a bit in the last couple weeks. For the last 5 years, my social networking experience has largely consisted of Facebook, and I took it for granted as an application that was just really good at what it did. Maybe that&#8217;s even what Zuck [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2010%2F11%2Fsocial-networking-mang-its-like-the-internet-all-over-again%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2010%2F11%2Fsocial-networking-mang-its-like-the-internet-all-over-again%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Brief but intense &#8220;holy shit&#8221; moments have been hitting me quite a bit in the last couple weeks. For the last 5 years, my social networking experience has largely consisted of Facebook, and I took it for granted as an application that was just really good at what it did.</p>
<p>Maybe that&#8217;s even what Zuck thought. (Hey Zuckerberg, comment on my blog whydontcha. I&#8217;m having convulsions here.)</p>
<p>I have often wished I was twenty-something in 1995, prime for the internet boom. But in 1995, would I have recognized what was taking place? Would I have realized the extensive impact the internet would have on my life and on human history? I don&#8217;t know.</p>
<p>But I&#8217;m twenty something now, and I think it&#8217;s happening again. Something incredibly profound is happening, and it will affect us forever. It won&#8217;t just affect your life online. People will inevitably be 100% connected to this vast social grid, because <em>they want to be</em>.</p>
<p>I am guilty of drinking way too much soda + coffee and getting delusional later in the day, but I don&#8217;t think I&#8217;m blowing this out of proportion. I&#8217;m almost dizzy from thinking about it.</p>
<p>Some questions that are cropping up in my mind include:</p>
<ol>
<li>How will Facebook and other social networks become even more real-time?</li>
<li>How will desktop-based social browsers like RockMelt fair? Don&#8217;t RockMelt&#8217;s social extensions essentially do what Facebook&#8217;s more portable Apps can already do if they wanted to? If desktop social browsers prevail, why did they?</li>
<li>How many investors invest in social apps because they think anything social will make money, and not because they understand the insanity of it all?</li>
<li>What is sum of it all? Where is all this stuff leading us? Social networking is surely not the terminus. There&#8217;s a crazy future ahead of us.</li>
</ol>
<p>That&#8217;s all for now. Comment if you think I&#8217;m all wrong, or you have some answers for those questions. @seejohnrun? @johnbellone?</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2010/11/social-networking-mang-its-like-the-internet-all-over-again/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WPSearch 2 To Be Released At WordCamp!</title>
		<link>http://codefury.net/2010/10/wpsearch-2-to-be-released-at-wordcamp-nyc/</link>
		<comments>http://codefury.net/2010/10/wpsearch-2-to-be-released-at-wordcamp-nyc/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 13:02:59 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=251</guid>
		<description><![CDATA[After almost two years since the last major release of WPSearch, WPSearch 2 will be released this weekend at Wordcamp NYC. WPSearch 2 has been the highest rated search plug-in in the WordPress repository, with much thanks to the bug reporters, testers, and donations along the way. WPSearch 2 was built for WordPress 3, and [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2010%2F10%2Fwpsearch-2-to-be-released-at-wordcamp-nyc%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2010%2F10%2Fwpsearch-2-to-be-released-at-wordcamp-nyc%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>After almost two years since the last major release of WPSearch, <a href="http://2010.nyc.wordcamp.org/speakers/">WPSearch 2 will be released this weekend at Wordcamp NYC.</a></p>
<p>WPSearch 2 has been the highest rated search plug-in in the WordPress repository, with much thanks to the bug reporters, testers, and donations along the way.</p>
<p><a title="WordCampNYC – Oct 16-17" href="http://2010.nyc.wordcamp.org"><img class="alignright" src="http://2010.nyc.wordcamp.org/files/2010/10/2010wcny-speaking250.jpg" alt="WordCampNYC – Oct 16-17" width="250" height="250" /></a></p>
<p>WPSearch 2 was built for WordPress 3, and features:</p>
<ul>
<li>A COMPLETELY rewritten codebase</li>
<li>An in-page progress bar for index builds</li>
<li>Verbose logging for troubleshooting</li>
<li>A &#8216;test&#8217; mechanism that tells you exactly what things you still need to do to run WPSearch (like changing file permissions, and other things like that).</li>
<li>An engine that can handle close to 10,000 posts</li>
<li>The one and only word-stemming analyzer for Zend Lucene</li>
</ul>
<p>I&#8217;ll be presenting this with <a href="http://www.johncrepezzi.com/">John Crepezzi</a>, co-founder of our company, <a href="http://oconf.org">OConf</a>. <strong>We&#8217;ll be discussing why the WordPress search is lacking by default, the effect it has on the monetization of your site, and the new release of WPSearch.</strong></p>
<p>We&#8217;ll also mention a premium version of WPSearch, which can <strong>handle up to 500,000 posts</strong>, but uses a proprietary back-end driver.</p>
<p>Come check us out! If you have any questions, drop a comment!</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2010/10/wpsearch-2-to-be-released-at-wordcamp-nyc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Easy Reverse Routing with CodeIgniter</title>
		<link>http://codefury.net/2010/09/easy-reverse-routing-with-codeigniter/</link>
		<comments>http://codefury.net/2010/09/easy-reverse-routing-with-codeigniter/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 13:31:07 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=241</guid>
		<description><![CDATA[I really can&#8217;t stand hard-coding URLs in the views or controllers of my application &#8212; and I&#8217;m sure most other people can&#8217;t either. Here&#8217;s an extension for the CodeIgniter Router class that I wrote that gives you a nice way to write routes that are reversible and also have the ability to take parameters. &#60;?php [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2010%2F09%2Feasy-reverse-routing-with-codeigniter%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2010%2F09%2Feasy-reverse-routing-with-codeigniter%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I really can&#8217;t stand hard-coding URLs in the views or controllers of my application &#8212; and I&#8217;m sure most other people can&#8217;t either. Here&#8217;s an extension for the CodeIgniter Router class that I wrote that gives you a nice way to write routes that are reversible and also have the ability to take parameters.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> MY_Router <span style="color: #000000; font-weight: bold;">extends</span> CI_Router
<span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$_reverseRoutes</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">CONST</span> ARR_ROUTE_POS      <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">CONST</span> ARR_ROUTE_NAME_POS <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> _parse_routes<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// Do we even have any custom routing to deal with?</span>
		<span style="color: #666666; font-style: italic;">// There is a default scaffolding trigger, so we'll look just for 1</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">routes</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_set_request<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uri</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">segments</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Turn the segment array into a URI string</span>
		<span style="color: #000088;">$uri</span> <span style="color: #339933;">=</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uri</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">segments</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Is there a literal match?  If so we're done</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">routes</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$uri</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_set_request<span style="color: #009900;">&#40;</span><span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">routes</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$uri</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">ARR_ROUTE_POS</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Loop through the route array looking for wild-cards</span>
		<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">routes</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// Convert wild-cards to RegEx</span>
            <span style="color: #666666; font-style: italic;">//echo &quot;$key --&gt; &quot;;</span>
			<span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/\:\w+/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'[\w\-_]+'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #666666; font-style: italic;">//echo &quot;$key &lt;br /&gt;&quot;;</span>
			<span style="color: #666666; font-style: italic;">// Does the RegEx match?</span>
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#^'</span><span style="color: #339933;">.</span><span style="color: #000088;">$key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'$#'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$uri</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// Do we have a back-reference?</span>
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$val</span><span style="color: #009900;">&#91;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">ARR_ROUTE_POS</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'$'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #009900; font-weight: bold;">FALSE</span> AND <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'('</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span>
				<span style="color: #009900;">&#123;</span>
					<span style="color: #000088;">$val</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#^'</span><span style="color: #339933;">.</span><span style="color: #000088;">$key</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'$#'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$val</span><span style="color: #009900;">&#91;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">ARR_ROUTE_POS</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$uri</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_set_request<span style="color: #009900;">&#40;</span><span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// If we got this far it means we didn't encounter a</span>
		<span style="color: #666666; font-style: italic;">// matching route so we'll set the site default route</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_set_request<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uri</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">segments</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> _buildReverseRoutes<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$reverse_routes</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">routes</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$route</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;"># If this is a default route or scaffolding key, ignore it
</span>            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$info</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #000000; font-weight: bold;">self</span><span style="color: #339933;">::</span><span style="color: #004000;">ARR_ROUTE_NAME_POS</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$reverse_routes</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$route</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_reverseRoutes <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span> <span style="color: #000088;">$reverse_routes</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> reverseRoute<span style="color: #009900;">&#40;</span><span style="color: #000088;">$route_name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$args_keyval</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_reverseRoutes <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_buildReverseRoutes<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">array_key_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$route_name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_reverseRoutes<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            show_error<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;No reverse route found for '<span style="color: #006699; font-weight: bold;">$route_name</span>'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$route</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_reverseRoutes<span style="color: #009900;">&#91;</span><span style="color: #000088;">$route_name</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$args_keyval</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$route</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;(:<span style="color: #006699; font-weight: bold;">$key</span>)&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$val</span><span style="color: #339933;">,</span> <span style="color: #000088;">$route</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$route</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Drop that into application/libraries, then rewrite your routes to look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'users/(:username)'</span><span style="color: #009900;">&#93;</span>  <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'users/$1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'user-homepage'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$route</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'companies/(:slug)'</span><span style="color: #009900;">&#93;</span>  <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'companies/$1'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'company-homepage'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Let me explain that.</p>
<p>CodeIgniter lets you use wildcards in your routes like (:any) or (:num). That&#8217;s no more with this extension. Basically, anything you put in (:[name]) format with be treated like (:any). That&#8217;s handy, and I&#8217;ll tell you why.</p>
<p>Once you rewrite you routes, you can now call a new method on the routing class when you need to, say, redirect the user to his homepage after login:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #666666; font-style: italic;"># login was successful, and we now have a $user object
</span>  <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">helper</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  redirect<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">router</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">reverseRoute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'user-homepage'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'username'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">username</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>The reverseRoute method takes two parameters: The route you want to send the use on, and any wildcards that you need to fill in the url. For the user-homepage route, there is a (:username) wildcard in the route. We can pass the appropriate fill-in for that wilcard with the second parameter with an associative key-value array.</p>
<p>A redirect to a company-homepage would look like:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #666666; font-style: italic;"># ...
</span>  redirect<span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">router</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">reverseRoute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'company-homepage'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'slug'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$company</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">slug</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Then in the future, if you feel like changing your routes, go no further than the routes file! Mucking around in views is a recipe for broken links.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2010/09/easy-reverse-routing-with-codeigniter/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>ajax-proxy: A PHP AJAX Proxy with Cookie Support</title>
		<link>http://codefury.net/2010/06/ajax-proxy-a-php-ajax-proxy-with-cookie-support/</link>
		<comments>http://codefury.net/2010/06/ajax-proxy-a-php-ajax-proxy-with-cookie-support/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 23:36:44 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=234</guid>
		<description><![CDATA[A common annoyance in the world of AJAX is the ol&#8217; cross-domain request error. That is, a script sitting on domain1.example.com can&#8217;t make AJAX calls to domain2.example.com. This is in place for the sake of security, but sometimes developers have legitimate reasons to do so. A common workaround is writing a server-side script that will [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2010%2F06%2Fajax-proxy-a-php-ajax-proxy-with-cookie-support%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2010%2F06%2Fajax-proxy-a-php-ajax-proxy-with-cookie-support%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>A common annoyance in the world of AJAX is the ol&#8217; cross-domain request error. That is, a script sitting on domain1.example.com can&#8217;t make AJAX calls to domain2.example.com. This is in place for the sake of security, but sometimes developers have legitimate reasons to do so.</p>
<p>A common workaround is writing a server-side script that will sit on domain1.example.com, and make proxy requests to domain2.example.com, and send the output back to the client. Many times, this is a &#8220;quick and dirty&#8221; solution to a common problem. You can find many of these <a href="http://www.google.com/search?sourceid=chrome&amp;ie=UTF-8&amp;q=php+ajax+proxy">short &#8216;n ugly procedural proxy scripts online</a>.</p>
<p>But what if our needs are more complicated? What if our AJAX calls needed to be made over an authenticated session which requires forwarding of cookies? This is much harder to find online, and is a bit more complicated.</p>
<p>Lastly, just try and find an AJAX proxy that doesn&#8217;t rely entirely on cURL as it&#8217;s request mechanism. Developers using shared hosting or servers with draconian admins might not of the luxury of access to third-party fluff like cURL.</p>
<p>Over the past few weeks, I&#8217;ve developed <a href="http://github.com/hugeinc/ajax-proxy">ajax-proxy</a> over at <a href="http://hugeinc.com">HUGE in Brooklyn</a>, which is a class and script that solves both of the problems above. Additionally, it&#8217;s functionality is entirely encapsulated inside of a re-usable class. It was made so that it could stand alone on a server as proxy.php, or be incorporated into a larger framework like Zend, Kohana, or CodeIgniter.</p>
<p>Here are it&#8217;s features:</p>
<ul>
<li>Uses cURL, but falls back to the less-speedy fopen if the former sin&#8217;t available</li>
<li>Forwards cookies and other headers in both directions</li>
<li>Has optional error and exception handling for behavior as a standalone script (frameworks would likely not want this)</li>
<li>Extremely well documented (I&#8217;m a documentation fanatic)</li>
<li>Written entirely in OO PHP 5, to the Zend standards</li>
</ul>
<p>Additionally, the proxy underwent 2 weeks of development and intensive code review by the HUGE development team before it&#8217;s v1.0 push to GitHub. This is by no means a &#8220;quick and dirty&#8221; solution — it&#8217;s a rock-solid, full featured ajax-proxy that&#8217;s dead easy to use. Assuming proxy requests were going to be made to a base url of domain2.example.com, the code to run the proxy looks like:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$proxy</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> AjaxProxy<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'domain2.example.com'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$proxy</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>execute<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>If there&#8217;s anyone that loves simplicity, it&#8217;s me. Of course, there are more constructor options, but that&#8217;s better left to the README.</p>
<p>Anyway, the project is posted on GitHub at: <a href="http://github.com/hugeinc/ajax-proxy">http://github.com/hugeinc/ajax-proxy</a>, where there is also pretty extensive documentation on the class&#8217; usage. For documentation about the internal class members and methods, everything is doc&#8217;d with PHPDoc.</p>
<p>As a side note, I think it&#8217;s about time that I add KLogger to github. I get a fair amount of emails from people telling me they&#8217;re using it, and it&#8217;s about time I incorporated some new features in, like rolling log files, etc. I&#8217;m tired of having dusty old zip files sitting around. I&#8217;ll make another post when I put it up there!</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2010/06/ajax-proxy-a-php-ajax-proxy-with-cookie-support/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>USTORE.js: Cross-Browser Local and Session Storage Made Easy</title>
		<link>http://codefury.net/2010/06/ustore-js-cross-browser-local-and-session-storage-made-easy/</link>
		<comments>http://codefury.net/2010/06/ustore-js-cross-browser-local-and-session-storage-made-easy/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 23:41:45 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=222</guid>
		<description><![CDATA[I tend to get so wrapped up in the server-side portion of web applications, I probably don&#8217;t keep tabs on front-end tips and tricks as well I should. Luckily I work with some of the best client-side developers I&#8217;ve ever met over at HUGE, and I generally get exposed to new front-end marvels whether I [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcodefury.net%2F2010%2F06%2Fustore-js-cross-browser-local-and-session-storage-made-easy%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcodefury.net%2F2010%2F06%2Fustore-js-cross-browser-local-and-session-storage-made-easy%2F&amp;source=_kennyk_&amp;style=normal&amp;space=12&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I tend to get so wrapped up in the server-side portion of web applications, I probably don&#8217;t keep tabs on front-end tips and tricks as well I should. Luckily I work with some of the best client-side developers I&#8217;ve ever met over at <a href="http://hugeinc.com">HUGE</a>, and I generally get exposed to new front-end marvels whether I like it or not.</p>
<p>HUGE is firm that specializes in building sustainable web applications &#8212; they&#8217;re known for their design team, user experience, and revenue generating ability. Their talent is behind the Reuters iPad App, CNN, iVillage, and a<a href="http://hugeinc.com/casestudies/"> host of other clients</a>.</p>
<p>But HUGE also keeps a team of the best developers you&#8217;ll find in NY. And lately, they&#8217;ve begun to contribute to the open source world via their <a href="http://hugeinc.com">GitHub account</a>. Their first release has been something particularly exciting for front-end developers: A cross-browser library for leveraging the local storage capabilities of HTML 5.</p>
<p>Local storage is essentially a mechanism that allows client-side applications to store data &#8212; &#8220;<a href="http://dev.w3.org/html5/webstorage/#disk-space">a mostly arbitrary limit of 5 megabytes</a>&#8221; &#8212; locally. This works much like a cookie, without the absurd storage restriction of 4 kilobytes.</p>
<p>The library was developed by HUGE developer <a href="http://sankhomallik.com/">Sankho Mallik</a>, and he wrote a bit more detail about the library over at his blog. His library, in addition to facilitating cross-browser local storage, also facilitates the use of session storage across browsers (even IE 6, incredibly). That&#8217;s something you can&#8217;t find in other plugins on the &#8216;net.</p>
<p>The project page is at <a href="http://github.com/hugeinc/USTORE.js">GitHub</a>, but I&#8217;d recommend reading up at <a href="http://blog.sankhomallik.com/2010/06/16/ustore-js-cross-browser-local-and-session-storage/">Sankho&#8217;s blog</a> too.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2010/06/ustore-js-cross-browser-local-and-session-storage-made-easy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

