<?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>joey nelson &#187; php</title>
	<atom:link href="http://jnjnjn.com/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://jnjnjn.com</link>
	<description></description>
	<lastBuildDate>Mon, 02 Aug 2010 13:11:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>werunthegame.biz</title>
		<link>http://jnjnjn.com/82/werunthegamedobiz/</link>
		<comments>http://jnjnjn.com/82/werunthegamedobiz/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 18:38:53 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[friends]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/?p=82</guid>
		<description><![CDATA[
Guilt by association: We Run The Game is running on some gallery software I wrote.  The goal (and I guess there&#8217;s a pattern forming here) was extreme simplicity and speed.
]]></description>
			<content:encoded><![CDATA[<p><img src="http://jnjnjn.com/images/werunthegame.jpg" alt="" /></p>
<p>Guilt by association: <a href="http://werunthegame.biz">We Run The Game</a> is running on some gallery software I wrote.  The goal (and I guess there&#8217;s a pattern forming here) was extreme simplicity and speed.</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/82/werunthegamedobiz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formatting date &amp; time for RSS</title>
		<link>http://jnjnjn.com/58/formatting-date-time-for-rss/</link>
		<comments>http://jnjnjn.com/58/formatting-date-time-for-rss/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 18:35:17 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/58/formatting-date-time-for-rss/</guid>
		<description><![CDATA[According to the RSS spec, all of the dates in your RSS content should be in RFC 822 format.  That means they should look like this:

Sat, 07 Sep 2002 09:42:31 GMT

Here&#8217;s a PHP function that will take a timestamp and give you that string:

function rss_time&#40;$time&#41;&#123;
	return strftime&#40;&#34;%a, %d %b %Y %H:%M:%S %z&#34;, $time&#41;;
&#125;

]]></description>
			<content:encoded><![CDATA[<p>According to <a href="http://cyber.law.harvard.edu/rss/rss.html">the RSS spec</a>, all of the dates in your RSS content should be in <a href="http://asg.web.cmu.edu/rfc/rfc822.html">RFC 822</a> format.  That means they should look like this:</p>
<pre>
Sat, 07 Sep 2002 09:42:31 GMT
</pre>
<p>Here&#8217;s a PHP function that will take a timestamp and give you that string:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #888888; font-weight: bold;">function</span> rss_time<span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$time</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
	<span style="color: #888888">return</span> <span style="color: #888888;">strftime</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;%a, %d %b %Y %H:%M:%S %z&quot;</span>, <span style="color: #F8320D;">$time</span><span style="color: #bbbbbb;">&#41;</span>;
<span style="color: #bbbbbb;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/58/formatting-date-time-for-rss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;m not proud of this</title>
		<link>http://jnjnjn.com/55/im-not-proud-of-this/</link>
		<comments>http://jnjnjn.com/55/im-not-proud-of-this/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 02:53:36 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/55/im-not-proud-of-this/</guid>
		<description><![CDATA[&#8230;but I didn&#8217;t have much of a choice:

function parse_date_from_string&#40;$string=&#34;&#34;&#41;&#123;
	$month_names = array&#40;&#34;&#34;, &#34;January&#34;,&#34;February&#34;,&#34;March&#34;,&#34;April&#34;,&#34;May&#34;,&#34;June&#34;,&#34;July&#34;,&#34;August&#34;,&#34;September&#34;,&#34;October&#34;,&#34;November&#34;,&#34;December&#34;&#41;;
	$regex = &#34;/(\d{1,2})[-&#124;\/&#124;\.](\d{1,2})[-&#124;\/&#124;\.](\d{2}&#124;\d{4})/&#34;;
	$date = array&#40;&#41;;
	if&#40;preg_match&#40;$regex, $string, $matches&#41;&#41;&#123;
		$month = preg_replace&#40;&#34;/^0/&#34;, &#34;&#34;, $matches&#91;1&#93;&#41;;
		$date&#91;'month'&#93; = $month_names&#91;$month&#93;;
		$date&#91;'day'&#93; = $matches&#91;2&#93;;
		if&#40;strlen&#40;$matches&#91;3&#93;&#41; == 2&#41; $matches&#91;3&#93; = &#34;20&#34; . $matches&#91;3&#93;;
		$date&#91;'year'&#93; = $matches&#91;3&#93;;
		$date&#91;'string'&#93; = trim&#40;preg_replace&#40;$regex, &#34;&#34;, $string&#41;&#41;;
	&#125;
	return $date;
&#125;

]]></description>
			<content:encoded><![CDATA[<p>&#8230;but I didn&#8217;t have much of a choice:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #888888; font-weight: bold;">function</span> parse_date_from_string<span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$string</span>=<span style="color: #888888; background-color: #fbf6c5;">&quot;&quot;</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
	<span style="color: #F8320D;">$month_names</span> = <span style="color: #888888;">array</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;&quot;</span>, <span style="color: #888888; background-color: #fbf6c5;">&quot;January&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;February&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;March&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;April&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;May&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;June&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;July&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;August&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;September&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;October&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;November&quot;</span>,<span style="color: #888888; background-color: #fbf6c5;">&quot;December&quot;</span><span style="color: #bbbbbb;">&#41;</span>;
	<span style="color: #F8320D;">$regex</span> = <span style="color: #888888; background-color: #fbf6c5;">&quot;/(<span style="font-weight: bold;">\d</span>{1,2})[-|<span style="font-weight: bold;">\/</span>|<span style="font-weight: bold;">\.</span>](<span style="font-weight: bold;">\d</span>{1,2})[-|<span style="font-weight: bold;">\/</span>|<span style="font-weight: bold;">\.</span>](<span style="font-weight: bold;">\d</span>{2}|<span style="font-weight: bold;">\d</span>{4})/&quot;</span>;
	<span style="color: #F8320D;">$date</span> = <span style="color: #888888;">array</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #bbbbbb;">&#41;</span>;
	<span style="color: #888888">if</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888;">preg_match</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$regex</span>, <span style="color: #F8320D;">$string</span>, <span style="color: #F8320D;">$matches</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
		<span style="color: #F8320D;">$month</span> = <span style="color: #888888;">preg_replace</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;/^0/&quot;</span>, <span style="color: #888888; background-color: #fbf6c5;">&quot;&quot;</span>, <span style="color: #F8320D;">$matches</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">1</span><span style="color: #bbbbbb;">&#93;</span><span style="color: #bbbbbb;">&#41;</span>;
		<span style="color: #F8320D;">$date</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #888888; background-color: #fbf6c5;">'month'</span><span style="color: #bbbbbb;">&#93;</span> = <span style="color: #F8320D;">$month_names</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">$month</span><span style="color: #bbbbbb;">&#93;</span>;
		<span style="color: #F8320D;">$date</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #888888; background-color: #fbf6c5;">'day'</span><span style="color: #bbbbbb;">&#93;</span> = <span style="color: #F8320D;">$matches</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">2</span><span style="color: #bbbbbb;">&#93;</span>;
		<span style="color: #888888">if</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888;">strlen</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$matches</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">3</span><span style="color: #bbbbbb;">&#93;</span><span style="color: #bbbbbb;">&#41;</span> == <span style="color: #F8320D;">2</span><span style="color: #bbbbbb;">&#41;</span> <span style="color: #F8320D;">$matches</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">3</span><span style="color: #bbbbbb;">&#93;</span> = <span style="color: #888888; background-color: #fbf6c5;">&quot;20&quot;</span> . <span style="color: #F8320D;">$matches</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">3</span><span style="color: #bbbbbb;">&#93;</span>;
		<span style="color: #F8320D;">$date</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #888888; background-color: #fbf6c5;">'year'</span><span style="color: #bbbbbb;">&#93;</span> = <span style="color: #F8320D;">$matches</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">3</span><span style="color: #bbbbbb;">&#93;</span>;
		<span style="color: #F8320D;">$date</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #888888; background-color: #fbf6c5;">'string'</span><span style="color: #bbbbbb;">&#93;</span> = <span style="color: #888888;">trim</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888;">preg_replace</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$regex</span>, <span style="color: #888888; background-color: #fbf6c5;">&quot;&quot;</span>, <span style="color: #F8320D;">$string</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#41;</span>;
	<span style="color: #bbbbbb;">&#125;</span>
	<span style="color: #888888">return</span> <span style="color: #F8320D;">$date</span>;
<span style="color: #bbbbbb;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/55/im-not-proud-of-this/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Super simple PHP gallery</title>
		<link>http://jnjnjn.com/53/super-simple-php-gallery/</link>
		<comments>http://jnjnjn.com/53/super-simple-php-gallery/#comments</comments>
		<pubDate>Fri, 03 Aug 2007 17:54:40 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/53/super-simple-php-gallery/</guid>
		<description><![CDATA[Just save this as index.php and put it in a directory with a bunch of images.  Images are displayed one per page (newest images first), and clicking on an image takes you to the next one.

&#60;?
exec&#40;&#34;ls -r&#124;egrep -i \&#34;\.(gif&#124;jpg&#124;jpeg&#124;png)$\&#34;&#34;, $files&#41;;
$files = array_reverse&#40;$files&#41;;
$request = $_SERVER&#91;&#34;QUERY_STRING&#34;&#93;;
if&#40;!&#40;is_numeric&#40;$request&#41; &#38;&#38; $request &#62; 0 &#38;&#38; $files&#91;$request - 1&#93;&#41;&#41;&#123;
	$request = count&#40;$files&#41;;
&#125;
$r_index [...]]]></description>
			<content:encoded><![CDATA[<p>Just save this as index.php and put it in a directory with a bunch of images.  Images are displayed one per page (newest images first), and clicking on an image takes you to the next one.</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #888888; font-weight: bold;">&lt;?</span>
<span style="color: #888888;">exec</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;ls -r|egrep -i <span style="font-weight: bold;">\&quot;</span><span style="font-weight: bold;">\.</span>(gif|jpg|jpeg|png)$<span style="font-weight: bold;">\&quot;</span>&quot;</span>, <span style="color: #F8320D;">$files</span><span style="color: #bbbbbb;">&#41;</span>;
<span style="color: #F8320D;">$files</span> = <span style="color: #888888;">array_reverse</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$files</span><span style="color: #bbbbbb;">&#41;</span>;
<span style="color: #F8320D;">$request</span> = <span style="color: #F8320D;">$_SERVER</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;QUERY_STRING&quot;</span><span style="color: #bbbbbb;">&#93;</span>;
<span style="color: #888888">if</span><span style="color: #bbbbbb;">&#40;</span>!<span style="color: #bbbbbb;">&#40;</span><span style="color: #888888;">is_numeric</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$request</span><span style="color: #bbbbbb;">&#41;</span> &amp;&amp; <span style="color: #F8320D;">$request</span> &gt; <span style="color: #F8320D;">0</span> &amp;&amp; <span style="color: #F8320D;">$files</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">$request</span> - <span style="color: #F8320D;">1</span><span style="color: #bbbbbb;">&#93;</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
	<span style="color: #F8320D;">$request</span> = <span style="color: #888888;">count</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$files</span><span style="color: #bbbbbb;">&#41;</span>;
<span style="color: #bbbbbb;">&#125;</span>
<span style="color: #F8320D;">$r_index</span> = <span style="color: #F8320D;">$request</span> - <span style="color: #F8320D;">1</span>;
<span style="color: #F8320D;">$next</span> = <span style="color: #F8320D;">$r_index</span>;
<span style="color: #888888">if</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$next</span>==<span style="color: #F8320D;">0</span> || !<span style="color: #F8320D;">$files</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #F8320D;">$next</span><span style="color: #F8320D;">-1</span><span style="color: #bbbbbb;">&#93;</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
	<span style="color: #F8320D;">$next</span> = <span style="color: #888888;">count</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$files</span><span style="color: #bbbbbb;">&#41;</span>;
<span style="color: #bbbbbb;">&#125;</span>
<span style="color: #888888; font-weight: bold;">?&gt;</span>
&lt;html&gt;
&lt;head&gt;
	&lt;meta http-equiv=<span style="color: #888888; background-color: #fbf6c5;">&quot;Content-type&quot;</span> content=<span style="color: #888888; background-color: #fbf6c5;">&quot;text/html; charset=utf-8&quot;</span>&gt;
	&lt;title&gt;my image gallery&lt;/title&gt;
&nbsp;
	&lt;style type=<span style="color: #888888; background-color: #fbf6c5;">&quot;text/css&quot;</span> media=<span style="color: #888888; background-color: #fbf6c5;">&quot;screen&quot;</span>&gt;
		a img<span style="color: #bbbbbb;">&#123;</span> border:<span style="color: #F8320D;">0</span>; <span style="color: #bbbbbb;">&#125;</span>
	&lt;/style&gt;
&nbsp;
&lt;/head&gt;
&lt;body&gt;
	&lt;table border=<span style="color: #888888; background-color: #fbf6c5;">&quot;0&quot;</span> cellspacing=<span style="color: #888888; background-color: #fbf6c5;">&quot;0&quot;</span> cellpadding=<span style="color: #888888; background-color: #fbf6c5;">&quot;0&quot;</span> width=<span style="color: #888888; background-color: #fbf6c5;">&quot;100%&quot;</span> height=<span style="color: #888888; background-color: #fbf6c5;">&quot;100%&quot;</span>&gt;
		&lt;tr&gt;&lt;td align=<span style="color: #888888; background-color: #fbf6c5;">&quot;center&quot;</span> valign=<span style="color: #888888; background-color: #fbf6c5;">&quot;middle&quot;</span>&gt;&lt;a href=<span style="color: #888888; background-color: #fbf6c5;">&quot;?&lt;?=$next?&gt;&quot;</span>&gt;&lt;img src=<span style="color: #888888; background-color: #fbf6c5;">&quot;&lt;?=$files[$r_index]?&gt;&quot;</span> /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
	&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/53/super-simple-php-gallery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Bookflipper</title>
		<link>http://jnjnjn.com/38/bookflipper/</link>
		<comments>http://jnjnjn.com/38/bookflipper/#comments</comments>
		<pubDate>Fri, 04 May 2007 18:08:43 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/38/bookflipper/</guid>
		<description><![CDATA[Bookflipper is a tiny web app that serves up pricing information for used books from the Amazon API.  My friend Brian has been picking up cheap books and selling them on Amazon for a profit.  Now when he&#8217;s wondering if a purchase is going to pay off, he can just pull out his [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wlrs.net/flipper">Bookflipper</a> is a tiny web app that serves up pricing information for used books from the Amazon API.  My friend <a href="http://brianheffley.com">Brian</a> has been picking up cheap books and selling them on Amazon for a profit.  Now when he&#8217;s wondering if a purchase is going to pay off, he can just pull out his cell phone and enter the book&#8217;s ISBN into Bookflipper to see what the market is like.</p>
<p><a href="http://wlrs.net/flipper/?isbn=059652708X">Example 1</a><br />
<a href="http://wlrs.net/flipper/?isbn=0345296257">Example 2</a><br />
<a href="http://wlrs.net/flipper/?isbn=015100997X">Example 3</a></p>
<p>The page size is usually between 0.5-0.6k, thanks in part to some <a href="http://jnjnjn.com/33/reducing-html-output-size/">output buffer trickery</a>.  Of course, the preview image is much bigger but it seemed too useful to get rid of.</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/38/bookflipper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress plugin: x-y of z</title>
		<link>http://jnjnjn.com/37/wordpress-plugin-x-y-of-z/</link>
		<comments>http://jnjnjn.com/37/wordpress-plugin-x-y-of-z/#comments</comments>
		<pubDate>Wed, 02 May 2007 20:32:34 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/37/wordpress-plugin-x-y-of-z/</guid>
		<description><![CDATA[You can find it on the plugins download page now.  This basically just gives you a function that will print out a snippet of text like &#8220;Viewing 1-10 of 423 posts&#8221; based on the contents of the page.  Hopefully this is marginally useful to someone out there.
]]></description>
			<content:encoded><![CDATA[<p>You can find it on the <a href="/wordpress-plugins">plugins download page</a> now.  This basically just gives you a function that will print out a snippet of text like &#8220;Viewing 1-10 of 423 posts&#8221; based on the contents of the page.  Hopefully this is marginally useful to someone out there.</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/37/wordpress-plugin-x-y-of-z/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reducing HTML output size</title>
		<link>http://jnjnjn.com/33/reducing-html-output-size/</link>
		<comments>http://jnjnjn.com/33/reducing-html-output-size/#comments</comments>
		<pubDate>Sun, 29 Apr 2007 03:05:23 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/33/reducing-html-output-size/</guid>
		<description><![CDATA[I recently found myself writing a small web app for my friend Brian to use on his cell phone, one of the last places where page size really matters.  Since every character counts, we want to keep our page structure lean and mean (probably a good idea on a mobile device anyway).  But [...]]]></description>
			<content:encoded><![CDATA[<p>I recently found myself writing a small web app for my friend <a href="http://brianheffley.com/">Brian</a> to use on his cell phone, one of the last places where page size really matters.  Since every character counts, we want to keep our page structure lean and mean (probably a good idea on a mobile device anyway).  But after that there&#8217;s a lazy, completely pain-free step we can take: stripping all of the redundant whitespace from our HTML.</p>
<p>With PHP&#8217;s output buffer handlers we can just set it and forget it:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #888888; font-weight: bold;">function</span> clean_html<span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$output</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
	<span style="color: #F8320D;">$output</span> = <span style="color: #888888;">preg_replace</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;/<span style="font-weight: bold;">\n</span>/&quot;</span>, <span style="color: #888888; background-color: #fbf6c5;">&quot;&quot;</span>, <span style="color: #F8320D;">$output</span><span style="color: #bbbbbb;">&#41;</span>;
	<span style="color: #F8320D;">$output</span> = <span style="color: #888888;">preg_replace</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;/<span style="font-weight: bold;">\t</span>/&quot;</span>, <span style="color: #888888; background-color: #fbf6c5;">&quot;&quot;</span>, <span style="color: #F8320D;">$output</span><span style="color: #bbbbbb;">&#41;</span>;
	<span style="color: #F8320D;">$output</span> = <span style="color: #888888;">preg_replace</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot;/<span style="font-weight: bold;">\s</span>+/&quot;</span>, <span style="color: #888888; background-color: #fbf6c5;">&quot; &quot;</span>, <span style="color: #F8320D;">$output</span><span style="color: #bbbbbb;">&#41;</span>;
	<span style="color: #888888">return</span> <span style="color: #F8320D;">$output</span>;
<span style="color: #bbbbbb;">&#125;</span>
&nbsp;
<span style="color: #888888;">ob_start</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">'clean_html'</span><span style="color: #bbbbbb;">&#41;</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">//a bunch of stuff that prints out html</span>
&nbsp;
<span style="color: #888888;">ob_flush</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #bbbbbb;">&#41;</span>;</pre></div></div>

<p>This will give use one long, ugly line of dense markup, but what do we care?  It&#8217;s still valid and the browser handles it just fine.  This seems to reduce page size by about 10-20% in this particular application.</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/33/reducing-html-output-size/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>PHP relative time function</title>
		<link>http://jnjnjn.com/32/php-relative-time-function/</link>
		<comments>http://jnjnjn.com/32/php-relative-time-function/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 17:19:20 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://spud/32/php-relative-time-function/</guid>
		<description><![CDATA[I couldn&#8217;t find a PHP function that would take a number of seconds as input and give me something like &#8220;3 weeks and 2 days&#8221; so I put this together:

function rel_time&#40;$seconds&#41;&#123;
	if&#40;$seconds &#60; 60&#41;&#123;
		if&#40;$seconds &#60; 0&#41;&#123; $seconds = 0; &#125;
		switch&#40;$seconds&#41;&#123;
			case 1:
				return &#34;1 second&#34;;
				break;
			default:
				return &#34;$seconds seconds&#34;;
				break;
		&#125;
	&#125;else&#123;
		$date_push = array&#40;&#41;;
		$time_units = array&#40;	'year'		=&#62; &#40;365*24*60*60&#41;,
					'month'		=&#62; &#40;30*24*60*60&#41;,
					'week'		=&#62; &#40;7*24*60*60&#41;,
					'day'		=&#62; &#40;24*60*60&#41;,
					'hour'		=&#62; &#40;60*60&#41;,
					'minute'	=&#62; &#40;60&#41;&#41;;
		foreach&#40;$time_units as [...]]]></description>
			<content:encoded><![CDATA[<p>I couldn&#8217;t find a PHP function that would take a number of seconds as input and give me something like &#8220;3 weeks and 2 days&#8221; so I put this together:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #888888; font-weight: bold;">function</span> rel_time<span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$seconds</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
	<span style="color: #888888">if</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$seconds</span> &lt; <span style="color: #F8320D;">60</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
		<span style="color: #888888">if</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$seconds</span> &lt; <span style="color: #F8320D;">0</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span> <span style="color: #F8320D;">$seconds</span> = <span style="color: #F8320D;">0</span>; <span style="color: #bbbbbb;">&#125;</span>
		<span style="color: #888888">switch</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$seconds</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
			<span style="color: #888888">case</span> <span style="color: #F8320D;">1</span>:
				<span style="color: #888888">return</span> <span style="color: #888888; background-color: #fbf6c5;">&quot;1 second&quot;</span>;
				<span style="color: #888888">break</span>;
			<span style="color: #888888; font-weight: bold;">default</span>:
				<span style="color: #888888">return</span> <span style="color: #888888; background-color: #fbf6c5;">&quot;$seconds seconds&quot;</span>;
				<span style="color: #888888">break</span>;
		<span style="color: #bbbbbb;">&#125;</span>
	<span style="color: #bbbbbb;">&#125;</span><span style="color: #888888">else</span><span style="color: #bbbbbb;">&#123;</span>
		<span style="color: #F8320D;">$date_push</span> = <span style="color: #888888;">array</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #bbbbbb;">&#41;</span>;
		<span style="color: #F8320D;">$time_units</span> = <span style="color: #888888;">array</span><span style="color: #bbbbbb;">&#40;</span>	<span style="color: #888888; background-color: #fbf6c5;">'year'</span>		=&gt; <span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">365</span>*<span style="color: #F8320D;">24</span>*<span style="color: #F8320D;">60</span>*<span style="color: #F8320D;">60</span><span style="color: #bbbbbb;">&#41;</span>,
					<span style="color: #888888; background-color: #fbf6c5;">'month'</span>		=&gt; <span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">30</span>*<span style="color: #F8320D;">24</span>*<span style="color: #F8320D;">60</span>*<span style="color: #F8320D;">60</span><span style="color: #bbbbbb;">&#41;</span>,
					<span style="color: #888888; background-color: #fbf6c5;">'week'</span>		=&gt; <span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">7</span>*<span style="color: #F8320D;">24</span>*<span style="color: #F8320D;">60</span>*<span style="color: #F8320D;">60</span><span style="color: #bbbbbb;">&#41;</span>,
					<span style="color: #888888; background-color: #fbf6c5;">'day'</span>		=&gt; <span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">24</span>*<span style="color: #F8320D;">60</span>*<span style="color: #F8320D;">60</span><span style="color: #bbbbbb;">&#41;</span>,
					<span style="color: #888888; background-color: #fbf6c5;">'hour'</span>		=&gt; <span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">60</span>*<span style="color: #F8320D;">60</span><span style="color: #bbbbbb;">&#41;</span>,
					<span style="color: #888888; background-color: #fbf6c5;">'minute'</span>	=&gt; <span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">60</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#41;</span>;
		<span style="color: #888888">foreach</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$time_units</span> <span style="color: #888888">as</span> <span style="color: #F8320D;">$unit</span>=&gt;<span style="color: #F8320D;">$unit_time</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
			<span style="color: #F8320D;">$total</span> = <span style="color: #F8320D;">0</span>;
			<span style="color: #888888">if</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$unit</span>==<span style="color: #888888; background-color: #fbf6c5;">'day'</span> &amp;&amp; <span style="color: #888888;">count</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$date_push</span><span style="color: #bbbbbb;">&#41;</span> &amp;&amp; <span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$seconds</span> &lt; <span style="color: #F8320D;">$time_units</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #888888; background-color: #fbf6c5;">'day'</span><span style="color: #bbbbbb;">&#93;</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
				<span style="color: #F8320D;">$seconds</span> = <span style="color: #F8320D;">0</span>;
			<span style="color: #bbbbbb;">&#125;</span>
			<span style="color: #888888">while</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$seconds</span> &gt;= <span style="color: #F8320D;">$unit_time</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
				<span style="color: #F8320D;">$seconds</span> -= <span style="color: #F8320D;">$unit_time</span>;
				<span style="color: #F8320D;">$total</span>++;
			<span style="color: #bbbbbb;">&#125;</span>
			<span style="color: #888888">switch</span> <span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$total</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
				<span style="color: #888888">case</span> <span style="color: #F8320D;">0</span>:
					<span style="color: #888888">break</span>;
				<span style="color: #888888">case</span> <span style="color: #F8320D;">1</span>:
					<span style="color: #F8320D;">$date_push</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #bbbbbb;">&#93;</span> = <span style="color: #888888; background-color: #fbf6c5;">&quot;1 $unit&quot;</span>;
					<span style="color: #888888">break</span>;
				<span style="color: #888888; font-weight: bold;">default</span>:
					<span style="color: #F8320D;">$date_push</span><span style="color: #bbbbbb;">&#91;</span><span style="color: #bbbbbb;">&#93;</span> = <span style="color: #888888; background-color: #fbf6c5;">&quot;$total {$unit}s&quot;</span>;
					<span style="color: #888888">break</span>;
			<span style="color: #bbbbbb;">&#125;</span>
			<span style="color: #888888">if</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888;">count</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #F8320D;">$date_push</span><span style="color: #bbbbbb;">&#41;</span> == <span style="color: #F8320D;">2</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#123;</span>
				<span style="color: #888888">break</span>;
			<span style="color: #bbbbbb;">&#125;</span>
		<span style="color: #bbbbbb;">&#125;</span>
		<span style="color: #888888">return</span> <span style="color: #888888;">implode</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">&quot; and &quot;</span>, <span style="color: #F8320D;">$date_push</span><span style="color: #bbbbbb;">&#41;</span>;
	<span style="color: #bbbbbb;">&#125;</span>
<span style="color: #bbbbbb;">&#125;</span></pre></div></div>

<p>Example usage:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #F8320D;">$rel_time</span>  = rel_time<span style="color: #bbbbbb;">&#40;</span><span style="color: #888888;">time</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #bbbbbb;">&#41;</span> - <span style="color: #F8320D;">$timestamp</span><span style="color: #bbbbbb;">&#41;</span>;
<span style="color: #888888;">print</span> <span style="color: #888888; background-color: #fbf6c5;">&quot;Posted $rel_time ago&quot;</span>;</pre></div></div>

<p>It&#8217;s not as efficient as it could be, but it gets the job done for now.  And it&#8217;s pretty easy to configure it for the time units that you want to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/32/php-relative-time-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Snap Preview Anywhere contest</title>
		<link>http://jnjnjn.com/28/snap-preview-anywhere-contest/</link>
		<comments>http://jnjnjn.com/28/snap-preview-anywhere-contest/#comments</comments>
		<pubDate>Tue, 27 Feb 2007 05:58:48 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://bloop.org/joey/2007/02/26/snap-preview-anywhere-contest/</guid>
		<description><![CDATA[I&#8217;ve spent the past couple of weeks at work building a web application for Snap&#8217;s latest contest and it just went live at contest.snap.com.  It allows users to submit ideas (for new features for a product) and lets them do some simple Digg-style voting.
The concept is very similar to the last Snap contest but [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve spent the past couple of weeks at work building a web application for <a href="http://snap.com">Snap</a>&#8217;s latest contest and it just went live at <a href="http://contest.snap.com">contest.snap.com</a>.  It allows users to submit ideas (for new features for a product) and lets them do some simple Digg-style voting.</p>
<p>The concept is very similar to <a href="http://bloop.org/joey/2006/05/18/snap-blog-launches/">the last Snap contest</a> but it&#8217;s now a standalone web application (instead of a half dozen hacky Wordpress plugins).  The site is actually a heavily-modified version of my message board software that runs <a href="http://omgtru.com">omgtru.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/28/snap-preview-anywhere-contest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GD TTF PCDTR in PHP</title>
		<link>http://jnjnjn.com/23/gd-ttf-pcdtr-in-php/</link>
		<comments>http://jnjnjn.com/23/gd-ttf-pcdtr-in-php/#comments</comments>
		<pubDate>Sun, 08 Oct 2006 23:55:11 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[internet]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://bloop.org/joey/2006/10/08/gd-ttf-pcdtr-in-php/</guid>
		<description><![CDATA[I&#8217;d been having a lot of trouble getting my Ubuntu machine to render TTFs with GD in PHP.  So much trouble that I&#8217;d even tried crazy things like recompiling PHP.  Luckily I found this post on excitris.com and I was able to solve all of my problems with one line of code.  [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d been having a lot of trouble getting my Ubuntu machine to render TTFs with GD in PHP.  So much trouble that I&#8217;d even tried crazy things like recompiling PHP.  Luckily I found <a href="http://www.excitris.com/2005/12/13/168/">this post</a> on excitris.com and I was able to solve all of my problems with one line of code.  Since the code on their site is completely mangled, here it is:</p>

<div class="wp_syntax"><div class="code"><pre class="php"><span style="color: #888888;">putenv</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">'GDFONTPATH='</span> . <span style="color: #888888;">realpath</span><span style="color: #bbbbbb;">&#40;</span><span style="color: #888888; background-color: #fbf6c5;">'.'</span><span style="color: #bbbbbb;">&#41;</span><span style="color: #bbbbbb;">&#41;</span>;</pre></div></div>

<p>Now I can use dynamic text replacement without going insane.</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/23/gd-ttf-pcdtr-in-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
