<?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>Tue, 22 Jun 2010 23:36:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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 sit [...]]]></description>
			<content:encoded><![CDATA[<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>1</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[<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>
		<item>
		<title>How To Get Your NYC Teacher Certification Fingerprints For Your TEACH Account</title>
		<link>http://codefury.net/2010/04/how-to-get-your-nyc-teacher-certification-fingerprints-for-your-teach-account/</link>
		<comments>http://codefury.net/2010/04/how-to-get-your-nyc-teacher-certification-fingerprints-for-your-teach-account/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 12:59:06 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=216</guid>
		<description><![CDATA[
This post is somewhat of a sequel to my previous post, How To Get Livescan Fingerprints in NYC. Since that entry was oriented specifically towards getting Livescan fingerprints, I wanted to cover the larger issue at hand: The reason so many people are in this dilemma, and how to get out of it.
Read this article if:

You [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>This post is somewhat of a sequel to my previous post, <a href="http://codefury.net/2010/03/how-to-get-livescan-fingerprints-in-nyc/">How To Get Livescan Fingerprints in NYC</a>. Since that entry was oriented specifically towards getting Livescan fingerprints, I wanted to cover the larger issue at hand: The reason so many people are in this dilemma, and how to get out of it.</p>
<p>Read this article if:</p>
<ul>
<li>You are applying for certification through New York State&#8217;s TEACH System</li>
<li>You have paid for &#8216;Fingerprint Processing&#8217; but you have no idea where to get your fingerprints done</li>
</ul>
<p>So at this point, you have probably paid $96+ dollars for &#8216;Fingerprint Processing&#8217; through the NYSED TEACH system, but now they&#8217;ve left you high and dry by leaving vague instructions on how to get your fingerprints done. They mentioned that you can get Livescan prints, a seemingly speedy alternative to the traditional option, ink fingerprints.</p>
<p>Like me, you set out to find an &#8216;Approved LiveScan Service&#8217;, but had no luck.</p>
<p>You can get Livescan prints in two places: The NYPD headquarters in lower Manhattan and the New York Department of Education in Brooklyn.</p>
<p>So where should you go? It depends! Here&#8217;s the dirty truth of application process that they aren&#8217;t very clear in telling you:You cannot get your Livescan fingerprints processed unless you have a referral letter from a school or school official.</p>
<p>So in my girlfriend&#8217;s case &#8212; she was applying for certification, and didn&#8217;t have and schools she was applying to yet. How would she get a referral letter?! What we found out is that she isn&#8217;t eligible without that letter (or at least that&#8217;s what everyone at the NYDOE told us!).</p>
<p>So, if you are in this situation, you have to do everything the hard way. Just get traditional fingerprints at the New York Department of Education at <a href="http://maps.google.com/maps?hl=en&amp;q=65+court+street,+brooklyn,+ny&amp;um=1&amp;ie=UTF-8&amp;hq=&amp;hnear=65+Court+St,+Brooklyn,+NY+11201&amp;gl=us&amp;ei=pF3IS6b0MZS09QSu_-zhCg&amp;sa=X&amp;oi=geocode_result&amp;ct=title&amp;resnum=1&amp;ved=0CAcQ8gEwAA">65 Court Street in Brooklyn</a>. It&#8217;s right by a number of subway lines, including the A,C,2,3,4,5 and a couple others. I think the actual name of the stop on the A/C line is &#8216;Borough Hall&#8217;. Get off, walk a few hundred feet down Court Street, and you&#8217;ll see the building on your left.</p>
<p>You will need a $10 money order to get your prints processed. And even if they tell you they&#8217;ll take a check, they won&#8217;t. Try to get there early, because if you do, there might not be a line.</p>
<p>When you walk into the building, you&#8217;ll have to have your ID checked by the guards. The room you need to enter is immediately to the left of the front entrance. It looks like this:</p>
<p><a href="http://codefury.net/wp-content/uploads/2010/04/doe.jpg"><img title="doe" src="http://codefury.net/wp-content/uploads/2010/04/doe-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Talk to the nice ladies at the desk, and explain that you need your fingerprints done for your certification. They&#8217;ll give you some paperwork, and a pen.</p>
<p>When you&#8217;re all finished, they&#8217;ll send you to the fingerprint room where someone will take your ink fingerprints. They&#8217;ll then sign off on a few things, and give you some papers back. Make a copy of everything, including your receipt, at the copier in the same room.</p>
<p>Finally, you can continue with the certification process. Mail in those cards, along with any yet-to-be processed transcripts, out of state certifications, etc.</p>
<p>When all that&#8217;s sent in and processed by the state (which they say can take a couple months), you&#8217;ll be all set. Everything will eventually be hooked up with your TEACH account.</p>
<p>With all the trouble one has to go through, it&#8217;s really a wonder that NYC has any teachers at all. Am I right or what?</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2010/04/how-to-get-your-nyc-teacher-certification-fingerprints-for-your-teach-account/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How To Get Livescan Fingerprints In NYC</title>
		<link>http://codefury.net/2010/03/how-to-get-livescan-fingerprints-in-nyc/</link>
		<comments>http://codefury.net/2010/03/how-to-get-livescan-fingerprints-in-nyc/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 13:58:35 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[city]]></category>
		<category><![CDATA[finger]]></category>
		<category><![CDATA[fingerprints]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[livescan]]></category>
		<category><![CDATA[new]]></category>
		<category><![CDATA[nyc]]></category>
		<category><![CDATA[prints]]></category>
		<category><![CDATA[scan]]></category>
		<category><![CDATA[teach]]></category>
		<category><![CDATA[teacher]]></category>
		<category><![CDATA[york]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=208</guid>
		<description><![CDATA[It&#8217;s obvious that this is a tech blog, and this isn&#8217;t a tech-oriented post. But I know there are a lot of people who are in the same situation as I was yesterday.
Update: How To Get Your NYC Teacher Certification Fingerprints For Your TEACH Account
My girlfriend needed to get her fingerprints taken so she could [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s obvious that this is a tech blog, and this isn&#8217;t a tech-oriented post. But I know there are a lot of people who are in the same situation as I was yesterday.</p>
<p><strong>Update:</strong> <a href="http://codefury.net/2010/04/how-to-get-your-nyc-teacher-certification-fingerprints-for-your-teach-account/">How To Get Your NYC Teacher Certification Fingerprints For Your TEACH Account</a></p>
<p>My girlfriend needed to get her fingerprints taken so she could apply for teacher certification in NYC&#8217;s schools. The NY Department of Education does a pretty stellar job when it comes to clarity in terms of telling teaching prospects exactly what they need to do in order to become certified. One of those things is getting fingerprinted.</p>
<p>They don&#8217;t exactly tell you <em>where</em> to get fingerprinted, although. They mention that they accept traditional fingerprint cards, and the new digital livescan method, but not any names of places that do these things.</p>
<p>A quick search online for &#8220;livescan fingerprint nyc&#8221; yields mostly useless links, with the exception of one company at 130 Williams in lower Manhattan. After a short call, we decided not to go with them due to some questionable fees and their particularly shady website.</p>
<p>So do you want to know where we ended up? The NYC Police Station, at 1 Police Plaza. They do fingerprints from 9am to ~4pm, have a light fee, and they do traditional <em>and</em> livescan fingerprints. It took us the better part of a day to figure out we should go there.</p>
<p>They&#8217;re on the lower east side of Manhattan, a few blocks from the Brooklyn Bridge.</p>
<p>I hope this helps someone who is in a similar situation. Leave a comment if it did!</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2010/03/how-to-get-livescan-fingerprints-in-nyc/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>My Honest Consumer Opinion of the iPad: Who Cares?</title>
		<link>http://codefury.net/2010/01/my-honest-consumer-opinion-of-the-ipad-who-cares/</link>
		<comments>http://codefury.net/2010/01/my-honest-consumer-opinion-of-the-ipad-who-cares/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 06:48:39 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=172</guid>
		<description><![CDATA[I can&#8217;t speak for the whole of technology consumers when I say that the Apple iPad, which debuted a few days ago in Apple&#8217;s Keynote, doesn&#8217;t seem terribly interesting. I&#8217;ll admit that I tend to roll on gut instinct when gauging the success of a potential product. I&#8217;ve done it as both a member of [...]]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t speak for the whole of technology consumers when I say that the Apple iPad, which debuted a few days ago in Apple&#8217;s Keynote, doesn&#8217;t seem terribly interesting. I&#8217;ll admit that I tend to roll on gut instinct when gauging the success of a potential product. I&#8217;ve done it as both a member of a startup and a tech industry observer. The question that always bugs me is: If Apple hadn&#8217;t set a price at $499, how much would I be willing to pay for such a device?</p>
<p>Maybe $200, and I&#8217;m not even sure about that.</p>
<p>The real issue at hand is not me being stingy. It&#8217;s me weighing the economical pros and cons of owning such a device over something like a laptop or netbook. What can I get out of something already being billed as &#8220;A Giant iPhone?&#8221;</p>
<p>I feel as if the iPad is making consumers think &#8220;that would be cool to have,&#8221; while in the past, the iPod Touch and iPhone Keynote was making people like me practically drool while screaming &#8220;I WANT THAT!&#8221; In fact, I own an iPod Touch, and it is every bit as spectacular as I thought it would be. But I digress, the point is that I was absolutely convinced that I <em>needed</em> an iPod Touch. It had WiFi built in, a web browser, mp3 player, video player, photo viewer, an endless library of applications, mobile iTunes &#8212; the list goes on! The iPad doesn&#8217;t offer much more, and it doesn&#8217;t fit in my pocket.</p>
<p>I will say this: It was probably the vibe that Steve Jobs was going for in his KeyNote (sitting in a comfortable looking chair with an iPad on his lap), but the iPad would probably make a great coffee table piece. You can pick it up at-will, check your email, surf the web, check the weather, watch videos, and oh &#8212; read an ebook. But I&#8217;ll be honest, the iPad isn&#8217;t going to really compare to a Kindle. The Kindle is easy on the eyes, has three times the battery life, and is easier to handle and take with you.</p>
<p>So you may be thinking, &#8220;well Kenny, there have been a lot of positive reviews for the iPad!&#8221; I don&#8217;t doubt it. In fact, everything that I&#8217;ve ever tried that has Apple&#8217;s logo on it has been awesome. Macbooks, iPods, Apple II&#8217;s, every piece of Apple software ever written (iLife), it&#8217;s all fantastic. But there was a certain sect of people that <em>needed</em> those devices or software. I&#8217;m just not sure that kind of need exists for the iPad.</p>
<p>It&#8217;s kind of like Google Wave. It was kind of cool, and still has a lot of potential. Hell, I was one the the first people signing up for a beta account just because I wanted to see what all the hype was about. But it seems as though the world just doesn&#8217;t need it.</p>
<p>Any technology like Wave or the iPad will have its share of mindless early-adopting brand zombies. Some people still insist that Google Wave is really useful and has a shot at changing the innerwebs. I don&#8217;t buy that one either, mainly because after I tried it, my instinct asked me, &#8220;how does it help me? how can it help you do what you do more efficiently?&#8221; I don&#8217;t know the answer to that yet, and that&#8217;s why I don&#8217;t quite believe in it as a product.</p>
<p>Like I said, I don&#8217;t speak for every consumer, so I will not truly know how the iPad (or Wave for that matter) will fair. But my own personal reaction to the Apple Keynote was &#8220;Hey, you can&#8217;t win&#8217;em all! They still have other great products. Maybe I&#8217;ll start looking into Amazon shares.&#8221;</p>
<p>Oh yea, the iPad is already the subject of internet hilarity:</p>
<p><a href="http://www.collegehumor.com/video:1928558"><img class="alignnone size-medium wp-image-173" title="play-ch-ipad" src="http://codefury.net/wp-content/uploads/2010/01/play-ch-ipad-300x171.png" alt="" width="300" height="171" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2010/01/my-honest-consumer-opinion-of-the-ipad-who-cares/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Insert Multiple Rows Into A Database with CodeIgniter</title>
		<link>http://codefury.net/2009/12/insert-multiple-rows-into-a-database-with-codeigniter/</link>
		<comments>http://codefury.net/2009/12/insert-multiple-rows-into-a-database-with-codeigniter/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 19:21:15 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=135</guid>
		<description><![CDATA[When using a spiffy web application framework like CodeIgniter for PHP, I tend to start depending on the framework for a lot of functions.
For example, if I want to get the segments of the URI, I first think, &#8220;CodeIgniter must have that!&#8221; If I want a function to convert input from a &#60;textarea&#62; into correctly [...]]]></description>
			<content:encoded><![CDATA[<p>When using a spiffy web application framework like CodeIgniter for PHP, I tend to start depending on the framework for a lot of functions.</p>
<p>For example, if I want to get the segments of the URI, I first think, &#8220;CodeIgniter must have that!&#8221; If I want a function to convert input from a &lt;textarea&gt; into correctly formatted html, I think, &#8220;CodeIgniter must have that!&#8221;</p>
<p>And when CodeIgniter doesn&#8217;t have a function that would be really useful, I tend to think, &#8220;Now what?&#8221;</p>
<p>One commonly found problem is that CodeIgniter doesn&#8217;t have a specific function for inserting multiple rows into a database at once. It&#8217;s obvious that if you need to insert over 10 rows &#8212; you should really be doing it in as few queries as possible. There have been <a href="http://codeigniter.com/forums/viewthread/94459/">some blog posts asking about this</a> on the CI forums. It&#8217;s not a tough problem to solve by any stretch &#8212; but I wanted to write an extension of the Model class with a function to do this as quickly and efficiently as possible.</p>
<p>Right now I&#8217;m working on a webapp where I need to allow one user to send a message to potentially thousands of other users. That means I&#8217;ll need thousands of database inserts. Doing this with individual queries could take minutes. Inserting them in bulk would take under half of a second.</p>
<p>The code that I wrote has been tested and benchmarked to be as fast as I could possibly make it. I used PHP&#8217;s built in array_walk functions (which are written in C) over my own. A few other optimizations are present as well.</p>
<p>I posted <a href="http://codeigniter.com/wiki/Inserting_Multiple_Records_Into_a_Table/">this code over on the CodeIgniter wiki too.</a></p>
<p>The first thing you need to do is extend the model class (if it isn&#8217;t already extended), with the following code:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> MY_Model <span style="color: #000000; font-weight: bold;">extends</span> Model <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> MY_Model<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        parent<span style="color: #339933;">::</span><span style="color: #004000;">Model</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * A method to facilitate easy bulk inserts into a given table.
     * @param string $table_name
     * @param array $column_names A basic array containing the column names
     *  of the data we'll be inserting
     * @param array $rows A two dimensional array of rows to insert into the
     *  database.
     * @param bool $escape Whether or not to escape data
     *  that will be inserted. Default = true.
     * @author Kenny Katzgrau 
     */</span>
    <span style="color: #000000; font-weight: bold;">function</span> insert_rows<span style="color: #009900;">&#40;</span><span style="color: #000088;">$table_name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$column_names</span><span style="color: #339933;">,</span> <span style="color: #000088;">$rows</span><span style="color: #339933;">,</span> <span style="color: #000088;">$escape</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">/* Build a list of column names */</span>
        <span style="color: #000088;">$columns</span>    <span style="color: #339933;">=</span> <span style="color: #990000;">array_walk</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$column_names</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'prepare_column_name'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$columns</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;">$column_names</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/* Escape each value of the array for insertion into the SQL string */</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$escape</span> <span style="color: #009900;">&#41;</span> <span style="color: #990000;">array_walk_recursive</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$rows</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'escape_value'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/* Collapse each rows of values into a single string */</span>
        <span style="color: #000088;">$length</span> <span style="color: #339933;">=</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rows</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$length</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$rows</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</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;">$rows</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">/* Collapse all the rows into something that looks like
         *  (r1_val_1, r1_val_2, ..., r1_val_n),
         *  (r2_val_1, r2_val_2, ..., r2_val_n),
         *  ...
         *  (rx_val_1, rx_val_2, ..., rx_val_n)
         * Stored in $values
         */</span>
        <span style="color: #000088;">$values</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;(&quot;</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;">$rows</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;)&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;INSERT INTO <span style="color: #006699; font-weight: bold;">$table_name</span> ( <span style="color: #006699; font-weight: bold;">$columns</span> ) VALUES <span style="color: #006699; font-weight: bold;">$values</span>&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">simple_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</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> escape_value<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span> <span style="color: #000088;">$value</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: #990000;">is_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$value</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;'&quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">mysql_real_escape_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;'&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> prepare_column_name<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span> <span style="color: #000088;">$name</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;`<span style="color: #006699; font-weight: bold;">$name</span>`&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>That file, My_Model.php, should be placed in your system/application/libraries folder. Next, you need to modify the model which needs to insert multiple rows. In my case, I want my Message model to be able to insert a lot of messages, so I&#8217;ll add &#8216;extends MY_Model&#8217; to its class definition.</p>
<p><strong>Note:</strong> The <strong>MY_</strong> prefix is the default prefix used to extend a class in CodeIgniter. If you have modified this in your <strong>config.php</strong>, use your prefix as appropriate.</p>
<p>This is my new model, which contains an example usage of the method (but real usage would likely be a little more involved).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Messages <span style="color: #000000; font-weight: bold;">extends</span> MY_Model 
<span style="color: #009900;">&#123;</span>   
  <span style="color: #666666; font-style: italic;">/* Code .. */</span>   
  <span style="color: #000000; font-weight: bold;">function</span> InsertTestData<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;">/* Prepare some fake data (10000 rows, 40,000 values total) */</span>
    <span style="color: #000088;">$rows</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_fill</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10000</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">34239</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">102438</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;Test Message!&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'2009-12-12'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$columns</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'to_user_id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'from_user_id'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'message'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'created'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">insert_rows</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'messages'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$columns</span><span style="color: #339933;">,</span> <span style="color: #000088;">$rows</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>The insert_rows method will automatically escape your data for the query, which tends to take up a healthy portion of this script&#8217;s running time. After all, it has to check 40,000 values, and escape 10,000!</p>
<p>If you need to insert something like 10,000 or 20,000 rows, it is recommended that you page through the values you are inserting. Otherwise, you run the risk of exceeding memory limits, or MySQL&#8217;s maximum packet size.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2009/12/insert-multiple-rows-into-a-database-with-codeigniter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Add Files to Subversion Recursively</title>
		<link>http://codefury.net/2009/12/add-files-to-subversion-recursively/</link>
		<comments>http://codefury.net/2009/12/add-files-to-subversion-recursively/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 17:03:56 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=129</guid>
		<description><![CDATA[Adding a directory and sub-directories to your subversion repo: I&#8217;ve seen some wacky solutions to this problem online, and a lot of people don&#8217;t know this is a built-in command (Google &#8220;add files to subversion recursively&#8221;).
Since CodeFury has been getting pretty high in the Google listings, I&#8217;ll post the real command. Hopefully subversion users will [...]]]></description>
			<content:encoded><![CDATA[<p>Adding a directory and sub-directories to your subversion repo: I&#8217;ve seen some wacky solutions to this problem online, and a lot of people don&#8217;t know this is a built-in command (Google &#8220;add files to subversion recursively&#8221;).</p>
<p>Since CodeFury has been getting pretty high in the Google listings, I&#8217;ll post the real command. Hopefully subversion users will find my blog before running someone else&#8217;s 50 line perl script.</p>
<p>And here it is:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> add <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #660033;">--</span> force</pre></div></div>

<p>It would really be scary to consider what would happen if subversion didn&#8217;t have this in it&#8217;s toolbox. Rails developers would be in tears any time they ran</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">script<span style="color: #000000; font-weight: bold;">/</span>generate <span style="color: #7a0874; font-weight: bold;">&#91;</span>something<span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #666666; font-style: italic;"># Generating n new files in n directories ... ;)</span></pre></div></div>

<p>Of course, even that command isn&#8217;t as easy as git&#8217;s</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">git add .</pre></div></div>

<p>I&#8217;ve been using git full force lately. I&#8217;m not entirely in agreement with <a href="http://en.wikipedia.org/wiki/Git_%28software%29#Early_history">Linus Torvalds&#8217; quips on subversion</a>, but I do agree that git is superior to svn in a lot of ways.</p>
<p>Anyway, I hope this post saves someone a lot of typing.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2009/12/add-files-to-subversion-recursively/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Fine Run, and Maybe A Little More</title>
		<link>http://codefury.net/2009/11/a-fine-run-and-maybe-a-little-more/</link>
		<comments>http://codefury.net/2009/11/a-fine-run-and-maybe-a-little-more/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 16:23:23 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=105</guid>
		<description><![CDATA[It&#8217;s been almost a year since I mentioned the last version of wpSearch!
I owe many faithful users of wpSearch an explanation of my whereabouts. After all, the internet does not need yet another dead blog, especially when it had been fairly well read. Here&#8217;s a recap of the last year:

Figured out that I wasn&#8217;t going [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been almost a year since I mentioned the last version of wpSearch!</p>
<p>I owe many faithful users of wpSearch an explanation of my whereabouts. After all, the internet does not need yet another dead blog, especially when it had been fairly well read. Here&#8217;s a recap of the last year:</p>
<ul>
<li>Figured out that I wasn&#8217;t going to figure out the wpSearch index corruption issue some users were having. I could duplicate it, but I couldn&#8217;t get to the root of it. Then Fall 2008 final exams took the rest of my time. I tend to be an extremely focused student.</li>
<li>I continued working at <a href="http://ltech.com">LTech</a>, which was sold by GetTheJob to Matlen-Silver, a company in Bridgewater NJ, where our office was subsequently moved. Company focus shifted from consulting to developing products for the Google cloud.</li>
<li>I became infatuated with CodeIgniter, an MVC framework for PHP. I had used CakePHP and Zend with limited success, but CodeIgniter was light, fast, and had great documentation. It also lets me do things the way I want to (the forceful &#8220;best practice&#8221; nature of frameworks like Cake and Ruby on Rails can sometimes make things very difficult).</li>
<li>I was offered a job, and almost moved to San Diego to work at BAE Systems as a Software Engineer. Then &#8220;nature&#8217;s changing course&#8221; (thanks, Shakespeare) got in the way. It would have been great to work with the people I met there, and I was really excited.  But in the short time I was at  their facility, they taught me how important tested, reusable design patterns were to their business. Then I decided to buy the <a href="http://en.wikipedia.org/wiki/Design_Patterns_(book)">famous Design Patterns book by the &#8220;Gang of Four&#8221;</a>.</li>
<li>I graduated from NJIT with a BS in Computer Science and a minor in Applied Math. Class rank? 12/858! Ye-uh! I&#8217;m not a bragger, but it&#8217;s a good feeling for a former apathetic high-schooler.</li>
<li>Amidst the excitement, I lost a close family member in April. You are still very missed, my friend. <a href="http://www.youtube.com/watch?v=TQ1JZFQM_rc">Btw, if you can read the innerwebs, this is awesome</a>.</li>
<li>I left LTech (I was sad to go, but I had a mission) to work full time on my first entrepreneurial project, Teaches.it. <a href="http://teaches.it">Teaches.it</a> is a service that helps teachers build websites via our own uber-easy-to-use content management system. I spent the majority of the summer working on, and launching that system. Teaches.it now has a small, but growing group of happy customers.</li>
<li>I went on a month-long road trip stopping at Wilmington NC, Savannah GA, Pensacola FL, Baton Rouge LA, Houston TX, Van Horn TX, Carlsbad NM, Scottsdale AZ, Grand Canyon AZ, Las Vegas NV, San Diego CA, Los Angeles CA, San Fransisco CA, Elko NV, Salt Lake City UT, Nebraska, Iowa, Ohio, and Kutztown, PA. Lessons learned during the trip? The best Mexi-Cali food is not in Cali. It&#8217;s at <a href="http://tenthaveburrito.com/">10th Ave Burrito in Belmar, NJ</a>. Yeah, I said it.</li>
</ul>
<p>I have been receiving quite a volume of support requests for wpSearch. I try and do my best to get to all of them, but I am aware that some slip through the cracks. This usually occurs when I read the email on my iTouch, and decide I want to reply at a full-sized keyboard. Sometimes, I get caught up in something else and forget.</p>
<p>KLogger has been receiving more than its fair share of users. After all, it is only a small logging class.  Then again, I wrote it because I needed something like it and I couldn&#8217;t find it elsewhere. I&#8217;m glad it is being put to good use. Here&#8217;s a shout out to the University of Iowa, where it is currently being used in an internal project.</p>
<p>So what&#8217;s ahead? The first task is to see if the newest version of Zend Lucene is any better than the last. The next step is to start using it in wpSearch.</p>
<p>I also want to keep doing what I was supposed to do on CodeFury &#8212; document  fixes to problems I have come across while coding. One of my recent trials is figuring out how to use swfUploader with CodeIgniter&#8217;s upload class when an authenticated session is required to upload.</p>
<p>Anyway, the next post shouldn&#8217;t be too far behind. Thanks to everyone for the comments and support of the projects!</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2009/11/a-fine-run-and-maybe-a-little-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updates on KLogger, wpSearch 1.5.6, and More</title>
		<link>http://codefury.net/2008/11/updates-on-klogger-wpsearch-156-and-more/</link>
		<comments>http://codefury.net/2008/11/updates-on-klogger-wpsearch-156-and-more/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 02:18:38 +0000</pubDate>
		<dc:creator>Kenny Katzgrau</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://codefury.net/?p=53</guid>
		<description><![CDATA[Since my last post, I&#8217;ve been working on and off on the next version of wpSearch. The last version (1.5.5) stands as somewhat of an official release of the plugin, and I would consider previous versions to be &#8216;release candidates&#8217; due to the growth wpSearch saw since then.
I&#8217;m in my second to last semester at [...]]]></description>
			<content:encoded><![CDATA[<p>Since my last post, I&#8217;ve been working on and off on the next version of wpSearch. The last version (1.5.5) stands as somewhat of an official release of the plugin, and I would consider previous versions to be &#8216;release candidates&#8217; due to the growth wpSearch saw since then.</p>
<p>I&#8217;m in my second to last semester at school, so the lack of posts over the past two months are attributed to that &#8212; that doesn&#8217;t mean that nothing has happened.</p>
<p>Many of wpSearch&#8217;s users have made note of some <strong>very</strong> important issues in the current release. Because I have been recieiving feedback on wpSearch in pretty large quanities lately, I&#8217;ve been doing my best to reply to everyone &#8212; some, although, might not get a reply right away (Sorry!).</p>
<p>I&#8217;ve taken note of all reported issues so far, and a future release of wpSearch over the holidays is likely. I have also recieved a code submission from the folks at the <a href="http://abrdev.com">Alpha-Beta-Release</a> Blog for <a href="http://codefury.net/2008/07/klogger-a-simple-logging-class-for-php/">KLogger</a>. They have written rolling log capabilities into the class, ensuring that log files never grow beyong a certain size, and begin writing to a new file when some preset limit is reached.</p>
<p>Also, I don&#8217;t know how many blog readers have any sort of interest in the <a href="http://www.google.com/enterprise/gsa/">Google Search Appliance</a>, but I will be developing a PHP &#8220;Bridge&#8221; for easy code-wise communication with the Appliance. I am writing this library for <a href="http://ltech.com">LTech Consulting</a> (A Google Partner) &#8212; they have already written a bridge in C#/.NET. If anyone is interested, I&#8217;ve written a lightweight <a href="http://blog.ltech.com/2008/11/21/working-with-the-google-search-appliance-from-php">blog post</a> on LTech&#8217;s blog detailing the basics of the project.</p>
<p>Lastly, <a href="http://zinkk.com">zinkk</a>, a startup development company I am involved in, has grabbed its first couple of contracts over the past few months, and also <a href="http://null.zinkk.com/2008/11/07/11/">has a real office</a>. It&#8217;s a big step when a small company started by students actually moves into its first office &#8212; there are feelings of &#8220;Wow, we did it,&#8221; and &#8220;We are a bona-fide firm now,&#8221; and &#8220;Whoa, we better keep making money so we can pay the rent!&#8221;</p>
<p>Anyway, we have some very talented people at zinkk, and I&#8217;m excited to a part of it. <a href="http://johnbellone.us">John Bellone</a>, one of our developers, works for CitiGroup in Manhattan. <a href="http://blogs.sun.com/johnny">John Crepezzi</a> works at <a href="http://sun.com">Sun Microsystems</a>. Dan Boston is a doctoral student at <a href="http://njit.edu">NJIT</a>, and Tarcisio has worked for <a href="http://www.jnj.com">Johnson &amp; Johnson</a>. All of these guys have worked on some impressive projects &#8212; many of them open source or publicly licensed.</p>
<p>Oh yeah, <a href="http://zend.com">Zend</a> put a <a href="http://devzone.zend.com/article/3593-Implementing-a-Stemming-Analyzer-for-Zend_Search_Lucene">piece I wrote</a> about writing a Stemming Analyzer for Zend_Lucene in the tutorial section of their website.</p>
<p>That&#8217;s it for now &#8212; I&#8217;m going to talk about a release of a MySQL management class for PHP next time.</p>
]]></content:encoded>
			<wfw:commentRss>http://codefury.net/2008/11/updates-on-klogger-wpsearch-156-and-more/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>
