<?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>John's Jottings &#187; Programming</title>
	<atom:link href="http://www.johnsjottings.com/archives/categories/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.johnsjottings.com</link>
	<description>Technology, Blogging, Food, Travel, Poker and More</description>
	<lastBuildDate>Wed, 01 Sep 2010 10:34:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Google Trends</title>
		<link>http://www.johnsjottings.com/archives/2007/05/23/google_trends.html</link>
		<comments>http://www.johnsjottings.com/archives/2007/05/23/google_trends.html#comments</comments>
		<pubDate>Thu, 24 May 2007 06:39:39 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web - General]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=459</guid>
		<description><![CDATA[



No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>Google has released <a href="http://www.google.com/trends/hottrends" rel="nofollow" >Google Trends</a>, a really cool way to see what is going on in the world through what people are searching for.  I starting looking at this tonight and figured something was broken when I saw &#8220;WCCO&#8221;, &#8220;KSTP&#8221; and other Minnesota radio stations in the list but as it happens we had a big storm and I guess people do a lot of searching for information around an event like that.  It was interesting to watch those phrases lose ground fast to the American Idol searches that got hot and heavy as the finale approached.</p>
<p>Just because I like to keep my coding chops not so rusty I&#8217;ve been up writing a perl script to scrape that page every hour and stick the data into a table.  Assuming the cron job works it should work great.  Not sure exactly how I will use the data, but I have a few ideas.  I&#8217;m sure within the next few days we&#8217;ll see lots of other people doing the same thing and finding really interesting uses.  At a minimum I could easily clone the Google page but add Red and Green trend arrows showing movement between places.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2007/05/23/google_trends.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Greasemonkey Example</title>
		<link>http://www.johnsjottings.com/archives/2005/05/23/greasemonkey_example.html</link>
		<comments>http://www.johnsjottings.com/archives/2005/05/23/greasemonkey_example.html#comments</comments>
		<pubDate>Tue, 24 May 2005 04:22:13 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=395</guid>
		<description><![CDATA[I&#8217;ve mentioned Greasemonkey to a few people and in particular Mark Pilgram&#8217;s excellent Dive Into Greasemonkey Tutorial but until I saw this screencast I really didn&#8217;t have any great examples of how useful it could be. In this example, which I found via Simon Willison, user scripting is used to greatly enhance a SAP technical [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;ve mentioned <a href="http://greasemonkey.mozdev.org/" rel="nofollow" >Greasemonkey</a> to a few people and in particular Mark Pilgram&#8217;s excellent <a href="http://diveintogreasemonkey.org/" rel="nofollow" >Dive Into Greasemonkey Tutorial</a> but until I saw <a href="http://www.pipetree.com/~dj/2005/05/OssNoteFix/screencast.html" rel="nofollow" >this screencast</a> I really didn&#8217;t have any great examples of how useful it could be.  In this example, which I found via <a href="http://simon.incutio.com/" rel="nofollow" >Simon Willison</a>, user scripting is used to greatly enhance a SAP technical support page which by default does not include links to other articles it references by number.  A script was written to change the page from the client that inserts links where links didn&#8217;t exist.  I doubt whether too many sales guys using saleforce.com are going to be writing Greasemonkey scripts to add features to the application but who knows?  Pretty darned cool to know you can.</p>
<p>Like a lot of applications that interact with web pages it works best with pages that follow a consistent format.  I suspect some pretty useful scripts will be developed for sites like Amazon, E*bay, etc.</p>
<p>I just wish I had the time to actually play with it more.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2005/05/23/greasemonkey_example.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Alternating Comment Colors Without PHP</title>
		<link>http://www.johnsjottings.com/archives/2005/01/04/alternating_comment_colors_without_php.html</link>
		<comments>http://www.johnsjottings.com/archives/2005/01/04/alternating_comment_colors_without_php.html#comments</comments>
		<pubDate>Wed, 05 Jan 2005 03:45:20 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Movable Type]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=377</guid>
		<description><![CDATA[



No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>In my redesign I wanted to incorporate the alternate color blocks used by &#8220;many&#8221;:http://www.7nights.com/asterisk/archive/2005/01/info-gathering#comments &#8220;blogs&#8221;:http://www.stopdesign.com/log/2004/12/16/small-screens.html#comments these days to differentiate between comments to a post.</p>
<p>Having done a similar task in &#8220;PHP&#8221;:http://www.php.net/ and &#8220;ASP&#8221;:http://www.asp.net/ I knew the simple trick to making it work but what I wasn&#8217;t sure about was how to incorporate it into my Movable Type templates where I am not using PH I have it installed and I could use it, but I wanted to handle this without it.</p>
<p>I was &#8220;able to accomplish it&#8221;:http://www.johnsjottings.com/archives/2004/12/24/obfuscated_perl.html#comments relatively easily using Brad Choate&#8217;s wonderful &#8220;PerlScript&#8221;:http://bradchoate.com/weblog/2002/07/27/mtperlscript plugin.  Here is a snippet of the code in the template:</p>
<p>bc(code).. <MTPerlScript><br />
$val = <$MTCommentOrderNumber$> % 2;<br />
print qq(
<div class="com$val" id="comment<$MTCommentID$>&#8220;>);<br />
</MTPerlScript></p>
<p>That builds the div that you use to wrap each comment.  Every comment will then alternate using .com0 and .com1 as styles.  Here is the code for the two styles:</p>
<p>bc(code). .com0{<br />
background:#efefef;<br />
border:1px solid #ccc;<br />
padding:0 10px;<br />
margin:15px 0;<br />
}<br />
.com1 {<br />
border:1px solid #ccc;<br />
padding:0 10px;<br />
margin:15px 0;<br />
}</p>
<p>That&#8217;s it.  If you came here looking for how to do this in PHP, Scriptygoddess wrote a &#8220;tutorial&#8221;:http://www.scriptygoddess.com/archives/2002/05/27/alternating-comment-colors/ that may help you.  See Wikipedia for info on <a href="http://en.wikipedia.org/wiki/Modular_arithmetic" rel="nofollow" >modular arithmetic</a>.</p>
<p>p(update). [UPDATE] &#8211; After I wrote this article I found a link (thanks to my inline Google articles) to a very robust plugin called &#8220;MTGrid&#8221;:http://www.nonplus.net/software/mt/MTGrid.htm that would also accomplish this without PHP.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2005/01/04/alternating_comment_colors_without_php.html/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Obfuscated Perl</title>
		<link>http://www.johnsjottings.com/archives/2004/12/24/obfuscated_perl.html</link>
		<comments>http://www.johnsjottings.com/archives/2004/12/24/obfuscated_perl.html#comments</comments>
		<pubDate>Fri, 24 Dec 2004 13:52:14 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=375</guid>
		<description><![CDATA[



No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>&#8220;Deane writes&#8221;:http://www.gadgetopia.com/2004/12/24/TheObfuscatedPerlContest.html some about the Obfuscated Perl Contest, which is, indeed, a <s>n oxymoron</s> pleonasm.</p>
<p>That this program (using all the keywords in Perl and nothing else) displays &#8220;just another perl hacker&#8221; would blow my mind so I had to test it and sure enough, it worked.</p>
<p>bc(code). not exp log srand xor s qq qx xor<br />
s x x length uc ord and print chr<br />
ord for qw q join use sub tied qx<br />
xor eval xor print qq q q xor int<br />
eval lc q m cos and print chr ord<br />
for qw y abs ne open tied hex exp<br />
ref y m xor scalar srand print qq<br />
q q xor int eval lc qq y sqrt cos<br />
and print chr ord for qw x printf<br />
each return local x y or print qq<br />
s s and eval q s undef or oct xor<br />
time xor ref print chr int ord lc<br />
foreach qw y hex alarm chdir kill<br />
exec return y s gt sin sort split</p>
<p>Oh those zany perl hackers.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2004/12/24/obfuscated_perl.html/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Bug Tracking</title>
		<link>http://www.johnsjottings.com/archives/2004/06/23/bug_tracking.html</link>
		<comments>http://www.johnsjottings.com/archives/2004/06/23/bug_tracking.html#comments</comments>
		<pubDate>Wed, 23 Jun 2004 11:07:36 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=335</guid>
		<description><![CDATA[



No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;m starting to put together an update to this site but it&#8217;s the sort of thing I&#8217;ll probably be puttsing about on for some time.  I&#8217;ve found I lose track of good ideas if I don&#8217;t write them down so I decided it was time to do some real bug tracking or tasks tracking for development of this website.</p>
<p>There are a plethora of bug tracking tools available, many of them free.  I was looking for something free, easy to setup and use and something that would work on this machine&#8217;s setup, which is Windows.</p>
<p>I&#8217;m familiar with &#8220;Bugzilla&#8221;:http://www.mozilla.org/bugs/ but it looked like I needed to do some tweaking to get it working on Windows and I didn&#8217;t want to do that.  So after a little searching I came across &#8220;Mantis&#8221;:http://www.mantisbt.org/ and within 15 minutes I had it installed, configured and was entering tasks.</p>
<p>The functionality is way more than needed for a team of one yet it is simple to use and I trust it will be extremely useful to me.</p>
<p>If you are looking for a free and easy bug tracking tool take a look at Mantis.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2004/06/23/bug_tracking.html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MTYahooRank</title>
		<link>http://www.johnsjottings.com/archives/2004/02/28/mtyahoorank.html</link>
		<comments>http://www.johnsjottings.com/archives/2004/02/28/mtyahoorank.html#comments</comments>
		<pubDate>Sat, 28 Feb 2004 13:44:25 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Movable Type]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Weblogs]]></category>
		<category><![CDATA[google page rank]]></category>
		<category><![CDATA[movable type plugin]]></category>
		<category><![CDATA[page rank checker]]></category>
		<category><![CDATA[yahoo page rank]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=303</guid>
		<description><![CDATA[MTYahooRank is a Movable Type plugin that allows you to programmatically determine the Yahoo Rank of a keyword or phrase. Have a keyword that is special to you that you always want to know where you stand on Yahoo? MTYahooRank is for you. MTYahooRank is a page rank checker similar to my MTGoogleRank plugin, but [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>MTYahooRank is a Movable Type plugin that allows you to programmatically determine the Yahoo Rank of a keyword or phrase.  Have a keyword that is special to you that you always want to know where you stand on Yahoo?  MTYahooRank is for you.  MTYahooRank is a <a href="http://www.johnsjottings.com/archives/2004/01/10/mtgooglerank.html">page rank checker</a> similar to my <a href="http://www.johnsjottings.com/archives/2004/01/10/mtgooglerank.html">MTGoogleRank</a> plugin, but actually has a couple of additional features that I have not yet been able to get working via the Google API.  To see one example of how this could be used I&#8217;ve added a simple SearchRanks widget toward the bottom of my sidebar on my <a href="http://www.johnsjottings.com">front page</a>.</p>
<p>To use simply download YahooRank.txt rename to YahooRank.pl and place in your Movable Type plugins directory.  Then include the tag in your templates and away you go.</p>
<p>MTYahooRank includes the following tags:</p>
<p>MTYahooRank &#8211; The main tag &#8211; arguments documented below.<br />
MTYahooRankVersion &#8211; Returns the version number of MTYahooRank.<br />
MTYahooRankPoweredBy &#8211; Returns the phrase &#8220;Powered By MTYahooRank&#8221; with a link to my site.  No obligation to use, but it would be cool if you did.</p>
<p>The main MTYahooRank tag takes one required argument and optionally up to five additional arguments:</p>
<p><b>query</b> = the actual query to pass to Yahoo.  This is a required argument and you will get a rebuild error if you don&#8217;t include it.<br />
<b>url</b> = by default MTYahooRank uses your own weblog&#8217;s url as defined within MT to use in the search.  You can override this default if you choose.<br />
<b>pages</b> = by default MTYahooRank only searches through the first page of results in Yahoo.  You can override this default if you choose.  Take caution when doing so, however, as this will slow rebuilds down.<br />
<b>count</b> = when the count argument is included MTYahooRank will return the total estimated number of results for the given query.  When this argument exists it is assumed you want the count returned &#8211; the value you use does not matter.<br />
<b>link</b> = when the link argument is included MTYahooRank will return an html formatted anchor to the yahoo search page for the given search parameter. When this argument exists it is assumed you want the link returned &#8211; the value you use does not matter.<br />
<b>linktype</b> = works in conjunction with link, if linktype = &#8220;text&#8221; then the query value is the text, otherwise the result number is the text</p>
<p>Unless count or link is specified, MTYahooRank returns either a numeric value representing the YahooRank calculated or a string formatted like &#8220;>#&#8221; where # is the number of results searched.  So if you passed the argument pages=3 that would actually search through the first 30 results on Yahoo (10 results per page by default) and if your search string was not found the value &#8220;>30&#8243; would be returned.  If the <b>count</b> argument is included then the numeric value returned will be equal to the estimated total result set size.</p>
<p>Here are some usage examples:</p>
<p>&lt;MTYahooRank query=&#8221;rubber chicken&#8221;/&gt;<br />
&lt;MTYahooRank query=&#8221;rubber chicken&#8221; url=&#8221;www.microsoft.com&#8221;/&gt;<br />
&lt;MTYahooRank query=&#8221;rubber chicken&#8221; url=&#8221;www.microsoft.com&#8221; pages=&#8221;3&#8243;/&gt;<br />
&lt;MTYahooRank query=&#8221;rubber chicken&#8221; pages=&#8221;3&#8243;/&gt;<br />
&lt;MTYahooRank query=&#8221;rubber chicken&#8221; link=&#8221;1&#8243;/&gt; would return &#8220;>10&#8243;:http://search.yahoo.com/search?ei=UTF-8&#038;fr=sfp&#038;p=rubber+chicken<br />
&lt;MTYahooRank query=&#8221;rubber chicken&#8221; link=&#8221;1&#8243; linktype=&#8221;text&#8221;/&gt; would return &#8220;rubber chicken&#8221;:http://search.yahoo.com/search?ei=UTF-8&#038;fr=sfp&#038;p=rubber+chicken</p>
<p>Thanks to code from <a href="http://kalsey.com/blog/" rel="nofollow" >Adam Kalsey</a> MTYahooRank also supports embedded MT tags, for example:</p>
<p>&lt;MTYahooRank query=&#8221;[MTBlogName]&#8221; url=&#8221;[MTBlogURL]&#8221; pages=&#8221;3&#8243;/&gt;</p>
<p>Note that instead of using the tag as you would find it in your templates, &lt;$MTBlogName$&gt; you need to use [MTBlogName] with the square brackets.</p>
<p>In a future article I will show you how you can utilize Brad Choate&#8217;s <a href="http://www.bradchoate.com/past/mtmacros.php" rel="nofollow" >MTMacro</a> plugin to include MTYahooRank results within an entry.</p>
<p>I hope you find it useful.  I&#8217;d also love to get suggestions for improvement, there should be many.</p>
<p><u>History</u></p>
<p>* 11/02/2004 &#8211; Version .20 released.<br />
* 02/28/2004 &#8211; Version .10 released.<br />
** Initial release.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2004/02/28/mtyahoorank.html/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Once In a Blue Moon</title>
		<link>http://www.johnsjottings.com/archives/2004/02/08/once_in_a_blue_moon.html</link>
		<comments>http://www.johnsjottings.com/archives/2004/02/08/once_in_a_blue_moon.html#comments</comments>
		<pubDate>Mon, 09 Feb 2004 04:45:26 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google api]]></category>
		<category><![CDATA[google down]]></category>
		<category><![CDATA[mtgooglerank]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=297</guid>
		<description><![CDATA[It doesn&#8217;t happen often but every once in a while Google goes down. Or more specifically the Google APIs no longer work as expected. This causes a problem for those of us using Movable Type&#8217;s MTGoogleSearch because when Google is having this problem we can no longer rebuild our pages. Which can be frustrating. Even [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>It doesn&#8217;t happen often but every once in a while Google goes down.  Or more specifically the Google APIs no longer work as expected.  This causes a problem for those of us using Movable Type&#8217;s MTGoogleSearch because when Google is having this problem we can no longer rebuild our pages.  Which can be frustrating.</p>
<p>Even more frustrating is having released my Google API plugin <a href="http://www.johnsjottings.com/archives/2004/01/10/mtgooglerank.html">MTGoogleRank</a> just a couple of weeks before a significant Google API outage.  Nothing worse than knowing the problem you are having rebuilding your own pages is now shared by a handful of users who have found value in your plugin.  Drats.</p>
<p>Thankfully I found a solution to the problem.  In <a href="http://www.alpha-geek.com/2003/07/02/when_googles_down_the_internet_goes_down_too.html" rel="nofollow" >When Google&#8217;s Down, The Internet Goes Down Too</a> Jeremy provides a bang-up solution to the MTGoogleSearch problem which I incorporated into my own plugin.  I actually haven&#8217;t been able to verify that this actually works since Google hasn&#8217;t had a problem since I coded it up, but I&#8217;m willing to believe.</p>
<p>So, <a href="http://www.johnsjottings.com/archives/2004/01/10/mtgooglerank.html">MTGoogleRank v.30</a> is now released and should be resistant to whatever the perpetually beta Google API can deliver, or not deliver as the case may be.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2004/02/08/once_in_a_blue_moon.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MTAdSenseStats</title>
		<link>http://www.johnsjottings.com/archives/2003/11/29/mtadsensestats.html</link>
		<comments>http://www.johnsjottings.com/archives/2003/11/29/mtadsensestats.html#comments</comments>
		<pubDate>Sat, 29 Nov 2003 14:58:09 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Movable Type]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Weblogs]]></category>
		<category><![CDATA[adsense]]></category>
		<category><![CDATA[adsense plugin]]></category>
		<category><![CDATA[google adsense]]></category>
		<category><![CDATA[moveable type]]></category>
		<category><![CDATA[mt]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=264</guid>
		<description><![CDATA[After some gentle prodding I&#8217;ve decided to release MTAdSenseStats after all. Please read my previous entry to understand why I have hesitated in releasing it. It is important to note that using these tags on a public website is a violation of Google&#8217;s Terms &#038; Conditions and I take no responsibility for anything that may [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>After some gentle prodding I&#8217;ve decided to release MTAdSenseStats after all.  Please read <a href="http://www.johnsjottings.com/archives/2003/11/12/mtadsensestats_not.html">my previous entry</a> to understand why I have hesitated in releasing it.  It is important to note that using these tags on a public website is a violation of Google&#8217;s Terms &#038; Conditions and I take no responsibility for anything that may happen if you use this plugin.  <b><em>The use of MTAdSenseStats should be restricted solely to private pages strictly for the use of the AdSense account holder</em></b>.</p>
<p><em>&lt;DISCLAIMER&gt;I barely know Perl, I&#8217;ve never coded a Movable Type plugin before and I&#8217;m a manager.  Proceed at your own risk.&lt;/DISCLAIMER&gt;</em></p>
<p>With that said, I present MTAdSenseStats, a Movable Type plugin designed for the private use of AdSense account holders who wish to incorporate some AdSense statistics in private pages within a Movable Type weblog.</p>
<p>To use simply downloadAdSenseStats.pl and place in your Movable Type plugins directory.  Replace the username and password in the file with your own AdSense account information.  Then use any of the available tags in your templates.</p>
<p>MTAdSenseStats includes the following tags:</p>
<p>MTAdSenseStats &#8211; Container tag<br />
MTAdSenseStatsVersion &#8211; Version number of MTAdSenseStats<br />
MTAdSenseStatsDays &#8211; Number of days in the AdSense program<br />
MTAdSenseStatsDateToday &#8211; Date for the &#8220;today&#8221; stats<br />
MTAdSenseStatsImpressionsTotal &#8211; Total impressions to date<br />
MTAdSenseStatsImpressionsPerDay &#8211; Average impressions per day<br />
MTAdSenseStatsImpressionsToday &#8211; Total impressions for today<br />
MTAdSenseStatsImpressionsMin &#8211; Fewest impressions for one day over history<br />
MTAdSenseStatsImpressionsMinDate &#8211; Date of fewest impressions<br />
MTAdSenseStatsImpressionsMax &#8211; Most impressions for one day over history<br />
MTAdSenseStatsImpressionsMaxDate &#8211; Date of most impressions<br />
MTAdSenseStatsClicksTotal &#8211; Total clicks to date<br />
MTAdSenseStatsClicksPerDay &#8211; Average clicks per day<br />
MTAdSenseStatsClicksToday &#8211; Clicks for today<br />
MTAdSenseStatsClicksMin &#8211; Fewest clicks for one day over history<br />
MTAdSenseStatsClicksMinDate &#8211; Date of fewest clicks<br />
MTAdSenseStatsClicksMax &#8211; Most clicks for one day over history<br />
MTAdSenseStatsClicksMaxDate &#8211; Date of most clicks<br />
MTAdSenseStatsCtrTotal &#8211; Clickthrough rate to date<br />
MTAdSenseStatsCtrToday &#8211; Clickthrough rate for today<br />
MTAdSenseStatsCtrMin &#8211; Lowest clickthrough rate for one day over history<br />
MTAdSenseStatsCtrMinDate &#8211; Date of lowest clickthrough rate<br />
MTAdSenseStatsCtrMax &#8211; Highest clickthrough rate for one day over history<br />
MTAdSenseStatsCtrMaxDate &#8211; Date of highest clickthrough rate<br />
MTAdSenseStatsEarningsTotal &#8211; Total earnings to date<br />
MTAdSenseStatsEarningsPerDay &#8211; Average earnings per day<br />
MTAdSenseStatsEarningsToday &#8211; Total earnings for today<br />
MTAdSenseStatsEarningsMin &#8211; Least earnings for one day over history<br />
MTAdSenseStatsEarningsMinDate &#8211; Date of least earnings<br />
MTAdSenseStatsEarningsMax &#8211; Most earnings for one day over history<br />
MTAdSenseStatsEarningsMaxDate &#8211; Date of most earnings</p>
<p>Here is how it might be used in a template:</p>
<blockquote><p><MTAdSenseStats><br />
AdSense Statistics (MTAdSenseStats v<$MTAdSenseStatsVersion$>) for <$MTAdSenseStatsDateToday$>:<br />
Today&#8217;s impressions: <$MTAdSenseStatsImpressionsToday$><br />
Today&#8217;s clicks: <$MTAdSenseStatsClicksToday$><br />
Today&#8217;s ctr: <$MTAdSenseStatsCtrToday$><br />
Today&#8217;s earnings: <$MTAdSenseStatsEarningsToday$><br />
Total stats over <$MTAdSenseStatsDays$> days:<br />
Average impressions: <$MTAdSenseStatsImpressionsPerDay$><br />
Average clicks: <$MTAdSenseStatsClicksPerDay$><br />
Average earnings: <$MTAdSenseStatsEarningsPerDay$><br />
Total impressions: <$MTAdSenseStatsImpressionsTotal$><br />
Total clicks: <$MTAdSenseStatsClicksTotal$><br />
Total ctr: <$MTAdSenseStatsCtrTotal$><br />
Total earnings: <$MTAdSenseStatsEarningsTotal$><br />
Minimum impressions of <$MTAdSenseStatsImpressionsMin$> on <$MTAdSenseStatsImpressionsMinDate$><br />
Maximum impressions of <$MTAdSenseStatsImpressionsMax$> on <$MTAdSenseStatsImpressionsMaxDate$><br />
Minimum clicks of <$MTAdSenseStatsClicksMin$> on <$MTAdSenseStatsClicksMinDate$><br />
Maximum clicks of <$MTAdSenseStatsClicksMax$> on <$MTAdSenseStatsClicksMaxDate$><br />
Minimum clickthrough of <$MTAdSenseStatsCtrMin$> on <$MTAdSenseStatsCtrMinDate$><br />
Maximum clickthrough of <$MTAdSenseStatsCtrMax$> on <$MTAdSenseStatsCtrMaxDate$><br />
Minimum earnings of <$MTAdSenseStatsEarningsMin$> on <$MTAdSenseStatsEarningsMinDate$><br />
Maximum earnings of <$MTAdSenseStatsEarningsMax$> on <$MTAdSenseStatsEarningsMaxDate$><br />
</MTAdSenseStats></p></blockquote>
<p>I hope you find it useful.  I&#8217;d also love to get suggestions for improvement, there should be many.</p>
<p>[NOTE - Because AdSense uses https you need either IO:Socket:SSL or Crypt:SSLeay installed]</p>
<p>Should you really need to maximize your Adsense Earnings don&#8217;t forget to read my article on using <a href="http://www.johnsjottings.com/archives/2004/07/14/using_adsense_channels_with_movable_type.html">Adsense Channels</a> to maximize per post revenue.</p>
<p><u>History</u><br />
11/29/2003 &#8211; Version .25 released.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2003/11/29/mtadsensestats.html/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Easiest Bug</title>
		<link>http://www.johnsjottings.com/archives/2003/11/02/easiest_bug.html</link>
		<comments>http://www.johnsjottings.com/archives/2003/11/02/easiest_bug.html#comments</comments>
		<pubDate>Sun, 02 Nov 2003 07:26:21 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[code complete]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tech support]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=250</guid>
		<description><![CDATA[While on the topic of bugs I thought I&#8217;d share the easiest bug. Again this happened while I was working in Tech Support. We had a customer who was seeing data that was not accurate and the problem appeared to be a problem caused by a leap year. Once I determined the problem was most [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>While on the topic of bugs I thought I&#8217;d share the easiest bug.  Again this happened while I was working in <strong>Tech Support</strong>.  We had a customer who was seeing data that was not accurate and the problem appeared to be a problem caused by a leap year.  Once I determined the problem was most likely a coding issue I went to the developer in charge of the product and asked him to look into it.  That application was one in which we had bought the source code and released the product as-is but had been undergoing an improvement project one function point at a time.</p>
<p>Within a few minutes the developer came back to me saying he had identified the problem.  He said it was particularly easy to find because the original developer had thoughtfully added the following comment:</p>
<p>/* NOT REALLY RIGHT */</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2003/11/02/easiest_bug.html/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Toughest Bug</title>
		<link>http://www.johnsjottings.com/archives/2003/11/02/toughest_bug.html</link>
		<comments>http://www.johnsjottings.com/archives/2003/11/02/toughest_bug.html#comments</comments>
		<pubDate>Sun, 02 Nov 2003 07:14:59 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[as400]]></category>
		<category><![CDATA[iseries]]></category>
		<category><![CDATA[logs]]></category>
		<category><![CDATA[odbc]]></category>
		<category><![CDATA[software bugs]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=249</guid>
		<description><![CDATA[Don Park asks, What is the toughest bug you had to fix? I&#8217;ve worked on my share of bugs over the years, mostly ones of my own doing. For me the most difficult ones to debug where the work of others. It wasn&#8217;t a bug per-se but the most difficult problem I ever worked while [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>Don Park asks, <a href="http://www.docuverse.com/blog/donpark/2003/11/01.html#a1003" rel="nofollow" >What is the toughest bug you had to fix?</a></p>
<p>I&#8217;ve worked on my share of bugs over the years, mostly ones of my own doing.  For me the most difficult ones to debug where the work of others.</p>
<p>It wasn&#8217;t a bug per-se but the most difficult problem I ever worked while in Tech Support lasted six months.  Fortunately for the customer the problem was only happening on one machine so it wasn&#8217;t as though he was stopped dead for half a year, but it was a strange problem and one I really wanted to solve.  The problem should have been a simple one &#8211; he was using an ODBC compliant application to connect to an AS/400.  There are many layers to analyze in such a client-server configuration, but it wasn&#8217;t anything I hadn&#8217;t done a thousand times before.  This time though after a week of working on the problem I escalated to development because something definitely seemed wrong.</p>
<p>Another week with our development staff and we were convinced the problem was in the network transport layer so we involved the tech support group for that vendor.  And after some period of time with them they escalated to their development staff and still no resolution.  So by this time a couple of months have gone by and the problem has been escalated through two technical support and development organizations.</p>
<p>Now like I said this was not a show-stopping issue because the customer was still able to work, but nobody likes to have a problem drag on like this.  I had cordoned off a section of my desk for all the FAX communication we had which including .INI files, etc.  The pile was about 6 inches high.</p>
<p>Then one day after the problem was about six months old I decided to take another look at the ODBC configuration file for like the thousandth time.  For some reason the problem jumped out at me.  One of the settings was AS/400 serial number, which typically looked something like &#8220;S1234567&#8243;  In the .INI file I was looking at the value was &#8220;1234567&#8243;.  I called the customer, asked him to insert the letter &#8220;S&#8221; and sure enough, it worked.</p>
<p>Six months, a tech-savvy customer, two different tech support groups, two different development groups, and the problem boils down to the letter S.  To say I was relieved, yet pissed, would be an understatement.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2003/11/02/toughest_bug.html/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web Development Bookmarklets</title>
		<link>http://www.johnsjottings.com/archives/2003/06/04/web_development_bookmarklets.html</link>
		<comments>http://www.johnsjottings.com/archives/2003/06/04/web_development_bookmarklets.html#comments</comments>
		<pubDate>Thu, 05 Jun 2003 05:18:32 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[bookmarks]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=158</guid>
		<description><![CDATA[If you aren&#8217;t Eric Meyer and you haven&#8217;t been reading Simon Willison&#8217;s


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>If you aren&#8217;t <a href="http://www.meyerweb.com/eric/" rel="nofollow" >Eric Meyer</a> and you haven&#8217;t been reading Simon Willison&#8217;s <a href="http://simon.incutio.com/categories/csstutorial/>CSS Ain&#8217;t Rocket Science</a> Tutorial then stop what you are doing and get ready to read, it&#8217;s good stuff.</p>
<p>Simon&#8217;s most recent article in the series, <a href="http://simon.incutio.com/archive/2003/06/03/bookmarkletsAndCSS" rel="nofollow" >Using bookmarklets to experiment with CSS</a> introduces some great javascript bookmarklets which can be used to assist a web developer with various CSS tasks.  My favorite is &#8220;edit styles&#8221; which allows you to edit the style sheet of any page on the web in real time to see the changes.  That will be extremely useful for when I get the chance to hone the CSS on here.</p>
<p>One thing if you are using Firebird (previously known as Phoenix) &#8211; these bookmarklets don&#8217;t work in the 0.6 milestone build but they do work in the most recently nightly build, so do yourself a favor and get a nightly.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2003/06/04/web_development_bookmarklets.html/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Listen To Your Users</title>
		<link>http://www.johnsjottings.com/archives/2003/03/19/listen_to_your_users.html</link>
		<comments>http://www.johnsjottings.com/archives/2003/03/19/listen_to_your_users.html#comments</comments>
		<pubDate>Thu, 20 Mar 2003 06:43:12 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[bug tracking]]></category>
		<category><![CDATA[closed loop process]]></category>
		<category><![CDATA[customer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[user]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=101</guid>
		<description><![CDATA[If you are a software developer, either for internal or external customers, it is absolutely critical that you maintain a solid bug/feature-request database and that you build closed loop processes around your users who make the requests and your developers who deliver the solutions. The most important thing you must do, however, is let your [...]


Related posts:<ol><li><a href='http://www.johnsjottings.com/archives/2009/11/04/watch_the_internets_-_listen_to_your_customers.html' rel='bookmark' title='Permanent Link: Watch the Internets &#8211; Listen to Your Customers'>Watch the Internets &#8211; Listen to Your Customers</a> <small>If you sell any sort of product or service these days and you are not actively monitoring the Internets (invented...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>If you are a software developer, either for internal or external customers, it is absolutely critical that you maintain a solid bug/feature-request database and that you build closed loop processes around your users who make the requests and your developers who deliver the solutions.  The most important thing you must do, however, is let your customers know you are listening to them and reward them by actually making the improvements they ask for.  Showing that you are listening and most importantly responding is unusual and powerful and will result in better solutions.</p>
<p>This point was hammered home to me a number of years ago when I was involved with a CRM application implementation.  One of the first things I realized was that we were not getting enough feedback from our user community on what was working and what was not and to resolve that we created a &#8220;Feedback Button&#8221; that appeared on every screen within the application.  We educated the users on what it was for and how to use it and we made it very simple so that all the user had to do was pretty much click the button and make a comment.  Behind the scenes we captured a lot of metadata about what the user had been looking at when they pressed the button, which provided the context we often needed to understand the issue.</p>
<p>When we first offered this feature I actually had to bribe the users to take the time to enter comments.  I would give away Amazon.com gift certificates to random drawings of people who had submitted feedback.  I cajoled; hell I probably even threatened.  But then a funny thing happened &#8211; we started getting a lot of feedback without that.  In fact before long I didn&#8217;t have to ask for it anymore it just came, and it began to come from many different people throughout the organization.  Some people didn&#8217;t go a day without hitting that button.</p>
<p>What happened?  Very simple.</p>
<p>The users learned that the developers were listening to their feedback and actually making changes based on it!  The time they spent documenting their feedback suddenly was well worth it because it resulted in changes that they benefited from.</p>
<p>I&#8217;ve been reminded of this story a number of times over the past few weeks.</p>
<p><a href="http://home.yole.ru/weblog/" rel="nofollow" >Dmitry Jemerov</a>, the developer of <a href="http://www.yole.ru/projects/syndirella/" rel="nofollow" >Syndirella</a>, writes in his weblog about a <a href="http://home.yole.ru/weblog/archives/000089.html" rel="nofollow" >change in his personal policy</a> for addressing bug reports:</p>
<blockquote><p>Looks like my initial policy for answering bugreports &#8211; &#8220;as soon as a new build is released, go through the entire archive of unanswered e-mails, find the ones that reported bugs fixed in the new build, answer and tell them where to download the new build&#8221; &#8211; has failed miserably, which should be quite expected.</p></blockquote>
<p>Dmitry&#8217;s answer is to ensure that every bugreport gets logged and the user notified.  That&#8217;s a great first step. Close that loop by reporting back to them when a decision has been made regarding the bug, either that you won&#8217;t be fixing it (or more likely, adding that feature request) or you will be, and by the way here are the updated files.  That would be huge.</p>
<p><a href="http://www.mozillazine.org/weblogs/hyatt/" rel="nofollow" >Dave Hyatt</a>, one of the Webcore developers for Apple&#8217;s <a href="http://www.apple.com/safari/" rel="nofollow" >Safari</a> browser, has been maintaining a weblog throughout the beta period and has been very open about addressing problems that users have been presenting, and actually responding to that in the public forum of his weblog.  Most impressively, many of these reports have already resulted in changes in the application.  Here is an example of Dave&#8217;s open style:</p>
<blockquote><p>Tantek blogs about how Safari messes up his CSS presentation slides. The bug actually is with the following:<br />
&lt;style media=&#8221;print&#8221;&gt;&#8230;<br />
Safari is forgetting to cache the media type it observed on the style attribute. It doesn&#8217;t have this problem with link elements, just with style elements. Since your print sheet sets all the slides to be visible and hides the footer, that&#8217;s what causes all the madness.<br />
FWIW, this is issue #5 under &#8220;CSS Importing Bugs&#8221; on diveintomark&#8217;s list. It is now fixed.</p></blockquote>
<p>Dave acknowledges a bug, identifies some people who have reported it, and has let us know that it has been resolved.  Simple.  Brilliant.  Encourages people to try even harder to find problems.  Free QA.  Better product.  Did I say Simple &#038; Brilliant?</p>
<p><a href="http://radio.weblogs.com/0103807/" rel="nofollow" >Scott Johnson</a> has been working overtime the last couple of weeks bringing out <a href="http://www.feedster.com/" rel="nofollow" >Feedster</a> (n&eacute;e Roogle).  He&#8217;s also been publicly mentioning the users who have provided him any level of help.And I do mean <em>any</em>.  My minimal contribution earned a mention:</p>
<blockquote><p>John over at John&#8217;s Jottings for helping with some important edits and for pointing out this really good CVS basics stuff from Aaron</p></blockquote>
<p>But you know what?  I&#8217;m now more likely to pay closer attention to Feedster and mention something again.  In fact I did. You start multiplying that by tens of people and you start to see the picture.</p>
<p>Release early.  Listen to your users.  Respond to your users.  Release again.  Lather, rinse, repeat.</p>


<p>Related posts:<ol><li><a href='http://www.johnsjottings.com/archives/2009/11/04/watch_the_internets_-_listen_to_your_customers.html' rel='bookmark' title='Permanent Link: Watch the Internets &#8211; Listen to Your Customers'>Watch the Internets &#8211; Listen to Your Customers</a> <small>If you sell any sort of product or service these days and you are not actively monitoring the Internets (invented...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2003/03/19/listen_to_your_users.html/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I Like mod_rewrite</title>
		<link>http://www.johnsjottings.com/archives/2003/02/05/i_like_mod_rewrite.html</link>
		<comments>http://www.johnsjottings.com/archives/2003/02/05/i_like_mod_rewrite.html#comments</comments>
		<pubDate>Thu, 06 Feb 2003 03:53:31 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[movable type]]></category>
		<category><![CDATA[url redirection]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=67</guid>
		<description><![CDATA[I&#8217;m really beginning to like the Apache module mod_rewrite. From the documentation: This module uses a rule-based rewriting engine (based on a regular-expression parser) to rewrite requested URLs on the fly. It supports an unlimited number of rules and an unlimited number of attached rule conditions for each rule to provide a really flexible and [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;m really beginning to like the Apache module <a href="http://httpd.apache.org/docs-2.0/mod/mod_rewrite.html" rel="nofollow" >mod_rewrite</a>.  From the documentation:</p>
<blockquote><p>This module uses a rule-based rewriting engine (based on a regular-expression parser) to rewrite requested URLs on the fly. It supports an unlimited number of rules and an unlimited number of attached rule conditions for each rule to provide a really flexible and powerful URL manipulation mechanism. The URL manipulations can depend on various tests, for instance server variables, environment variables, HTTP headers, time stamps and even external database lookups in various formats can be used to achieve a really granular URL matching.</p></blockquote>
<p>I&#8217;m currently using mod_rewrite in two ways:</p>
<p><span id="more-67"></span>The first way I am using mod_rewrite is to account for changes I have made in my folder hierarchy and naming convention.  Out of the box URLs for Movable Type look like this: <a href="http://www.johnsjottings.com/archives/000055.html">http://www.johnsjottings.com/archives/000055.html</a>.  The first change I made improved the name of the actual file, which turned the URL into this: <a href="http://www.johnsjottings.com/archives/joe_millionaire.html">http://www.johnsjottings.com/archives/joe_millionaire.html</a>.  I then made a change to my folder hierarchy resulting in how my current URLs are built: <a href="http://www.johnsjottings.com/archives/2002/12/28/joe_millionaire.html">http://www.johnsjottings.com/archives/2002/12/28/joe_millionaire.html</a>.</p>
<p>If you click on any of those links you will be redirected to the most current format, the last one.  How is this done?  Through mod_rewrite.  Why would you want to do that?  Because once Google or another search engine indexes your site, or someone creates a specific link to a page on your site, you want to make sure that anyone who clicks through to that old URL is still served up the correct document.  Sure you could keep all the old documents around but that wastes storage and is prone to error as you prune your site.</p>
<p>The other way I am using mod_rewrite is to cleanly redirect people who for some reason or another are clicking on a bad link.  In my example, I posted a link to one of my articles on Usenet and my news poster chopped off the URL so it looked like: <a href="http://www.johnsjottings.com/archives/2003/02/01/craps_success_trip_report.h">http://www.johnsjottings.com/archives/2003/02/01/craps_success_trip_report.h</a>.  Once I noticed the problem (via error.log) I simply created a mod_rewrite rule to redirect to the correct document without anyone being the wiser.</p>
<p>The rules for mod_rewrite can either be entered in httpd.conf or .htaccess and either directly or via a mapping file.  I have not been able to get the mapping file working yet so for now I just build the rules right in the configuration file.  Here is what the rules I refered to above look like:</p>
<blockquote><p>RewriteRule ^/archives/000055\.html$ /archives/2002/12/28/joe_millionaire.html [R]<br />
RewriteRule   ^/archives/joe_millionaire\.html$ /archives/2002/12/28/joe_millionaire.html [R]<br />
RewriteRule ^/archives/2003/02/01/craps_success_trip_report\.h$ /archives/2003/02/01/craps_success_trip_report.html [R]</p></blockquote>
<p>It might wrap funny on your screen &#8211; that&#8217;s three lines, each beginning with &#8220;ReWriteRule&#8221;.</p>
<p>Absorb the documentation if interested but consider this warning from it:</p>
<blockquote><p>But all this functionality and flexibility has its drawback: complexity. So don&#8217;t expect to understand this entire module in just one day.</p></blockquote>
<p>Good luck.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2003/02/05/i_like_mod_rewrite.html/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>MTGoogleSearch with Perl 5.8</title>
		<link>http://www.johnsjottings.com/archives/2003/01/24/mtgooglesearch_with_perl_58.html</link>
		<comments>http://www.johnsjottings.com/archives/2003/01/24/mtgooglesearch_with_perl_58.html#comments</comments>
		<pubDate>Sat, 25 Jan 2003 03:43:49 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[movable type]]></category>
		<category><![CDATA[mtgooglesearch]]></category>
		<category><![CDATA[perl 5.8]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=55</guid>
		<description><![CDATA[I&#8217;m really starting to regret upgrading to Perl 5.8.0. When I did it I didn&#8217;t realize I&#8217;d be on the bleeding edge &#8211; but that&#8217;s where I always seem to find myself so so be it. Tonight&#8217;s problem was with an MT tag called MTGoogleSearch. Well that&#8217;s not entirely true &#8211; the problem was actually [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;m really starting to regret upgrading to Perl 5.8.0.  When I did it I didn&#8217;t realize I&#8217;d be on the bleeding edge &#8211; but that&#8217;s where I always seem to find myself so so be it.</p>
<p>Tonight&#8217;s problem was with an MT tag called MTGoogleSearch.  Well that&#8217;s not entirely true &#8211; the problem was actually within the Movable Type code but the problem was exposed when I tried to get MTGoogleSearch implemented.  After enabling the tag I started getting this error when rebuilding:</p>
<blockquote><p>Wide character in subroutine entry at C:/Program Files/Apache Group/Apache2/cgi-bin/lib/MT/FileMgr/Local.pm line 130.</p></blockquote>
<p>Here is what that line looks like:</p>
<blockquote><p><code>return $ctx->digest ne Digest::MD5::md5($$content);</code></p></blockquote>
<p>According to the <a href="http://search.cpan.org/author/GAAS/Digest-MD5-2.23/MD5.pm" rel="nofollow" >CPAN documentation for the MD5 function</a> Perl 5.8 supports Unicode characters in strings and passing strings that contain chars with ordinal numbers above 255 to the MD5 function will cause it to &#8220;croak.&#8221;  They suggested using the UTF-8 representation of the string, which seems to work like a charm.</p>
<p>So now the line looks like this (I also added the encode function at the top of local.pm):</p>
<blockquote><p><code>use Encode qw(encode_utf8);<br />...<br />return $ctx->digest ne Digest::MD5::md5(encode_utf8($$content));</code></p></blockquote>
<p>I believe that what is happening is that some Google results are being returned in one of my entries that includes Unicode strings with the problematic high ordinal characters.</p>
<p>Now I just have to decide how I want the results to look&#8230;</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2003/01/24/mtgooglesearch_with_perl_58.html/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Macro Magic</title>
		<link>http://www.johnsjottings.com/archives/2003/01/11/macro_magic.html</link>
		<comments>http://www.johnsjottings.com/archives/2003/01/11/macro_magic.html#comments</comments>
		<pubDate>Sat, 11 Jan 2003 13:49:32 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=45</guid>
		<description><![CDATA[



No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>I have my Book Review markup macro working the way I want it to now.  Or at least pretty close.</p>
<p>In a nutshell the markup simplifies the creation of my book reviews by leveraging Brad Choate&#8217;s <a href="http://www.bradchoate.com/past/mtperlscript.php" rel="nofollow" >MTPerlScript</a> and <a href="http://www.bradchoate.com/past/mtmacros.php" rel="nofollow" >MTMacro</a> plugins, and <a href="http://mtamazon.sourceforge.net/" rel="nofollow" >MTAmazon</a> from Kalsey Consulting Group.</p>
<p>When I want to do a book review I start my entry with a line such as this:</p>
<blockquote><p>&lt;review rating=&#8221;3&#8243;&gt;0066214122&lt;/review&gt;</p>
</blockquote>
<p>The data within the content area of the markup is Amazon&#8217;s ASIN for the specific book I want to review.  That simple line then generates the pullout you see at the start of my reviews.  Very slick thanks to those plug-ins.</p>
<p>Once I figure out what makes more sense to go in as content (maybe the entire review?) I&#8217;ll move the ASIN as an attribute like rating.  Once I have it perfect maybe I&#8217;ll share the code (but if someone wants to see it now just let me know, it&#8217;s certainly nothing special).</p>
<p>Because as we know it will never be perfect.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2003/01/11/macro_magic.html/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Some Progress with 5.8.0</title>
		<link>http://www.johnsjottings.com/archives/2002/12/22/some_progress_with_580.html</link>
		<comments>http://www.johnsjottings.com/archives/2002/12/22/some_progress_with_580.html#comments</comments>
		<pubDate>Mon, 23 Dec 2002 05:49:20 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=20</guid>
		<description><![CDATA[I&#8217;ve managed to get DBD-mysql installed on ActivePerl 5.8.0 build 804. Through some specific searching (Google was coming up with nothing and I was hoping the answer was on a support site that was being blocked from it) on sites like CPAN, ActiveState and mySQL I managed to run across a note from the author [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;ve managed to get DBD-mysql installed on ActivePerl 5.8.0 build 804.</p>
<p>Through some specific searching (Google was coming up with nothing and I was hoping the answer was on a support site that was being blocked from it) on sites like <a href="http://search.cpan.org/" rel="nofollow" >CPAN</a>, <a href="http://www.activestate.com" rel="nofollow" >ActiveState</a> and <a href="http://www.mysql.com/" rel="nofollow" >mySQL</a> I managed to run across a note from the author of DBD-mysql, <a href="http://search.cpan.org/author/JWIED/" rel="nofollow" >Jochen Wiedmann</a>, that <a href="http://lists.mysql.com/cgi-ez/ezmlm-cgi?7:mss:1992:200212:iajjheefpbakahgdkdei" rel="nofollow" >had the answer</a>.</p>
<p>Only problem? MT doesn&#8217;t recognize DBD-mysql as being installed. But it is:</p>
<p id="CODE">ppm&gt; query DBD-mysql<br />
Querying target 1 (ActivePerl 5.8.0.804)<br />
1. DBD-mysql [2.1020] A MySQL driver for the Perl5 Database Interface (DB~<br />
ppm&gt;</p>
<p>I may have to kick this one upstairs, as it were.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2002/12/22/some_progress_with_580.html/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>No mod_perl For You</title>
		<link>http://www.johnsjottings.com/archives/2002/12/22/no_mod_perl_for_you.html</link>
		<comments>http://www.johnsjottings.com/archives/2002/12/22/no_mod_perl_for_you.html#comments</comments>
		<pubDate>Mon, 23 Dec 2002 03:44:58 +0000</pubDate>
		<dc:creator>john</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.johnsjottings.com/wp/?p=19</guid>
		<description><![CDATA[My project for tonight was to have been installing mod_perl. As I&#8217;ve begun to play with the Google API I&#8217;ve noticed the increased time it takes to rebuild my pages so I thought I&#8217;d see what sort of improvements I see with mod_perl. As I&#8217;m currently using Windows 2000 on my web server (toying with [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p></p><p>My project for tonight was to have been installing <a href="http://perl.apache.org/" rel="nofollow" >mod_perl</a>. As I&#8217;ve begun to play with the Google API I&#8217;ve noticed the increased time it takes to rebuild my pages so I thought I&#8217;d see what sort of improvements I see with mod_perl.</p>
<p>As I&#8217;m currently using Windows 2000 on my web server (toying with Mandrake 9.0 on another) I use ActiveState ActivePerl and I happened to be using ActivePerl 5.6.1 build 633. In some quick scans of the mod_perl docs I learned that 633 isn&#8217;t thread-safe and that I needed to upgrade to ActivePerl 5.8.0 build 804.</p>
<p>Upgrade went very smoothly and I ran mt-check.cgi to verify I had the required packages. Whoops, I was missing DBD-mysql. So I installed DBI with no problem but PPM couldn&#8217;t find DBD-mysql. Odd. There was a DBD-mysqlPP in the standard repository but no DBD-mysql.</p>
<p>After mucking about for awhile with no success I finally went to the Movable Type Support forums to see if anyone else had seen this problem.</p>
<p>Turns out they <a href="http://www.movabletype.org/cgi-bin/ikonboard/ikonboard.cgi?s=3e066d403708ffff;act=ST;f=7;t=11092;hl=5.8.0" rel="nofollow" >had</a>. More than <a href="http://www.movabletype.org/cgi-bin/ikonboard/ikonboard.cgi?s=3e066d403708ffff;act=ST;f=7;t=11501;hl=5.8.0" rel="nofollow" >a</a> <a href="http://www.movabletype.org/cgi-bin/ikonboard/ikonboard.cgi?act=ST;f=7;t=10926;hl=repository" rel="nofollow" >few</a> <a href="http://www.movabletype.org/cgi-bin/ikonboard/ikonboard.cgi?s=3e066d403708ffff;act=ST;f=10;t=10918;hl=5.8.0" rel="nofollow" >times</a>.</p>
<p>In each case the answer was going back to ActivePerl 5.6.1 build 633. Which I did too, for now. But as soon as I get the kids down it&#8217;s back to tackle this one.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.johnsjottings.com/archives/2002/12/22/no_mod_perl_for_you.html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
