<?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, 19 Dec 2011 14:49:14 +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>Hoist: Build simple websites fast</title>
		<link>http://jnjnjn.com/243/hoist-build-simple-websites-fast/</link>
		<comments>http://jnjnjn.com/243/hoist-build-simple-websites-fast/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 19:28:16 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[hoist]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/?p=243</guid>
		<description><![CDATA[It seems like 2 or 3 times a year I need to throw together a simple static site for some reason or another. I usually end up writing a basic template and routing system to get the job done. Well, after rewriting this code probably dozens of times over the years, I&#8217;ve polished it up [...]]]></description>
			<content:encoded><![CDATA[<p>It seems like 2 or 3 times a year I need to throw together a simple static site for some reason or another. I usually end up writing a basic template and routing system to get the job done. Well, after rewriting this code probably dozens of times over the years, I&#8217;ve polished it up and sent it out into the world:</p>
<p><a href="https://github.com/wlrs/hoist">Hoist (Github)</a><br />
<a href="http://hoistup.com">Hoist (Demo &#038; documentation)</a></p>
<p>Hoist is a great way of getting a site up and running without writing any code.  You get simple templates, pretty URLs and you don&#8217;t have to worry about databases or bloated CMSes. And it&#8217;s written in PHP so it will work just about anywhere.</p>
<p>Hoist isn&#8217;t going to replace your favorite MVC framework, but it can probably save you an hour or two if you need to put together a website for your dog!</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/243/hoist-build-simple-websites-fast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>stripe-terminal</title>
		<link>http://jnjnjn.com/237/stripe-terminal/</link>
		<comments>http://jnjnjn.com/237/stripe-terminal/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 19:16:33 +0000</pubDate>
		<dc:creator>joey</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://jnjnjn.com/?p=237</guid>
		<description><![CDATA[Stripe.com recently opened up to the public. It&#8217;s by far the best payment processing solution I&#8217;ve seen. The really nice thing about Stripe is that you don&#8217;t need a pain-in-the-ass merchant account to use it, you just hook it up to a regular checking account.
I just posted stripe-terminal, a super simple PHP/JS payment form that [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://stripe.com">Stripe.com</a> recently opened up to the public. It&#8217;s by far the best payment processing solution I&#8217;ve seen. The really nice thing about Stripe is that you don&#8217;t need a pain-in-the-ass merchant account to use it, you just hook it up to a regular checking account.</p>
<p>I just posted <a href="http://github.com/wlrs/stripe-terminal">stripe-terminal</a>, a super simple PHP/JS payment form that anyone with a website and an SSL certificate can use to process payments. This could be used  as a starting point for Stripe integration, or just out of the box as a simple way to get paid (a freelancer sending a link with an invoice, a band using an iphone to sell merch at a show, etc).</p>
<p><a href="http://github.com/wlrs/stripe-terminal">Get the code on github</a> or <a href="https://wlrs.net/stripe-terminal/demo/">try the demo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jnjnjn.com/237/stripe-terminal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
	</channel>
</rss>

