<?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>Commavee &#187; Tech Tips</title>
	<atom:link href="http://commavee.com/category/tech-tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://commavee.com</link>
	<description>from John Minnihan, founder of Freepository.</description>
	<lastBuildDate>Sat, 20 Feb 2010 19:08:12 +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>Tech Tip: Multi-line Perl regex pattern match</title>
		<link>http://commavee.com/2009/06/18/tech-tip-multi-line-perl-regex-pattern-match/</link>
		<comments>http://commavee.com/2009/06/18/tech-tip-multi-line-perl-regex-pattern-match/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 16:56:53 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Source Control]]></category>
		<category><![CDATA[Tech Tips]]></category>

		<guid isPermaLink="false">http://commavee.com/2009/06/18/tech-tip-multi-line-perl-regex-pattern-match/</guid>
		<description><![CDATA[This post illustrates a complex pattern-matching technique in Perl.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2009%2F06%2F18%2Ftech-tip-multi-line-perl-regex-pattern-match%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2009%2F06%2F18%2Ftech-tip-multi-line-perl-regex-pattern-match%2F" height="61" width="51" /></a></div><p><span style="font-family:Arial">Yesterday, I encountered an analysis issue that appeared to be resolvable with a simple pattern replacement technique. <br />
<span id="more-565"></span><br />
This turned out to be a bit more complex than estimated, as the pattern spanned multiple lines and I struggled to get the regex constructed to match this use case.</span></p>
<p><span style="font-family:Arial">I finally figured it out, and although the overall problem remains unresolved (it has many layers), this particular part works well.  My error was in how I viewed use of  /s and /m as mutually exclusive; they aren&#8217;t of course, and I have made that mistake one other time over the years.   I also hadn&#8217;t set the input record separator ($/) to paragraph read mode.   I&#8217;m posting details here to document my specific usage.</span></p>
<p><span style="font-family:Arial">Assumptions:</span></p>
<ul>
<li><span style="font-family:Arial">A literal pattern exists that is present in multiple places in a file</span></li>
<li><span style="font-family:Arial">The literal pattern spans multiple lines in the file</span></li>
<li>
<span style="font-family:Arial">Literal pattern is</span></p>
<ul>
<li><span style="font-family:Courier">Node-path: branches/%%BRANCHES%%</span></li>
<li><span style="font-family:Courier">Node-kind: dir</span></li>
<li><span style="font-family:Courier">Node-action: add</span></li>
</ul>
</li>
<li><span style="font-family:Arial">Perl is being used to read the file and current line of file is <span style="font-family:Courier">$line</span></span></li>
<li><span style="font-family:Arial">Objective is to delete all occurrences of this pattern from the file one <span style="font-family:Courier">$line</span> at a time</span></li>
</ul>
<p><span style="font-family:Arial">Here&#8217;s how I did that:</span></p>
<p>[read the file &amp; crawl thru the lines]</p>
<p><span style="font-family: Courier; font-size: 10pt">$/ = &#8221;;</span></p>
<p><span style="font-family: Courier; font-size: 10pt">$line =~ s/^Node-path:\sbranches\/%%BRANCHES%%.*?^Node-kind:\sdir.*?^Node-action:\sadd.*?//sm;</span></p>
<p><span style="font-family:Arial"><small>Tags: <a rel="tag" href="http://technorati.com/tag/perl">perl</a>, <a rel="tag" href="http://technorati.com/tag/regex">regex</a>, <a rel="tag" href="http://technorati.com/tag/tech-tips">tech-tips</a></small></span></p>
<p><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/uploads/2009/06/tech-tip-multi-line-perl-regex-pattern-match--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=565&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2009/06/18/tech-tip-multi-line-perl-regex-pattern-match/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quick file &amp; directory cleanup tools</title>
		<link>http://commavee.com/2009/06/15/quick-file-directory-cleanup-tools/</link>
		<comments>http://commavee.com/2009/06/15/quick-file-directory-cleanup-tools/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 01:49:19 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Tech Tips]]></category>

		<guid isPermaLink="false">http://commavee.com/2009/06/15/quick-file-directory-cleanup-tools/</guid>
		<description><![CDATA[Every sys admin needs to quickly free up disk space from time to time, and here are two well-tested scripts I use for exactly this purpose.
The first is a simple command-line use of exec that uses find to construct of list of matching file names, in this case all gzipped tarballs, and then runs the [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2009%2F06%2F15%2Fquick-file-directory-cleanup-tools%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2009%2F06%2F15%2Fquick-file-directory-cleanup-tools%2F" height="61" width="51" /></a></div><p><span style="font-family: Arial">Every sys admin needs to quickly free up disk space from time to time, and here are two well-tested scripts I use for exactly this purpose.</span></p>
<p><span style="font-family: Arial">The first is a simple command-line use of <span style="font-family:Courier">exec</span> that uses <span style="font-family:Courier">find</span> to construct of list of matching file names, in this case all <span style="font-family:Courier">gzipped tarballs</span>, and then runs the <span style="font-family:Courier">rm</span> command on them.  The curly braces <span style="font-family:Courier">&quot;{}&quot;</span> act as a holder for each file name from the list, and the trailing <span style="font-family:Courier">&quot;\&quot;</span> is used to escape the <span style="font-family:Courier">&quot;;&quot;</span>, so that it is passed to <span style="font-family:Courier">find</span> as a literal command terminator.</span></p>
<p><span style="font-family:Courier">#find . -name *.tar.gz -exec rm {} \;</span></p>
<p><span style="font-family:Arial">You may find (pun intended) that you need a slightly more sophisticated way to construct the list of things to remove.  For example,  to recursively delete all files &amp; directories from an arbitrary depth in the file-system, except for special files or directories.  To accomplish this, I use a small Perl utility I wrote that uses the <span style="font-family:Courier">File::Find</span> module.  </span></p>
<p><span style="font-family:Arial">Here is the actual script I use generalized out with a fake <span style="font-family:Courier">$top</span> and<span style="font-family:Courier"> </span></span><span style="font-family:Courier">/some-pattern-to-exclude/.<span style="font-family:Arial"> This script will</span></span><span style="font-family:Arial"> crawl down (actually the direction that </span><span style="font-family:Courier">finddepth</span><span style="font-family:Arial"> goes is <strong>up)</strong> a list of files &amp; directories, and unless the pattern is matched, each file in the directory &amp; then the directory itself is deleted. </span></p>
<p><span style="font-family:Arial">How does this work?  Pretty simple &#8211; the <span style="font-family:Courier">File::Find</span> module loads some routines, one of which is <span style="font-family:Courier">finddepth.</span> The first argument it expects is a routine to run against all files &amp; directories found, starting at the location named in the second argument.  The <span style="font-family:Courier">wanted</span> routine is run on each element in <span style="font-family:Courier">finddepth&#8217;s</span> list &amp; you can use  <span style="font-family:Courier">finddepth&#8217;s</span> variables to make your <span style="font-family:Courier">wanted</span> routine smarter.</span></p>
</p>
<p><img height="341" style="margin: 5px" width="532" alt="" src="http://commavee.com/wp-content/uploads/2009/06/cleanUp1.jpg" /></p>
</p>
<p><small>Tags: <a rel="tag" href="http://technorati.com/tag/tech+tips">tech tips</a>, <a rel="tag" href="http://technorati.com/tag/perl">perl</a>, <a rel="tag" href="http://technorati.com/tag/sysadmin">sysadmin</a></small></p>
<p><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/uploads/2009/06/quick-file-directory-cleanup-tools--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=560&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2009/06/15/quick-file-directory-cleanup-tools/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Converting .DOC to .PDF.  Is this difficult?</title>
		<link>http://commavee.com/2008/01/26/converting-doc-to-pdf-is-this-difficult/</link>
		<comments>http://commavee.com/2008/01/26/converting-doc-to-pdf-is-this-difficult/#comments</comments>
		<pubDate>Sat, 26 Jan 2008 21:30:46 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Tech Tips]]></category>

		<guid isPermaLink="false">http://commavee.com/2008/01/26/converting-doc-to-pdf-is-this-difficult/</guid>
		<description><![CDATA[If you are using a Mac running a recent version of OSX, the answer is No.  In fact this is super easy and is available from inside Microsoft Word.   If you run Windows, this feature isn&#8217;t available without an additional plugin from a third-party.
 

To convert a .DOC file to .PDF on your Mac, follow these [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2008%2F01%2F26%2Fconverting-doc-to-pdf-is-this-difficult%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2008%2F01%2F26%2Fconverting-doc-to-pdf-is-this-difficult%2F" height="61" width="51" /></a></div><p>If you are using a Mac running a recent version of OSX, the answer is No.  In fact this is super easy and is available from inside Microsoft Word.   If you run Windows, this feature isn&#8217;t available without an additional plugin from a third-party.</p>
<p> </p>
<p><span id="more-438"></span></p>
<p>To convert a .DOC file to .PDF on your Mac, follow these steps:</p>
<p> </p>
<p> </p>
<ul>
<li>Open the document in Word</li>
<li>Click &#8216;Print&#8217;</li>
<li>Notice the option at the bottom of the page &#8216;PDF &gt;&#8217;</li>
<li>Click that &#8220;&gt;&#8221; and then &#8216;Save as PDF&#8217;</li>
<li>Give the document a new name, like &#8220;document.pdf&#8221;</li>
<li>Click save</li>
<li>You&#8217;re done</li>
</ul>
<p> </p>
<p> </p>
<p>This is handled in the print function because the operating system takes care of that. That is, this functionality is outside the control of the currently running application.  The currently running application is Word but the operating system is Mac OSX.  This isn&#8217;t a feature of Word and that&#8217;s why it isn&#8217;t found somewhere in the tools menu or in the &#8216;Save as&#8217; menu.</p>
<p> </p>
<p>Why is that?  A couple reasons, at least:  Apple licenses the PDF spec from Adobe and this has allowed them to write a mini-conversion utility right into the print sub-system.  The other reason is for purely competitive purposes: Microsoft wants to keep the document in .DOC format (or at least another Microsoft format), so saving to .PDF will neither show up in a top-level Word menu nor in the Windows operating system print sub-system anytime soon.  Apple has slipped this feature into an area they control and Microsoft can&#8217;t touch it.</p>
<p> </p>
<p><small>Tags: <a rel="tag" href="http://technorati.com/tag/pdf">pdf</a>, <a rel="tag" href="http://technorati.com/tag/convertor">convertor</a>, <a rel="tag" href="http://technorati.com/tag/doc">doc</a></small></p>
<p><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/uploads/2008/01/converting-doc-to-pdf-is-this-difficult--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=438&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2008/01/26/converting-doc-to-pdf-is-this-difficult/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gmail, Apple Mail &amp; the iPhone</title>
		<link>http://commavee.com/2007/11/17/gmail-apple-mail-the-iphone/</link>
		<comments>http://commavee.com/2007/11/17/gmail-apple-mail-the-iphone/#comments</comments>
		<pubDate>Sat, 17 Nov 2007 18:27:42 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Tech Tips]]></category>

		<guid isPermaLink="false">http://commavee.com/2007/11/17/gmail-apple-mail-the-iphone/</guid>
		<description><![CDATA[Since Gmail began supporting IMAP, setting up Gmail to work with both Apple Mail &#38; the iPhone is a common need for those of us with both iPhones and new Macbooks.
I began using Gmail about two weeks and had noticed the inconsistencies mentioned in the below article, and was both pleased to see that the [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2007%2F11%2F17%2Fgmail-apple-mail-the-iphone%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2007%2F11%2F17%2Fgmail-apple-mail-the-iphone%2F" height="61" width="51" /></a></div><p>Since Gmail began supporting IMAP, setting up Gmail to work with both Apple Mail &amp; the iPhone is a common need for those of us with both iPhones and new Macbooks.</p>
<p>I began using Gmail about two weeks and had noticed the inconsistencies mentioned in the below article, and was both pleased to see that the solution was so simple as well as slightly embarrassed that I hadn&#8217;t yet resolved the issue myself.</p>
<p>Here&#8217;s the HOWTO:</p>
<p><a href="http://5thirtyone.com/archives/862">http://5thirtyone.com/archives/862</a>&nbsp;<br />
   <!-- technorati tags begin -->
<p style="font-size:10px;text-align:right;">Tags: <a href="http://technorati.com/tag/gmail" rel="tag">gmail</a>, <a href="http://technorati.com/tag/iphone" rel="tag">iphone</a>, <a href="http://technorati.com/tag/%20apple" rel="tag"> apple</a>, <a href="http://technorati.com/tag/%20mail" rel="tag"> mail</a></p>
<p><!-- technorati tags end --><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/uploads/2007/11/gmail-apple-mail-the-iphone--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=423&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2007/11/17/gmail-apple-mail-the-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX Logfile Tailer &amp; Viewer</title>
		<link>http://commavee.com/2007/04/13/ajax-logfile-tailer-viewer/</link>
		<comments>http://commavee.com/2007/04/13/ajax-logfile-tailer-viewer/#comments</comments>
		<pubDate>Fri, 13 Apr 2007 20:20:11 +0000</pubDate>
		<dc:creator>John Minnihan</dc:creator>
				<category><![CDATA[General Technology]]></category>
		<category><![CDATA[Tech Tips]]></category>

		<guid isPermaLink="false">http://commavee.com/2007/04/13/ajax-logfile-tailer-viewer/</guid>
		<description><![CDATA[Recently I had a need for a simple logfile viewer for use in some stuff we have planned at Freepository.  But this log file viewer had a few requirements that made it unique: it had to get the log file contents from the server in small chunks, not tie up the browser (such as [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fcommavee.com%2F2007%2F04%2F13%2Fajax-logfile-tailer-viewer%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fcommavee.com%2F2007%2F04%2F13%2Fajax-logfile-tailer-viewer%2F" height="61" width="51" /></a></div><p>Recently I had a need for a simple logfile viewer for use in some stuff we have planned at Freepository.  But this log file viewer had a few requirements that made it unique: it had to get the log file contents from the server in small chunks, not tie up the browser (such as an old-style synchronous request would do), and refresh in the browser without reloading the page.</p>
<p>I thought I could easily find one that someone had already written, but Google was not my friend.  I found nothing even close, so I wrote my own.  Here it is.</p>
<p>Working example:  <a href="https://freepository.com/ajax-logtail-viewer/ajax-logtail-viewer.php">https://freepository.com/ajax-logtail-viewer/ajax-logtail-viewer.php</a></p>
<p><span id="more-396"></span><br />
<code>/* logtail.js<br />
an ajax log file tailer / viewer<br />
copyright 2007 john minnihan.</p>
<p>http://freepository.com</p>
<p>Released under these terms<br />
1. This script, associated functions and HTML code ("the code") may be used by you ("the recipient") for any purpose.<br />
2. This code may be modified in any way deemed useful by the recipient.<br />
3. This code may be used in derivative works of any kind, anywhere, by the recipient.<br />
4. Your use of the code indicates your acceptance of these terms.<br />
5. This notice must be kept intact with any use of the code to provide attribution.<br />
*/</code></p>
<p><code>function getLog(timer) {</code><br />
<code><br />
var url = "http://your.system.yourdomain.com/logtail.php";<br />
request.open("GET", url, true);<br />
request.onreadystatechange = updatePage;<br />
request.send(null);<br />
startTail(timer);<br />
}</code><br />
<code><br />
function startTail(timer) {<br />
if (timer == "stop") {<br />
stopTail();<br />
} else {<br />
t= setTimeout("getLog()",<span style="color: red"><strong>4000</strong></span>);<br />
}<br />
}</code></p>
<p><code>function stopTail() {<br />
clearTimeout(t);<br />
var pause = "The log viewer has been paused. To begin viewing logs again, click the Start Viewer button.";<br />
logDiv = document.getElementById("log");<br />
var newNode=document.createTextNode(pause);<br />
logDiv.replaceChild(newNode,logDiv.childNodes[0]);<br />
}</code></p>
<p><code>function updatePage() {<br />
if (request.readyState == 4) {<br />
if (request.status == 200) {<br />
var currentLogValue = request.responseText.split("\n");<br />
eval(currentLogValue);<br />
logDiv = document.getElementById("log");<br />
var logLine = ' ';<br />
for (i=0; i &lt; currentLogValue.length - 1; i++) {<br />
logLine += currentLogValue[i] + '&lt;br/&gt;\n';<br />
}<br />
logDiv.innerHTML=logLine;<br />
} else<br />
alert("Error! Request status is " + request.status);<br />
}<br />
}</code></p>
<p>This is implemented via a div named log, two buttons (Start &amp; Stop) and of course the javascript files themselves.  Here&#8217;s the HTML snippet:</p>
<p><code>&lt;html&gt;<br />
&lt;head&gt;<br />
...<br />
&lt;script type="text/javascript" src="js/ajax.js"&gt; &lt;/script&gt;<br />
&lt;script type="text/javascript" src="js/logtail.js"&gt; &lt;/script&gt;<br />
...<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
...</code></p>
<p><code>&lt;button onclick="getLog('start');"&gt;Start Log&lt;/button&gt;<br />
&lt;button onclick="stopTail();"&gt;Stop Log&lt;/button&gt;</code></p>
<p><code>...<br />
&lt;div id="log" style="border:solid 1px #dddddd; margin-left:25px; font-size:9px;<br />
padding-left:5px; padding-right:10px; padding-top:10px; padding-bottom:20px;<br />
margin-top:10px; margin-bottom:10px; width:90%; text-align:left;"&gt;<br />
This is the Log Viewer. To begin viewing the log live in this window, click Start Viewer. To stop the window refreshes, click Pause Viewer.<br />
&lt;/div&gt;<br />
&lt;p&gt;...&lt;/p&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></p>
<p>For completeness, here is the source for ajax.js.  I did not write this myself; I think it came from Brett McLaughlin.</p>
<p><code>/* ajax.js */<br />
var request = null;<br />
try {<br />
request = new XMLHttpRequest();<br />
} catch (trymicrosoft) {<br />
try {<br />
request = new ActiveXObject("Msxml2.XMLHTTP");<br />
} catch (othermicrosoft) {<br />
try {<br />
request = new ActiveXObject("Microsoft.XMLHTTP");<br />
} catch (failed) {<br />
request = null;<br />
}<br />
}<br />
}<br />
if (request == null)<br />
alert("Error creating request object!");</code></p>
<p><code> </code></p>
<p><code>var request = createRequest();</code></p>
<p>And here is the trivial PHP script (&#8220;logtail.php&#8221; in the example above) that is called asynchronously:</p>
<p><code>&lt;?<br />
// logtail.php<br />
$cmd = "tail -10 /path/to/your/logs/some.log";<br />
exec("$cmd 2&gt;&amp;1", $output);<br />
foreach($output as $outputline) {<br />
echo ("$outputline\n");<br />
}<br />
?&gt;</code></p>
<p>Comments are welcome, and though I hope this is useful to you&#8230; I don&#8217;t have time to support it, so debugging questions are likely to be ignored. Be sure to check out the working example here</p>
<p><a href="https://freepository.com/ajax-logtail-viewer/ajax-logtail-viewer.php">https://freepository.com/ajax-logtail-viewer/ajax-logtail-viewer.php</a></p>
<p>The obvious question may be</p>
<p>&#8220;How do I control the timer?  Can I make it update more or less frequently?&#8221;</p>
<p>The answer is Yes.  Simply adjust the value I have highlighted above.  A larger number makes the log viewer refresh less frequently.   The default (in red above) is about 4 seconds.</p>
<p>I would have preferred to avoid use of innerHTML in the div refresh, but much to my dismay no other technique I tried worked.  innerHTML worked flawlessly and immediately.  Hrrumph.</p>
<p><small>Tags: <a rel="tag" href="http://technorati.com/tag/ajax">ajax</a>, <a rel="tag" href="http://technorati.com/tag/logfile">logfile</a>, <a rel="tag" href="http://technorati.com/tag/tail+log">tail log</a>, <a rel="tag" href="http://technorati.com/tag/log+viewer">log viewer</a></small></p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/0330f7db-3224-44f7-9174-017e764af359/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=0330f7db-3224-44f7-9174-017e764af359" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<p><!--pp-thumb-start--><!--PictPress found no dir /usr/local/apache2/htdocs/wordpress/wp-content/uploads/2007/04/ajax-logfile-tailer-viewer--><!--pp-thumb-end--></p>
<img src="http://commavee.com/?ak_action=api_record_view&id=396&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://commavee.com/2007/04/13/ajax-logfile-tailer-viewer/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>
