<?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/"
	>

<channel>
	<title>centresource interactive agency blog &#187; Software</title>
	<atom:link href="http://blog.centresource.com/tag/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.centresource.com</link>
	<description>web development &#124; nashville, tn</description>
	<pubDate>Thu, 09 Sep 2010 17:23:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Firefox 3 Beta 4</title>
		<link>http://blog.centresource.com/2008/03/10/firefox-3-beta-4/</link>
		<comments>http://blog.centresource.com/2008/03/10/firefox-3-beta-4/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 22:29:48 +0000</pubDate>
		<dc:creator>Chip Hayner</dc:creator>
		
		<category><![CDATA[Software]]></category>

		<category><![CDATA[browser]]></category>

		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://blog2.centresource.com/2008/03/10/firefox-3-beta-4/</guid>
		<description><![CDATA[Some of us at centre{source} have been running the latest version Firefox (version 3) which is currently in it&#8217;s beta...]]></description>
			<content:encoded><![CDATA[<p>Some of us at centre{source} have been running the latest version Firefox (version 3) which is currently in it&#8217;s beta stages.  It&#8217;s VERY cool and VERY fast&#8230;Beta 3 Release 4 just came out today: <a  target="_blank" href="http://www.mozilla.com/en-US/products/download.html?product=firefox-3.0b4&#038;os=osx">http://www.mozilla.com/en-US/products/download.html?product=firefox-3.0b4&#038;os=osx</a></p>
<p>After installing, we were extremely happy to notice that Flash is once again working as expected, and it&#8217;s all running a lot faster and more stable.  It definitely is a huge improvement over Firefox 3 Beta 3 (which itself was light-years of improvement over Firefox 2!)</p>
<p>Try it out, and let us know what you think!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2008/03/10/firefox-3-beta-4/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Website Grabber &#124; Offline Browser</title>
		<link>http://blog.centresource.com/2007/11/13/website-grabber-offline-browser/</link>
		<comments>http://blog.centresource.com/2007/11/13/website-grabber-offline-browser/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 14:57:54 +0000</pubDate>
		<dc:creator>Nicholas Holland</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Utilities]]></category>

		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2007/11/13/website-grabber-offline-browser/</guid>
		<description><![CDATA[Today, we had a client call us and ask if we can &#8217;save&#8217; their website from an aggressive website designer...]]></description>
			<content:encoded><![CDATA[<p>Today, we had a client call us and ask if we can &#8217;save&#8217; their website from an aggressive website designer that is holding their site hostage.&nbsp; I told them yes and thought an easy solution would be to find a utility that allowed us to easily clone/grab their website.&nbsp; I must say, I was surprised at the difficulty in finding a free utility to do this.</p>
<p>Part of the problem came from the search terms I started with.&nbsp; I thought this would be called a &#8217;site grabber&#8217; - and many paid utilities thought the same :)&nbsp; I then switched to Website Clone, but to no avail.&nbsp; Finally, I that download.com called these utilities &#8220;Offline Browsers&#8221;.&nbsp; Doing a quick search for Offline Browser struck gold!</p>
<p>I found an open-source utility called HTTrack (<a  href="http://www.httrack.com/">http://www.httrack.com/)</a> that does exactly what I needed.&nbsp; Website saved!</p>
<p>
<p class="poweredbyperformancing">Powered by <a  href="http://scribefire.com/">ScribeFire</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2007/11/13/website-grabber-offline-browser/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP Doctrine ORM: Release Candidate 1 - August 31st 2007</title>
		<link>http://blog.centresource.com/2007/07/12/php-doctrine-orm-rc1/</link>
		<comments>http://blog.centresource.com/2007/07/12/php-doctrine-orm-rc1/#comments</comments>
		<pubDate>Thu, 12 Jul 2007 13:52:30 +0000</pubDate>
		<dc:creator>Jonathan Wage</dc:creator>
		
		<category><![CDATA[Doctrine]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[orm]]></category>

		<category><![CDATA[rc1]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2007/07/12/php-doctrine-orm-rc1/</guid>
		<description><![CDATA[The much anticipated PHP Doctrine ORM is nearing a stable release. After a long Google Summer of Code, Konsta Vesterinen,...]]></description>
			<content:encoded><![CDATA[<p>The much anticipated <a  href="http://doctrine.pengus.net">PHP Doctrine ORM</a> is nearing a stable release. After a long <a  href="http://code.google.com/soc/2007/">Google Summer of Code</a>, Konsta Vesterinen, also known as zYne- in IRC, has tentatively scheduled the first release candidate for August 31st. This is very exciting for the <a  href="http://www.php.net">PHP</a> community as it fills a gap that has existed in <a  href="http://www.php.net">PHP</a> since its existence. Stay tuned for more information on this great news.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2007/07/12/php-doctrine-orm-rc1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>symfony 1.0.2 maintenance release</title>
		<link>http://blog.centresource.com/2007/04/17/symfony-102-maintenance-release/</link>
		<comments>http://blog.centresource.com/2007/04/17/symfony-102-maintenance-release/#comments</comments>
		<pubDate>Tue, 17 Apr 2007 05:23:32 +0000</pubDate>
		<dc:creator>Jonathan Wage</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2007/04/17/symfony-102-maintenance-release/</guid>
		<description><![CDATA[From the symfony-project.com website, they announced the release of symfony 1.0.2.
The bug fixes include:
    * r3785: fixed getCookies() call...]]></description>
			<content:encoded><![CDATA[<p>From the symfony-project.com website, they announced the release of symfony 1.0.2.</p>
<p>The bug fixes include:<br />
    * r3785: fixed getCookies() call in sfDebug when using sfConsoleResponse (#1666)<br />
    * r3775: fixed _compute_public_path() when using a query string<br />
    * r3754: updated Propel to 1.2.1 (http://propel.phpdb.org/trac/query?status=closed&#038;milestone=1.2.1&#038;resolution=fixed&#038;order=priority)<br />
    * r3746: fixed output escaping and _get_object_list() (#1593)<br />
    * r3699: fixed highlight_text() doesn&#8217;t work with / (#1621)<br />
    * r3692: fixed i18n support for errors in sfRequest</p>
<p><a  href="http://www.symfony-project.com/weblog/2007/04/17/symfony-1-0-2-is-released.html">Here is the full link on symfony-project.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2007/04/17/symfony-102-maintenance-release/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web Based Time Tracking Nearing Launch - Dekko Time</title>
		<link>http://blog.centresource.com/2006/12/05/dekko-time-nearing-launch/</link>
		<comments>http://blog.centresource.com/2006/12/05/dekko-time-nearing-launch/#comments</comments>
		<pubDate>Wed, 06 Dec 2006 04:33:10 +0000</pubDate>
		<dc:creator>Jonathan Wage</dc:creator>
		
		<category><![CDATA[Dekko]]></category>

		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Utilities]]></category>

		<category><![CDATA[Web Development]]></category>

		<category><![CDATA[Alerts]]></category>

		<category><![CDATA[business-solutions]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[web-development]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/12/05/dekko-time-nearing-launch/</guid>
		<description><![CDATA[Check out our latest product, Dekko Time. After 2  long years we have finally reached a beta stage in the...]]></description>
			<content:encoded><![CDATA[<p>Check out our latest product, <a  href="http://www.dekkotime.com">Dekko Time</a>. After 2  long years we have finally reached a beta stage in the development and we are working hard towards a full launch SOON!</p>
<p>All account types are being offered for free during this beta stage. Use the coupon code &#8216;free&#8217; on the payment tab when signing up for single and multi-user premium account types. Using this coupon will allow you to bypass the payment step and get your premium account for FREE!</p>
<p><a  href="https://app.dekkotime.com/signup.php">Click here to signup for Dekko Time today.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/12/05/dekko-time-nearing-launch/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Open Source Office can handle Blackberry</title>
		<link>http://blog.centresource.com/2006/11/07/open-source-office-can-handle-blackberry/</link>
		<comments>http://blog.centresource.com/2006/11/07/open-source-office-can-handle-blackberry/#comments</comments>
		<pubDate>Tue, 07 Nov 2006 10:38:35 +0000</pubDate>
		<dc:creator>Nicholas Holland</dc:creator>
		
		<category><![CDATA[Linux/BSD]]></category>

		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[Operations]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Productivity]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Utilities]]></category>

		<category><![CDATA[Windows]]></category>

		<category><![CDATA[blackberry]]></category>

		<category><![CDATA[calendar]]></category>

		<category><![CDATA[contacts]]></category>

		<category><![CDATA[eGroupware]]></category>

		<category><![CDATA[ical]]></category>

		<category><![CDATA[Lightning]]></category>

		<category><![CDATA[notes]]></category>

		<category><![CDATA[open]]></category>

		<category><![CDATA[open-source]]></category>

		<category><![CDATA[outlook]]></category>

		<category><![CDATA[plaxo]]></category>

		<category><![CDATA[source]]></category>

		<category><![CDATA[synchronization]]></category>

		<category><![CDATA[SyncML]]></category>

		<category><![CDATA[tasks]]></category>

		<category><![CDATA[Thunderbird]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/11/07/open-source-office-can-handle-blackberry/</guid>
		<description><![CDATA[CentreSource has jumped on the Blackberry bandwagon!  After complaining for months that I spend too much time with email, I...]]></description>
			<content:encoded><![CDATA[<p>CentreSource has jumped on the Blackberry bandwagon!  After complaining for months that I spend too much time with email, I gave up trying to avoid the problem and simply decided to further my addiction :)  We purchased three new Blackberry 8703e&#8217;s and have now started the painful process of getting them to work in our Open Source environment.  That&#8217;s right, Blackberries in a world without Outlook and Exchange.  The verdict?  It works, but not great.<br />
<span id="more-503"></span></p>
<p>So, here&#8217;s our setup:</p>
<p>1) <strong>Email</strong>:  This actually works really well.  We use IMAP and the Blackberry (through Sprint) has a nice service that allows us to connect to our IMAP server.  The Blackberry checks the IMAP Server every 15 minutes and alerts me to the new messages.  I set my blackberry up to be the master and it reconciles every 15 minutes.  WARNING: This means that my blackberry is actually deleting messages from my IMAP (and to be literal, it is expunging them - so they aren&#8217;t even in my trash folder).  I chose this option so I don&#8217;t have hundreds of emails waiting on me when I get back to the office.  Remember, I can&#8217;t sync (but that comes later).</p>
<p>2) <strong>Local PIM (personal information management)</strong>:  This includes contacts, calendar, tasks, and notes.  Simply put, forget about using them.  We have two issues that we&#8217;re up against.  First, we use Thunderbird - so we don&#8217;t have a good option for calendar, tasks, and notes.  I hope their progress with <a  href="http://www.mozilla.org/projects/calendar/">Sunbird and Lightning</a> continues!  The calendar isn&#8217;t as hopeless as Tasks/Notes since the Blackberry can sync with iCal formatted calendars.  If you use an iCal compatible Calendar, then you can have your events.</p>
<p>As for locally stored contacts, I couldn&#8217;t find an easy solution to sync to the Blackberry.  The best idea I had was to use <a  href="http://www.plaxo.com/downloads/tbird">Plaxo&#8217;s Thunderbird client</a> and access via the web (<a  href="http://www.plaxo.com/premium?src=corp_nav">premium service</a>)</p>
<p>3) <strong>Groupware Server:</strong>  If you are using an OpenSource Groupware product, there are more options available for syncing the blackberry.  For basic calendars &#038; tasks, the Blackberry will sync with any iCal formatted calendar.  To do this, you will need an application like PocketMac.</p>
<p>For a more robust solution, the best option is to setup a Groupware solution that is compatible with a <a  href="http://www.funambol.com/opensource/downloads.html">SyncML server like funambol</a>.  There are many solutions available (and even some services like <a  href="https://zyb.com//">Zyb</a>).  We use <a  href="http://www.egroupware.org">eGroupware</a> and it <a  href="http://www.egroupware.org/index.php?page_name=sync&#038;wikipage=SyncMLFunambol">integrates with SyncML</a>.  For the Blackberry, <a  href="http://www.handango.com/blackberry/PlatformProductDetail.jsp?siteId=1181&#038;osId=824&#038;jid=F874566CD4856D63E4127X59B1X3AD7A&#038;platformId=5&#038;productType=2&#038;productId=180473&#038;sectionId=0&#038;catalog=40&#038;topSectionId=-1">SyncBerry [$29.95]</a> provides Over-The-Air (OTA) synchronization with Contacts, Calendar, and Tasks (InfoLog).  Once the SyncML server is setup, there are two options for syncing Thunderbird.  One is an community supported <a  href="http://sourceforge.net/projects/sync4jmozilla">Mozilla extension of funambol</a> and the other is a <a  href="http://www.topologilinux.com/syncml/">&#8216;beta&#8217; application called TSync</a>.  This ensures that the Blackberry &#038; Thunderbird are both sync&#8217;d to the corporate groupware package/service.</p>
<p><em>Note: I&#8217;m writing this article as I research these solutions.  We haven&#8217;t implemented the SyncML server, so I can&#8217;t vouch for the success of this piece.</em></p>
<p>4) <strong>Internet Access (Phone)</strong>:  This is my favorite part!  First, the 8703e has a beautiful screen and it is very easy to access web pages.  For our company, we disabled images &#038; their placeholders to increase load speeds.  Since we haven&#8217;t implemented SyncML, everyone simply accesses eGroupware via the phone&#8217;s web browser.  It isn&#8217;t pretty, but it&#8217;s functional (especially if you make the calendar display in list view).</p>
<p><strong>** BONUS**</strong><br />
This phone actually acts as a wireless Modem on the Sprint Network!!!  All of the research I&#8217;ve conducted has been through the phone - connected via a USB cable.  The 8703e on Sprint&#8217;s EDVO network is getting an average of 340kbps - easily enough for basic web usage.</p>
<p>All in all, I think the Blackberry will be a fantastic solution once we have eGroupware+SyncML+SyncBerry+Thunderbird/funambol.  In fact, CentreSource will begin providing Nashville clients with installations of the OpenSource combination upon successful implementation.</p>
<p>Until then, it is a great tool for checking IMAP email and accessing the web (via the phone and as a modem).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/11/07/open-source-office-can-handle-blackberry/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Firefox 2.0</title>
		<link>http://blog.centresource.com/2006/10/24/firefox-20/</link>
		<comments>http://blog.centresource.com/2006/10/24/firefox-20/#comments</comments>
		<pubDate>Tue, 24 Oct 2006 19:01:32 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[browsers]]></category>

		<category><![CDATA[firefox-2.0]]></category>

		<category><![CDATA[mozilla]]></category>

		<category><![CDATA[opera]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/10/24/firefox-20/</guid>
		<description><![CDATA[I just read a quick review of Firefox 2.0. I am not terribly impressed &#8212; with Firefox itself, or the...]]></description>
			<content:encoded><![CDATA[<p>I just read a <a  href="http://www.readwriteweb.com/archives/firefox_20_review.php">quick review</a> of Firefox 2.0. I am not terribly impressed &#8212; with Firefox itself, or the review for that matter:</p>
<blockquote><p>
The first thing that stands out in the new Firefox is the more modern, snappier look and feel. Everything is more shinny, more playful and more clickable.
</p></blockquote>
<p>Can anyone tell me what this means? This is followed by:</p>
<blockquote><p>
Tabbed browsing was a major browser innovation that Firefox popularized
</p></blockquote>
<p>No. Opera popularized tabs. But that&#8217;s a forgiveable mistake. It looks like Firefox 2.0 will of course be a decent browser and a vastly superior choice to even IE 7, but it doesn&#8217;t look substantially different from Firefox 1.5. This appears to be a &#8220;hey let&#8217;s make this a major number release for some reason&#8221; release &#8212; i.e. marketing.</p>
<p>I&#8217;ll continue to stick with Opera.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/10/24/firefox-20/feed/</wfw:commentRss>
		</item>
		<item>
		<title>VH1:  The lost Mac Ads</title>
		<link>http://blog.centresource.com/2006/07/19/vh1-the-lost-mac-ads/</link>
		<comments>http://blog.centresource.com/2006/07/19/vh1-the-lost-mac-ads/#comments</comments>
		<pubDate>Wed, 19 Jul 2006 17:35:37 +0000</pubDate>
		<dc:creator>Nicholas Holland</dc:creator>
		
		<category><![CDATA[Company News]]></category>

		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[Apple]]></category>

		<category><![CDATA[funny]]></category>

		<category><![CDATA[Mac]]></category>

		<category><![CDATA[media]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/07/19/vh1-the-lost-mac-ads/</guid>
		<description><![CDATA[The new mac commercials are great - especially given their crafty delivery of undertone messages about PC users.  On the...]]></description>
			<content:encoded><![CDATA[<p>The new mac commercials are great - especially given their crafty delivery of undertone messages about PC users.  On the other hand, these parody commercials are hilarious as well.  Tit for Tat baby&#8230; tit for tat.</p>
<p><a  href="http://www.bestweekever.tv/2006/07/07/bwe-mac-ads/">http://www.bestweekever.tv/2006/07/07/bwe-mac-ads/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/07/19/vh1-the-lost-mac-ads/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP Session Lifetime: An Adventure</title>
		<link>http://blog.centresource.com/2006/05/23/php-session-lifetime-an-adventure/</link>
		<comments>http://blog.centresource.com/2006/05/23/php-session-lifetime-an-adventure/#comments</comments>
		<pubDate>Tue, 23 May 2006 05:34:34 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[expire]]></category>

		<category><![CDATA[maxlifetime]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[session]]></category>

		<category><![CDATA[session.gc_maxlifetime]]></category>

		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/05/23/php-session-lifetime-an-adventure/</guid>
		<description><![CDATA[We had a bit of a sticky situation here at the Centresource stomping grounds this past couple of weeks. We...]]></description>
			<content:encoded><![CDATA[<p>We had a bit of a sticky situation here at the Centresource stomping grounds this past couple of weeks. We have a server with a multitude of environments served via our Apache webserver. It&#8217;s a fairly simple setup: we have a virtualhost devoted to development environments for all of our software developers, and then a plethora of virtualhosts for the various web-based applications we use: some home-brewed, some OSS web applications we use for various business functions (CMS, CRM, Groupware, etc..).</p>
<p>The mystery started when sessions started mysteriously expiring prematurely on two of our most popular web applications: <a  href="http://app.dekkotime.com/">DekkoTime</a>, and our internal CRM/groupware application. It started about two weeks ago, with no discernable changes to our configuration that could be responsible.</p>
<p>So to understand what was necessary to track down this problem, we have to explore a little bit about how PHP session data storage and expiration works:</p>
<p><span id="more-484"></span></p>
<p>When PHP creates a session with session_start(), it dumps a file in a particular path. This is governed by the <i>session.save_path</i> parameter in php.ini &#8212; /tmp by default. But naturally, as sessions go idle or are abandoned, they need to be cleaned up, so that our save_path isn&#8217;t overwhelmed with old session data before it has a chanced to be cleaned (usually on reboot, in the case of /tmp). Enter garbage collection.</p>
<p>Garbage collection in PHP is, from what I gather, piggybacked on invocations of the PHP interpreter itself. When (if) it runs, it deletes any session files in the save_path that haven&#8217;t been accessed in a certain amount of time, governed by another php.ini setting: session.gc_maxlifetime. There are other parameters that dictate the probability/frequency with which the garbage collection routine runs, but they are irrelevant to this discussion.</p>
<p>So, naturally, the first thing I checked to see why our sessions were expiring was session.gc_maxlifetime in our php.ini:</p>
<pre>
session.gc_maxlifetime = 72000
</pre>
<p>72000 seconds &#8212; that&#8217;s 20 hours. So, no problem there. It appeared from our experience that sessions were expiring between 45 minutes to an hour &#8212; far less than 20 hours. I roughly verified the time that sessions were disappearing by initiating a new session and doing this:</p>
<pre>
date; while true;
do
if [ ! -f sess_235f09d44d5288554cf7a55fdfbc6df7 ];
then echo "session has disappeared" | mail cwage@centresource.com;
break;
fi;
sleep 1;
done
</pre>
<p>That way, I&#8217;d get mailed when the session disappeared. Pretty sick, I know. This verified that sessions were disappearing after around 45 minutes of idle time. I could not find an explanation for this: session.gc_maxlifetime was set to 72000 in our php.ini. Maybe it was being overridden in that particular php environment? &#8220;print_r(ini_get(&#8221;session.gc_maxlifetime&#8221;))&#8221; bore the same result: 72000. No problem there.</p>
<p>Here I took a slight detour in wondering if there was something else diligently cleaning up an admittedly messy and full /tmp directory (~500 days of uptime will do that). So I started looking for some sort of utility that would let me monitor a file and see what process was responsible for unlinking it (the session file, that is). Sadly, there&#8217;s no utility that can accomplish this with a stock kernel in Linux: <a  href="http://www.fwatch.org/">fwatch</a> appears to accomplish this, but I wasn&#8217;t about to install a kernel module labelled as an alpha release just to track this down. Eventually I convinced myself, anyway, that the likelihood of some rogue process cleaning up /tmp was pretty unlikely, even for Linux.</p>
<p>So, I resorted to just googling my little heart out. Here&#8217;s where things get interesting.</p>
<p>Naturally, any application can override <i>session.gc_maxlifetime</i> to whatever pleases it &#8212; in fact, most OSS PHP applications do just this, in order to enforce its own particular idea of a sensible session expiration time. But here&#8217;s where things get sticky. If you override <i>session.gc_maxlifetime</i> in one particular environment, how does it know which sessions are its own, as opposed to others that should be adhering to the global setting?</p>
<p>Well, apparently, it doesn&#8217;t. When the PHP garbage collection routine runs, as far as I can tell, it blindly removes sessions from <i>session.save_path</i> that haven&#8217;t been accessed in longer than <i>session.gc_maxlifetime</i> &#8212; <b>period</b>. So, as it happens, what changed two weeks ago? We started playing with a number of PHP applications: <a  href="http://www.joomla.org/">Joomla!</a> and <a  href="http://www.zen-cart.com/">Zen-Cart</a>, both of whom (among others), take it upon themselves to override <i>session.gc_maxlifetime</i> to a smaller value, which appears to have been, drumroll please: around 45 minutes. So, every time the PHP interpreter was invoked in this environment, it obliterated sessions for all our other applications if they had been idle for 45 minutes or more. Harsh.</p>
<p>I am not sure what the preferred solution to this is supposed to be, and I&#8217;m also surprised that this isn&#8217;t a more common problem &#8212; overriding <i>session.gc_maxlifetime</i> is a fairly common thing for PHP applications to do these days. I am surprised these unexpected results would go unnoticed. In any event, my solution was just to create a hierarchy of per-application directories inside <i>/tmp/php</i> (owned by www-data, so Apache can write to them), and then adding a line to my Apache virtualhost config for each one, for example:</p>
<pre>
php_admin_value session.save_path /tmp/php4/dekko
</pre>
<p>In this way, the save_path is isolated for each application, so an overridden <i>session.gc_maxlifetime</i> for another codebase won&#8217;t affect it.</p>
<p>Phew.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/05/23/php-session-lifetime-an-adventure/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Simplegraph</title>
		<link>http://blog.centresource.com/2006/05/18/simplegraph/</link>
		<comments>http://blog.centresource.com/2006/05/18/simplegraph/#comments</comments>
		<pubDate>Thu, 18 May 2006 06:26:40 +0000</pubDate>
		<dc:creator>Chris Wage</dc:creator>
		
		<category><![CDATA[Miscellaneous]]></category>

		<category><![CDATA[commandline]]></category>

		<category><![CDATA[graph]]></category>

		<category><![CDATA[perl]]></category>

		<category><![CDATA[Software]]></category>

		<category><![CDATA[uniq]]></category>

		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.centresource.com/2006/05/18/simplegraph/</guid>
		<description><![CDATA[I use command-line utilities to do data-mining on logs compulsively &#8212; often in sick and twisted ways. There are many...]]></description>
			<content:encoded><![CDATA[<p>I use command-line utilities to do data-mining on logs compulsively &#8212; often in sick and twisted ways. There are many times in which I perform a tortuous serious of grep/perl/awk commands which wind up being fed to &#8220;sort | uniq -c | sort -nr&#8221; or something similar.</p>
<p>Those of you familiar with those commands already know that the result is a list of unique values added up and displayed with a total, e.g.:</p>
<pre>
   289 text1
   134 text2
   134 text3
</pre>
<p>This is pretty handy for visualizing statistics. The next step for visualization of course is graphing it. <a  href="http://www.gnuplot.info/">GNUPlot</a> is the reigning king of open-source graphing applications, but in this case, I wanted something simpler. I wanted something to which I could simply pipe the output of my various shell concoctions and get a graph on STDOUT. Unable to find anything, I wrote a simple perl script to do it. It expects the output of &#8220;uniq -c&#8221; on stdin or in a file given as an argument, and it spits out an image on stdout. That&#8217;s pretty much all there is to it. The image is PNG by default, and the width of the image is 10 pixels * [num of rows] &#8212; so if you have a lot of rows, you will get a very wide image, although you can constrain the image using the &#8220;&#8211;width&#8221; option.</p>
<p>You can find a copy of the script here: <a  href="http://blog.centresource.com/wp-content/simplegraph.txt">simplegraph.pl</a></p>
<p>Let me know if you find any problems with it &#8212; it was a quick and dirty hack job. Happy graphing!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.centresource.com/2006/05/18/simplegraph/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
