<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="en" xml:base="http://joeygibson.com/wp-atom.php">
	<title type="text">Joey Gibson's Blog</title>
	<subtitle type="text">Java, Clojure, Scala, Groovy, Ruby, Python, Lisp, Objective-C, OSX, politics, religion, Koine Greek, Tae Kwon Do, Spanish and much more!</subtitle>

	<updated>2012-02-08T03:50:52Z</updated>

	<link rel="alternate" type="text/html" href="http://joeygibson.com" />
	<id>http://joeygibson.com/feed/atom/</id>
	

	<generator uri="http://wordpress.org/">WordPress</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/JoeyGibsonsBlog" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="joeygibsonsblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[No, Santorum, You&#8217;ve Got It Backwards]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2012/02/07/no-santorum-youve-got-it-backwards/" />
		<id>http://joeygibson.com/?p=2010</id>
		<updated>2012-02-08T03:50:52Z</updated>
		<published>2012-02-08T03:50:52Z</published>
		<category scheme="http://joeygibson.com" term="politics" /><category scheme="http://joeygibson.com" term="frothy" /><category scheme="http://joeygibson.com" term="marriage" /><category scheme="http://joeygibson.com" term="rick" /><category scheme="http://joeygibson.com" term="same-sex" /><category scheme="http://joeygibson.com" term="santorum" />		<summary type="html"><![CDATA[Today, the 9th Circuit Court of Appeals overturned California&#8217;s Proposition 8, which banned same-sex marriage. Frothy Republican presidential candidate Rick Santorum took to Twitter to share his wisdom on the subject, saying Only a religious zealot homophobe like Santorum could &#8230; <a href="http://joeygibson.com/2012/02/07/no-santorum-youve-got-it-backwards/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2012/02/07/no-santorum-youve-got-it-backwards/">&lt;p&gt;Today, the 9th Circuit Court of Appeals &lt;a href="http://www.cnn.com/2012/02/07/justice/california-proposition-8/index.html" target="_blank"&gt;overturned California&amp;#8217;s Proposition 8&lt;/a&gt;, which banned same-sex marriage. Frothy Republican presidential candidate &lt;a href="https://www.google.com/search?q=santorum" target="_blank"&gt;Rick Santorum&lt;/a&gt; took to Twitter to share his wisdom on the subject, saying&lt;/p&gt;
&lt;!-- tweet id : 167024630052294656 --&gt;&lt;style type='text/css'&gt;#bbpBox_167024630052294656 a { text-decoration:none; color:#0084B4; }#bbpBox_167024630052294656 a:hover { text-decoration:underline; }&lt;/style&gt;&lt;div id='bbpBox_167024630052294656' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/profile_background_images/419069760/RJS-twitter-bg.jpg); background-repeat:no-repeat'&gt;&lt;div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'&gt;&lt;span style='width:100%; font-size:18px; line-height:22px;'&gt;7M Californians had their rights stripped away today by activist 9th Circuit judges. As president I will work to protect marriage.&lt;/span&gt;&lt;div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'&gt;&lt;img align='middle' src='http://joeygibson.com/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /&gt;&lt;a title='tweeted on February 7, 2012 19:19:09' href='http://twitter.com/#!/RickSantorum/status/167024630052294656' target='_blank'&gt;about 4 hours ago&lt;/a&gt; via &lt;a href="http://www.hootsuite.com" rel="nofollow" target="blank"&gt;HootSuite&lt;/a&gt;&lt;a href='https://twitter.com/intent/tweet?in_reply_to=167024630052294656' class='bbp-action bbp-reply-action' title='Reply'&gt;&lt;span&gt;&lt;em style='margin-left: 1em;'&gt;&lt;/em&gt;&lt;strong&gt;Reply&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href='https://twitter.com/intent/retweet?tweet_id=167024630052294656' class='bbp-action bbp-retweet-action' title='Retweet'&gt;&lt;span&gt;&lt;em style='margin-left: 1em;'&gt;&lt;/em&gt;&lt;strong&gt;Retweet&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href='https://twitter.com/intent/favorite?tweet_id=167024630052294656' class='bbp-action bbp-favorite-action' title='Favorite'&gt;&lt;span&gt;&lt;em style='margin-left: 1em;'&gt;&lt;/em&gt;&lt;strong&gt;Favorite&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style='float:left; padding:0; margin:0'&gt;&lt;a href='http://twitter.com/intent/user?screen_name=RickSantorum'&gt;&lt;img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a1.twimg.com/profile_images/1811345208/RJSTwitter_normal.jpg' /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style='float:left; padding:0; margin:0'&gt;&lt;a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=RickSantorum'&gt;@RickSantorum&lt;/a&gt;&lt;div style='margin:0; padding-top:2px'&gt;Rick Santorum&lt;/div&gt;&lt;/div&gt;&lt;div style='clear:both'&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;!-- end of tweet --&gt;
&lt;p&gt;Only a religious zealot homophobe like Santorum could frame the restoration of rights to millions of people as taking rights away from someone else. Heterosexuals&amp;#8217; rights to marry have not changed one iota by this decision.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=BMnlE1Q8kcQ:UKpGChOF-7E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=BMnlE1Q8kcQ:UKpGChOF-7E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=BMnlE1Q8kcQ:UKpGChOF-7E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=BMnlE1Q8kcQ:UKpGChOF-7E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=BMnlE1Q8kcQ:UKpGChOF-7E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=BMnlE1Q8kcQ:UKpGChOF-7E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=BMnlE1Q8kcQ:UKpGChOF-7E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=BMnlE1Q8kcQ:UKpGChOF-7E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=BMnlE1Q8kcQ:UKpGChOF-7E:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=BMnlE1Q8kcQ:UKpGChOF-7E:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=BMnlE1Q8kcQ:UKpGChOF-7E:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/BMnlE1Q8kcQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2012/02/07/no-santorum-youve-got-it-backwards/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2012/02/07/no-santorum-youve-got-it-backwards/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[Three Songs From Anvil&#8217;s Show in Athens, GA on 02/03/2012]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2012/02/05/three-songs-from-anvils-show-in-athens-ga-on-02032012/" />
		<id>http://joeygibson.com/?p=2002</id>
		<updated>2012-02-05T06:31:41Z</updated>
		<published>2012-02-05T06:31:41Z</published>
		<category scheme="http://joeygibson.com" term="music" /><category scheme="http://joeygibson.com" term="anvil" /><category scheme="http://joeygibson.com" term="concert" /><category scheme="http://joeygibson.com" term="heavy metal" /><category scheme="http://joeygibson.com" term="video" />		<summary type="html"><![CDATA[I went to see the awesome metal band Anvil last night at the Melting Point in Athens, GA. They played a great show, and here are three highlights. The first video is the first two songs of the night, March &#8230; <a href="http://joeygibson.com/2012/02/05/three-songs-from-anvils-show-in-athens-ga-on-02032012/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2012/02/05/three-songs-from-anvils-show-in-athens-ga-on-02032012/">&lt;p&gt;I went to see the awesome metal band &lt;a href="http://www.anvilmetal.com/" target="_blank"&gt;Anvil&lt;/a&gt; last night at the &lt;a href="http://meltingpointathens.com/" target="_blank"&gt;Melting Point&lt;/a&gt; in Athens, GA. They played a great show, and here are three highlights. The first video is the first two songs of the night, March of the Crabs and 666. The second video is the Spanish Inquisition-themed song, Thumb Hang, which nobody expects. Check the videos out, and if Anvil comes to your town, &lt;em&gt;definitely&lt;/em&gt; check them out.&lt;/p&gt;
&lt;div align="center"&gt;&lt;iframe src="http://www.youtube.com/embed/ahlr7GIZK3A" frameborder="0" width="560" height="315"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div align="center"&gt;&lt;iframe src="http://www.youtube.com/embed/SvHl_mOskGE" frameborder="0" width="560" height="315"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=3ata6DEVCOI:fz8crQhTvRk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=3ata6DEVCOI:fz8crQhTvRk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=3ata6DEVCOI:fz8crQhTvRk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=3ata6DEVCOI:fz8crQhTvRk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=3ata6DEVCOI:fz8crQhTvRk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=3ata6DEVCOI:fz8crQhTvRk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=3ata6DEVCOI:fz8crQhTvRk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=3ata6DEVCOI:fz8crQhTvRk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=3ata6DEVCOI:fz8crQhTvRk:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=3ata6DEVCOI:fz8crQhTvRk:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=3ata6DEVCOI:fz8crQhTvRk:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/3ata6DEVCOI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2012/02/05/three-songs-from-anvils-show-in-athens-ga-on-02032012/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2012/02/05/three-songs-from-anvils-show-in-athens-ga-on-02032012/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[Fast Apple Customer Support]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2012/01/28/fast-apple-customer-support/" />
		<id>http://joeygibson.com/?p=1994</id>
		<updated>2012-01-28T04:00:53Z</updated>
		<published>2012-01-28T04:00:53Z</published>
		<category scheme="http://joeygibson.com" term="general" /><category scheme="http://joeygibson.com" term="-100000" /><category scheme="http://joeygibson.com" term="apple" /><category scheme="http://joeygibson.com" term="download" /><category scheme="http://joeygibson.com" term="error" /><category scheme="http://joeygibson.com" term="itunes" /><category scheme="http://joeygibson.com" term="van halen" />		<summary type="html"><![CDATA[Today I bought the 24 song, 2.3 hour-long Van Halen record Live: Right Here, Right Now from the iTunes store. But there was a snag: &#8220;Why Can&#8217;t This Be Love?&#8221; failed with an error -100000. I tried restarting it a &#8230; <a href="http://joeygibson.com/2012/01/28/fast-apple-customer-support/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2012/01/28/fast-apple-customer-support/">&lt;p&gt;Today I bought the 24 song, 2.3 hour-long &lt;a href="http://en.wikipedia.org/wiki/Van_halen" target="_blank"&gt;Van Halen&lt;/a&gt; record &lt;a href="http://itunes.apple.com/us/album/live-right-here-right-now/id215638652" target="_blank"&gt;Live: Right Here, Right Now&lt;/a&gt; from the iTunes store. But there was a snag: &amp;#8220;Why Can&amp;#8217;t This Be Love?&amp;#8221; failed with an error -100000. I tried restarting it a couple of different ways, but each time it would download it, then restart, three or four times, until it would finally choke with error -100000. I even downloaded the album on a Windows machine and 23 songs downloaded fine, but that one track failed with the same error. This pretty much proved to me that it was a problem on Apple&amp;#8217;s end. I then went to my account in the iTunes store and reported an error with the track.&lt;/p&gt;
&lt;p&gt;I received an auto-response pretty quickly with some things to try, but nothing useful. An hour or so later, I got an email from a human at Apple that basically told me to try what I had already tried and to let them know if I was still having problems, as well as providing some other info like ISP, Internet connection type, etc. I emailed them back with the details they asked for, and told them what all I had tried, including trying to download to another machine. I wondered how hard it was going to be to convince them that the problem was on their end.&lt;/p&gt;
&lt;p&gt;A couple of hours later, I received another email, this time from a different human. I immediately assumed I would have to re-explain everything. Much to my surprise, this is what the email said:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I understand that you are unable to download the song &amp;#8220;Why Can&amp;#8217;t This Be Love&amp;#8221; as your [sic] getting error -1000000. I know how eager you are to have this resolved at the earliest. I will be glad to assist you today.&lt;/p&gt;
&lt;p&gt;Joey, please accept my sincere apologies for the frustration this download has caused. I took the liberty of removing the file causing the issue from your download queue. To give Apple time to investigate the issue and make any corrections that may be necessary, please wait at least two weeks before repurchasing this title.&lt;/p&gt;
&lt;p&gt;I have issued a replacement song credit to your account. You can use the credit to buy a song of your choice from the iTunes Store.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So, while it kind of stinks that it could be two or more weeks before I can get the track replaced, it&amp;#8217;s nice that they refunded me the money for the track so quickly. That&amp;#8217;s nice, fast, customer service.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=S4Ic4AmXZZY:bJPQx9Buwck:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=S4Ic4AmXZZY:bJPQx9Buwck:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=S4Ic4AmXZZY:bJPQx9Buwck:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=S4Ic4AmXZZY:bJPQx9Buwck:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=S4Ic4AmXZZY:bJPQx9Buwck:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=S4Ic4AmXZZY:bJPQx9Buwck:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=S4Ic4AmXZZY:bJPQx9Buwck:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=S4Ic4AmXZZY:bJPQx9Buwck:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=S4Ic4AmXZZY:bJPQx9Buwck:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=S4Ic4AmXZZY:bJPQx9Buwck:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=S4Ic4AmXZZY:bJPQx9Buwck:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/S4Ic4AmXZZY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2012/01/28/fast-apple-customer-support/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2012/01/28/fast-apple-customer-support/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[New WordPress Sociable Plugin Has Unintuitive Setup]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2012/01/20/new-wordpress-sociable-plugin-has-unintuitive-setup/" />
		<id>http://joeygibson.com/?p=1989</id>
		<updated>2012-01-20T15:45:45Z</updated>
		<published>2012-01-20T15:45:45Z</published>
		<category scheme="http://joeygibson.com" term="tech" /><category scheme="http://joeygibson.com" term="how-to" /><category scheme="http://joeygibson.com" term="plugin" /><category scheme="http://joeygibson.com" term="sociable" /><category scheme="http://joeygibson.com" term="wordpress" />		<summary type="html"><![CDATA[I got a notification this morning that the Sociable plugin for WordPress had a new version available, and did I want to install it. I try to keep my plugins updated, so I upgraded. Sociable now has two modes: Skyscraper &#8230; <a href="http://joeygibson.com/2012/01/20/new-wordpress-sociable-plugin-has-unintuitive-setup/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2012/01/20/new-wordpress-sociable-plugin-has-unintuitive-setup/">&lt;p&gt;I got a notification this morning that the &lt;a href="http://wordpress.org/extend/plugins/sociable/" target="_blank"&gt;Sociable&lt;/a&gt; plugin for &lt;a href="http://wordpress.org/" target="_blank"&gt;WordPress&lt;/a&gt; had a new version available, and did I want to install it. I try to keep my plugins updated, so I upgraded. Sociable now has two modes: Skyscraper and Classic. Classic is what you&amp;#8217;re used to, with a row of icons under a post. Skyscraper is a tall and thin tower that lives in the left-hand margin of your site, scrolling along with the page. Skyscraper is the new default, but going back to Classic is what is unintuitive.&lt;/p&gt;
&lt;p&gt;In your admin page, if you hover over the new menu &amp;#8220;Select Sociable Plugin&amp;#8221; you will see three options: Select Sociable Plugin, Sociable Options, and Skyscraper Options. Selecting the first one brings you to a &lt;a href="http://s.wordpress.org/extend/plugins/sociable/screenshot-5.jpg?r=492689" target="_blank"&gt;page explaining the difference between the two modes&lt;/a&gt;, with ginormous buttons at the bottom to choose which version you want. Clicking the button for either mode takes you to the options for that mode, but doesn&amp;#8217;t actually change which mode is selected.&lt;/p&gt;
&lt;p&gt;At the bottom of each mode&amp;#8217;s options page is a checkbox labeled, &amp;#8220;Activate&amp;#8230;&amp;#8221; and the mode name. I assumed that checking the one for Classic mode was all I needed to do, but clearing my cache and viewing the page showed that not to be the case. You must also &lt;em&gt;uncheck&lt;/em&gt; the &amp;#8220;Activate&amp;#8230;&amp;#8221; checkbox on the Skyscraper options page to enable Classic mode. If you don&amp;#8217;t uncheck it, then you will still get the Skyscraper showing up on your posts. If you decide to switch back from Classic to Skyscraper, you have to uncheck Classic, then go to the Skyscraper options page and check that one.&lt;/p&gt;
&lt;p&gt;Since this is a binary choice, they need to have ONE place to enable one and disable the other, or at least explain to you that you have to take the extra step.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=gk2-4boTMuA:3B7vesExcoU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=gk2-4boTMuA:3B7vesExcoU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=gk2-4boTMuA:3B7vesExcoU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=gk2-4boTMuA:3B7vesExcoU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=gk2-4boTMuA:3B7vesExcoU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=gk2-4boTMuA:3B7vesExcoU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=gk2-4boTMuA:3B7vesExcoU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=gk2-4boTMuA:3B7vesExcoU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=gk2-4boTMuA:3B7vesExcoU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=gk2-4boTMuA:3B7vesExcoU:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=gk2-4boTMuA:3B7vesExcoU:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/gk2-4boTMuA" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2012/01/20/new-wordpress-sociable-plugin-has-unintuitive-setup/#comments" thr:count="4" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2012/01/20/new-wordpress-sociable-plugin-has-unintuitive-setup/feed/atom/" thr:count="4" />
		<thr:total>4</thr:total>
	</entry>
		<entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[Write Your Congressmen: Please Do Not Support SOPA/PIPA]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2012/01/18/write-your-congressmen-please-do-not-support-sopapipa/" />
		<id>http://joeygibson.com/?p=1982</id>
		<updated>2012-01-20T21:51:56Z</updated>
		<published>2012-01-18T14:56:55Z</published>
		<category scheme="http://joeygibson.com" term="politics" /><category scheme="http://joeygibson.com" term="congress" /><category scheme="http://joeygibson.com" term="freedom" /><category scheme="http://joeygibson.com" term="house" /><category scheme="http://joeygibson.com" term="internet" /><category scheme="http://joeygibson.com" term="pipa" /><category scheme="http://joeygibson.com" term="piracy" /><category scheme="http://joeygibson.com" term="representative" /><category scheme="http://joeygibson.com" term="senate" /><category scheme="http://joeygibson.com" term="senator" /><category scheme="http://joeygibson.com" term="sopa" />		<summary type="html"><![CDATA[Depending on what sites you visit, you may or may not know that several sites have shutdown today, or have modified their logos, to protest SOPA/PIPA. These are bills before the House of Representatives and Senate, respectively, that would have &#8230; <a href="http://joeygibson.com/2012/01/18/write-your-congressmen-please-do-not-support-sopapipa/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2012/01/18/write-your-congressmen-please-do-not-support-sopapipa/">&lt;p&gt;Depending on what sites you visit, you may or may not know that several sites have shutdown today, or have modified their logos, to protest &lt;a href="http://en.wikipedia.org/wiki/Sopa" target="_blank"&gt;SOPA/PIPA&lt;/a&gt;. These are bills before the House of Representatives and Senate, respectively, that would have a crippling effect on web sites that support user-uploaded content. Sites like &lt;a href="http://reddit.com" target="_blank"&gt;Reddit&lt;/a&gt;, Youtube and Tumblr are just a few.&lt;/p&gt;
&lt;p&gt;If you are concerned about Internet freedom, write your Congressmen. I just wrote both my Senators, &lt;a href="http://www.chambliss.senate.gov/" target="_blank"&gt;Saxby Chambliss&lt;/a&gt; and &lt;a href="http://isakson.senate.gov/" target="_blank"&gt;Johnny Isakson&lt;/a&gt;, and my &amp;#8220;representative&amp;#8221; in the House, &lt;a href="http://woodall.house.gov/" target="_blank"&gt;Rob Woodall&lt;/a&gt;. Here&amp;#8217;s what I said (with SOPA and PIPA exchanged depending on the recipient):&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I do not have a form letter or an eloquent defense of why you shouldn&amp;#8217;t support PIPA. But from what I have read about PIPA (and SOPA, in the house), it is bad news for web sites that support user-uploaded content. In an effort to stop &amp;#8220;piracy&amp;#8221; of content, it places an undue burden on site owners that will cripple and/or shut down many sites. I am not saying piracy is not a problem or that it doesn&amp;#8217;t exist. It does. But this bill is not the way to solve it.&lt;/p&gt;
&lt;p&gt;Please do not support it.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I don&amp;#8217;t really think that sites like Reddit, &amp;#8220;going dark&amp;#8221; for a day or Google slapping a black box over its logo will have much effect. Millions of people writing their Congressmen &lt;em&gt;should&lt;/em&gt; have an effect, though without millions of dollars for lobbying, it remains to be seen how much of an effect it will have.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;01/18/2012 1:13 PM Update&lt;/strong&gt;: I just received this response from Senator Isakson&amp;#8217;s office.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Dear Mr. Gibson:&lt;/p&gt;
&lt;p&gt;Thank you for contacting me regarding intellectual property theft.  I appreciate hearing from you and I appreciate the opportunity to respond.&lt;/p&gt;
&lt;p&gt;S.968, the Preventing Real Online Threats to Economic Creativity and Theft of Intellectual Property (PROTECT IP) Act of 2011, was introduced by Senator Leahy (D-VT) on May 12, 2011, and was referred to the Senate Judiciary Committee.  On May 26, 2011, it was reported out of Committee and is currently pending in the Senate.   The bill targets websites, particularly those registered outside of the United States, which are &amp;#8220;dedicated to infringing activities.&amp;#8221;  These rogue websites typically offer unauthorized downloading or streaming of copyrighted content or the sale of counterfeit goods including music, movies, and pharmaceutical drugs.&lt;/p&gt;
&lt;p&gt;Websites targeted by this bill are foreign owned and outside the reach of U.S. laws despite the fact U.S. intellectual property is being infringed upon and U.S. consumers are the targets.  Rogue websites cost American workers jobs and cost businesses millions of dollars in lost revenue.  As online technology and commerce advances, we must see to it that injured parties have the ability to stop infringers from profiting from counterfeit products.  For example, a victim of infringement will have the authority to file a civil action against the owner or registrant of a rogue site.  If an order is granted by the court, third parties will be required to stop processing payments from the infringing sites, therefore, preventing infringers from collecting payments.  I will work to ensure that our laws our modernized to protect intellectual property, and will keep your thoughts on this bill in mind should it come before the Senate for a vote.&lt;/p&gt;
&lt;p&gt;Thank you again for contacting me.  Please visit my webpage at &lt;a href="https://iqs3.solutions.lmit.com/iqextranet/iqClickTrk.aspx?&amp;amp;cid=quorum_isakson-iq&amp;amp;crop=16968.12862303.8338349.16392178&amp;amp;redirect=http%3a%2f%2fisakson.senate.gov%2f" target="_blank"&gt;http://isakson.senate.gov/&lt;/a&gt;for more information on the issues important to you and to sign up for my &lt;a href="https://iqs3.solutions.lmit.com/iqextranet/iqClickTrk.aspx?&amp;amp;cid=quorum_isakson-iq&amp;amp;crop=16968.12862303.8338349.16392178&amp;amp;redirect=http%3a%2f%2fisakson.senate.gov%2fnewsletter.html" target="_blank"&gt;e-newsletter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sincerely,&lt;br /&gt;
Johnny Isakson&lt;br /&gt;
United States Senator&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;01/20/2012 4:40 PM Update&lt;/strong&gt;: Today I received an email from Saxby Chambliss&amp;#8217; office. Here it is. Notice the bold text, which I added for emphasis:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Dear Mr. Gibson:&lt;/p&gt;
&lt;p&gt;Thank you for contacting me regarding S. 968, the &amp;#8220;Preventing Real Online Threats to Economic Creativity and Theft of Intellectual Property Act of 2011 (PROTECT IP),&amp;#8221; and H.R. 3261, the &amp;#8221;Stop Online Piracy Act (SOPA).&amp;#8221;  It is good to hear from you.&lt;/p&gt;
&lt;p&gt;S. 968 was introduced on May 12, 2011, and referred to the Senate Judiciary Committee.  On May 26, it was reported out of committee and placed on the general legislative calendar.  If enacted, S. 968 would amend federal copyright law to authorize the Attorney General to file civil action against violators of copyright infringement law.&lt;/p&gt;
&lt;p&gt;H.R. 3261 was introduced on October 26, 2011, and referred to the House Committee on the Judiciary.  On December 16, it was considered before the full committee; however, the bill was not voted out for consideration by the full House.  If enacted, H.R. 3261 would authorize the Attorney General to seek a court order against a U.S.-directed foreign Internet site committing or facilitating online piracy.&lt;/p&gt;
&lt;p&gt;On January 23, 2012, a procedural vote on S. 968 was scheduled in the Senate; however, Majority Leader Reid announced that this vote will be postponed in order to allow for modifications to the bill to be made.  Furthermore, House Judiciary Chairman Lamar Smith announced that further consideration of H.R. 3261 would be postponed indefinitely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It was always clear that SOPA and PROTECT IP needed to be perfected, and that legitimate concerns needed to be addressed before these bills could move forward.  Given this and my constituents concerns, it was always my intention to oppose moving forward until concerns had been addressed. &lt;/strong&gt; With the majority leader&amp;#8217;s decision to postpone the cloture vote on the PROTECT IP Act originally scheduled for January 24, I withdrew my co-sponsorship to await the resolution of the outstanding issues.&lt;/p&gt;
&lt;p&gt;I believe that online theft is a serious issue, and that Congress needs to make certain that our laws adequately protect the interests of rights holders.  When $58 billion in economic output is lost to the U.S. economy annually due to copyright theft of movies, music, packaged software and video games, and about one-quarter of all internet traffic is copyright infringing, there is a real problem that needs to be addressed.  I have complete faith that we will be able to work out a compromise in the future that addresses this, while still promoting free and open access to the internet. Should a bill addressing this topic come before the full Senate for consideration, I will keep your thoughts in mind.&lt;/p&gt;
&lt;p&gt;If you would like to receive timely email alerts regarding the latest congressional actions and my weekly e-newsletter, please sign up via my web site at: &lt;a title="http://www.chambliss.senate.gov/" href="http://www.chambliss.senate.gov/" target="_blank"&gt;www.chambliss.senate.gov &lt;/a&gt;.&lt;wbr&gt;  Please let me know whenever I may be of assistance.&lt;/wbr&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The bold part is interesting because he claims that he knew both bills were flawed and that he &amp;#8220;always intended&amp;#8221; to oppose &amp;#8220;moving forward&amp;#8221; until they were fixed. Given that he was a co-sponsor of PIPA, I don&amp;#8217;t really think he&amp;#8217;s being honest here. It seems a bit odd to be a co-sponsor of something you think is flawed.&lt;/p&gt;
&lt;p&gt;Still, he&amp;#8217;s withdrawn himself as a co-sponsor now, which is a good thing.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=ZsotDEgy6hE:sWn_Oq6wDzc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=ZsotDEgy6hE:sWn_Oq6wDzc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=ZsotDEgy6hE:sWn_Oq6wDzc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=ZsotDEgy6hE:sWn_Oq6wDzc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=ZsotDEgy6hE:sWn_Oq6wDzc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=ZsotDEgy6hE:sWn_Oq6wDzc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=ZsotDEgy6hE:sWn_Oq6wDzc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=ZsotDEgy6hE:sWn_Oq6wDzc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=ZsotDEgy6hE:sWn_Oq6wDzc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=ZsotDEgy6hE:sWn_Oq6wDzc:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=ZsotDEgy6hE:sWn_Oq6wDzc:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/ZsotDEgy6hE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2012/01/18/write-your-congressmen-please-do-not-support-sopapipa/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2012/01/18/write-your-congressmen-please-do-not-support-sopapipa/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	</entry>
		<entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[Once More, This Time With Clojure]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2012/01/01/once-more-this-time-with-clojure/" />
		<id>http://joeygibson.com/?p=1953</id>
		<updated>2012-01-01T04:25:24Z</updated>
		<published>2012-01-01T04:25:24Z</published>
		<category scheme="http://joeygibson.com" term="java" /><category scheme="http://joeygibson.com" term="clojure" /><category scheme="http://joeygibson.com" term="html" /><category scheme="http://joeygibson.com" term="last.fm" /><category scheme="http://joeygibson.com" term="ruby" />		<summary type="html"><![CDATA[If you happened to read my post from the other day entitled My New “Top Artists Last 7 Days” Widget, you know that I went through three iterations of getting it going. The final solution, written in Ruby worked well. Until &#8230; <a href="http://joeygibson.com/2012/01/01/once-more-this-time-with-clojure/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2012/01/01/once-more-this-time-with-clojure/">&lt;p&gt;If you happened to read my post from the other day entitled &lt;a href="http://joeygibson.com/2011/11/21/my-new-top-artists-last-7-days-widget/" target="_blank"&gt;My New “Top Artists Last 7 Days” Widget&lt;/a&gt;, you know that I went through three iterations of getting it going. The final solution, written in &lt;a href="http://www.ruby-lang.org/en/" target="_blank"&gt;Ruby&lt;/a&gt; worked well. Until bands like Motörhead, Mötley Crüe and Einstürzende Neubauten showed up in the list. At that point, the &lt;a href="http://hpricot.com/" target="_blank"&gt;HTML parsing library&lt;/a&gt; I was using would barf, and processing would stop, leaving the list showing on the blog in an incomplete state. It wasn&amp;#8217;t the library&amp;#8217;s fault; apparently Ruby still has problems dealing with non-ASCII characters. I did everything I thought I needed to do to tell Ruby that it would be dealing with UTF-8 encoding, but it just kept right on barfing.&lt;/p&gt;
&lt;p&gt;I was left with only two choices: stop listening to any band with an umlaut in the name (and God help me if any of my Scandinavian bands popped up, with the Ø or å characters), or rewrite the stupid program, again, in a language that I knew could easily deal with UTF-8.&lt;/p&gt;
&lt;p&gt;Since I&amp;#8217;ve been working in &lt;a href="http://clojure.org" target="_blank"&gt;Clojure&lt;/a&gt; a lot lately, it seemed lika the logical choice. I spent about an hour working on it last night, and I ended up with a working program and a bit more Clojure experience. Here&amp;#8217;s the program for your edification, with a description to follow:&lt;/p&gt;
&lt;pre class="brush: clojure; title: ; notranslate"&gt;
(ns lastfmfetch.core
  (:gen-class))

(require '1)
(import '(java.io PrintStream)
        '(org.htmlcleaner HtmlCleaner))

(defn get-artist-and-playcount [cell]
  (let [title (.getAttributeByName cell &amp;quot;title&amp;quot;)
        [match artist playcount] (re-matches #&amp;quot;^(.+), played ([\w\d]+)\s*\S*$&amp;quot; title)
        playcountStr (if (= playcount &amp;quot;once&amp;quot;) &amp;quot;1&amp;quot; playcount)]
    [artist playcountStr]))

(defn get-url [cell]
  (let [links (.getElementsByName cell &amp;quot;a&amp;quot; true)
        a (first links)
        href (.getAttributeByName a &amp;quot;href&amp;quot;)]
    (str &amp;quot;http://last.fm&amp;quot; href)))

(defn fetch-data [filename]
  (let [response (client/get &amp;quot;http://www.last.fm/user/joeyGibson/charts?rangetype=week&amp;amp;subtype=artists&amp;quot;)
        cleaner (HtmlCleaner.)]
    (if (= (:status response) 200)
      (with-open [out (PrintStream. filename &amp;quot;UTF-8&amp;quot;)]
        (.println out &amp;quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta charset=\&amp;quot;UTF-8\&amp;quot;/&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;ol&amp;gt;&amp;quot;)
        (doto (.getProperties cleaner)
          (.setOmitComments true)
          (.setPruneTags &amp;quot;script,style&amp;quot;))
        (when-let [node (.clean cleaner (:body response))]
          (let [subjectCells (take 5 (.getElementsByAttValue node &amp;quot;class&amp;quot; &amp;quot;subjectCell&amp;quot; true true))]
            (doseq [cell subjectCells]
              (let [[artist playcount] (get-artist-and-playcount cell)
                    url (get-url cell)]
                (.println out (str &amp;quot;&amp;lt;li&amp;gt;&amp;lt;a href='&amp;quot; url &amp;quot;'&amp;gt;&amp;quot; artist &amp;quot;&amp;lt;/a&amp;gt;, Plays: &amp;quot; playcount &amp;quot;&amp;lt;/li&amp;gt;&amp;quot;))))))
        (.println out &amp;quot;&amp;lt;/ol&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;)))))

;; Main
(defn -main [&amp;amp; args]
  (if (&amp;lt; (count args) 1)
    (println &amp;quot;Usage: lastfmfetch &amp;lt;output_file&amp;gt;&amp;quot;)
    (fetch-data (first args))))
&lt;/pre&gt;
&lt;p&gt;I ended up using a library called &lt;a href="https://github.com/dakrone/clj-http" target="_blank"&gt;clj-http&lt;/a&gt; to handle the fetching of the URL. It&amp;#8217;s a Clojure wrapper for the &lt;a href="http://hc.apache.org/httpclient-3.x/" target="_blank"&gt;Apache HTTP Commons library&lt;/a&gt;, and was really easy to use. I&amp;#8217;m using &lt;a href="https://github.com/technomancy/leiningen" target="_blank"&gt;Leningen&lt;/a&gt;, by the way, so including clj-http was just a matter of including a line in the &lt;tt&gt;project.clj&lt;/tt&gt; file. I also used a Java library called &lt;a href="http://htmlcleaner.sourceforge.net/" target="_blank"&gt;HTMLCleaner&lt;/a&gt;, that fixes broken HTML and makes it available as a DOM. Since it is also in &lt;a href="http://mvnrepository.com/artifact/net.sourceforge.htmlcleaner/htmlcleaner/2.2" target="_blank"&gt;Maven Central&lt;/a&gt;, it was easy to include by adding another line to the project file.&lt;/p&gt;
&lt;pre class="brush: clojure; title: ; notranslate"&gt;
(defproject lastfmfetch &amp;quot;1.0.0-SNAPSHOT&amp;quot;
  :description &amp;quot;Fetch chart data from Last.fm&amp;quot;
  :dependencies [[org.clojure/clojure &amp;quot;1.3.0&amp;quot;]
                 [net.sourceforge.htmlcleaner/htmlcleaner &amp;quot;2.2&amp;quot;]
                 [ clj-http &amp;quot;0.2.6&amp;quot;]]
  :main lastfmfetch.core)
&lt;/pre&gt;
&lt;p&gt;The &lt;tt&gt;-main&lt;/tt&gt; function begins on line 38, but all it really does is check that there is a single command-line argument, and exits with a usage message if there is not. It then calls the &lt;tt&gt;fetch-data&lt;/tt&gt; function, which begins on line 20.&lt;/p&gt;
&lt;p&gt;On line 21, we declare two locals; one that will contain the results of fetching the web page, and one that is the HTML cleaner. If the fetch of the URL was successful, the status code will be the standard HTTP 200. If we got that, we then open a PrintStream on the filename given, specifying that it should be encoded with UTF-8. (I&amp;#8217;ve been working with Java for a very long time, and I always assumed that since Java strings are Unicode, files created with Java would default to UTF-8. That is not the case. That&amp;#8217;s why there&amp;#8217;s a second argument when creating the PrintStream, and why I&amp;#8217;m not using a PrintWriter.) We then print the first part of the output HTML file, set a couple of options to HTML Cleaner that cause it to strip comments, style and script sections from the HTML, and then start doing the real work.&lt;/p&gt;
&lt;p&gt;On line 29, we declare a local called &lt;tt&gt;node&lt;/tt&gt; that will contain the output of HTML Cleaner &lt;strong&gt;&lt;em&gt;if&lt;/em&gt;&lt;/strong&gt; it successfully parsed and cleaned the HTML. That&amp;#8217;s what &lt;a href="http://www.markhneedham.com/blog/2009/12/09/clojure-when-let-macro/" target="_blank"&gt;when-let&lt;/a&gt; does; it assigns the local as long as the function returns something &lt;a href="http://blog.jayfields.com/2011/02/clojure-truthy-and-falsey.html" target="_blank"&gt;truthy&lt;/a&gt; and then executes its body. If that function doesn&amp;#8217;t return something truthy, the rest of the code is skipped. We then take the first five elements from the HTML that have an attribute called &amp;#8220;class&amp;#8221; with a value of &amp;#8220;subjectCell&amp;#8221;. These are table cells. We then loop over them, extracting the artist and playcount value, and the URL. We do these things in two separate functions.&lt;/p&gt;
&lt;p&gt;The function called &lt;tt&gt;get-artist-and-playcount&lt;/tt&gt;, starting on line 8, takes the table cell as input. It then gets the attribute called &amp;#8220;title&amp;#8221; and uses a regular expression to pull out the artist and playcount values. If the playcount is the word &amp;#8220;once,&amp;#8221; it converts it to a 1, so all the values are numeric. It then returns the two values as a vector.&lt;/p&gt;
&lt;p&gt;The function called &lt;tt&gt;get-url&lt;/tt&gt;, starting on line 14, also takes the table cell as input. It then gets all the &amp;#8220;a&amp;#8221; elements from the cell (there&amp;#8217;s only one), and then gets the &amp;#8220;href&amp;#8221; attribute&amp;#8217;s value, which is the URL.&lt;/p&gt;
&lt;p&gt;Back at line 34, we take the three values we extracted with the two support functions and concatenates them together into HTML that will be a single line in an ordered list. We then output all the necessary closing tags to make the HTML well-formed, and we&amp;#8217;re done.&lt;/p&gt;
&lt;p&gt;While the Clojure code is a bit more dense than the Ruby code, it&amp;#8217;s actually four lines shorter. And it handles Unicode characters, which makes me happy.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=hyzJYbfFev8:6CqI4ktRLdc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=hyzJYbfFev8:6CqI4ktRLdc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=hyzJYbfFev8:6CqI4ktRLdc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=hyzJYbfFev8:6CqI4ktRLdc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=hyzJYbfFev8:6CqI4ktRLdc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=hyzJYbfFev8:6CqI4ktRLdc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=hyzJYbfFev8:6CqI4ktRLdc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=hyzJYbfFev8:6CqI4ktRLdc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=hyzJYbfFev8:6CqI4ktRLdc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=hyzJYbfFev8:6CqI4ktRLdc:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=hyzJYbfFev8:6CqI4ktRLdc:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/hyzJYbfFev8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2012/01/01/once-more-this-time-with-clojure/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2012/01/01/once-more-this-time-with-clojure/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[We Have To Get the Money Out of Politics]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2011/12/28/we-have-to-get-the-money-out-of-politics/" />
		<id>http://joeygibson.com/?p=1946</id>
		<updated>2011-12-29T03:26:17Z</updated>
		<published>2011-12-29T03:26:17Z</published>
		<category scheme="http://joeygibson.com" term="politics" /><category scheme="http://joeygibson.com" term="amendment" /><category scheme="http://joeygibson.com" term="bennett" /><category scheme="http://joeygibson.com" term="constitution" /><category scheme="http://joeygibson.com" term="michael moore" /><category scheme="http://joeygibson.com" term="sanders" /><category scheme="http://joeygibson.com" term="senate" />		<summary type="html"><![CDATA[It costs a lot to get elected to high political office. A lot. So much, in fact, that a candidate has to either be independently wealthy, or they have to sell their souls votes to those who would finance their &#8230; <a href="http://joeygibson.com/2011/12/28/we-have-to-get-the-money-out-of-politics/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2011/12/28/we-have-to-get-the-money-out-of-politics/">&lt;p&gt;It costs a lot to get elected to high political office. A lot. So much, in fact, that a candidate has to either be independently wealthy, or they have to sell their &lt;del&gt;souls&lt;/del&gt; votes to those who would finance their campaigns. This is one of the many things that is wrong with our political system. There is no possible way that someone like me could run for anything higher than local office; I don&amp;#8217;t have the money, and even if some donors wanted to fund me, I would&amp;#8217;t want to be beholden to them on their pet issues. So what do we do about it?&lt;/p&gt;
&lt;p&gt;For one, we overturn the horrible &lt;a href="http://en.wikipedia.org/wiki/Citizens_United_v._Federal_Election_Commission" target="_blank"&gt;Citizens United&lt;/a&gt; case. &lt;a href="http://sanders.senate.gov/" target="_blank"&gt;Senator Sanders&lt;/a&gt; is introducing a Constitutional amendment, called the &lt;a href="http://sanders.senate.gov/petition/?uid=f1c2660f-54b9-4193-86a4-ec2c39342c6c" target="_blank"&gt;Saving American Democracy&lt;/a&gt; amendment, to do just that, stating in no uncertain terms that to be considered a &amp;#8220;person,&amp;#8221; a pulse is required. It would forbid corporations from being classed as &amp;#8220;people&amp;#8221; and from donating to any politician. It will never pass or be ratified, but at least he&amp;#8217;s trying. You should watch this video of him explaining it on the floor of the Senate.&lt;/p&gt;
&lt;div align="center"&gt;&lt;iframe src="http://www.youtube.com/embed/G9qZZVqSQdo" frameborder="0" width="560" height="315"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;The second is public financing of elections. I used to think this was a horrible idea, but upon more level-headed reflection, it&amp;#8217;s the only way to go. &lt;a href="http://www.michaelmoore.com/words/mike-friends-blog/2012-im-only-backing-candidates-who-pledge-get-money-out-politics-dan-kildee-flint" target="_blank"&gt;Michael Moore has a post today about this very thing&lt;/a&gt;. The worst example of the amount of money in elections was Meg Whitman, running for Congress in 2010, who &lt;a href="http://blog.sfgate.com/nov05election/2010/09/15/republican-billionaire-meg-whitman-breaks-the-record-now-the-largest-self-funded-political-candidate-ever/" target="_blank"&gt;spent $119 million of her own money&lt;/a&gt;. You can&amp;#8217;t compete with that, unless you also have access to that sort of money. If elections were publicly funded, and everyone who runs for office has the same financial limitations placed upon them, the need for obscene amounts of cash to campaign goes away. Now, I don&amp;#8217;t know how the determination would be made of who counts as a viable candidate, since we can&amp;#8217;t very well fund &lt;em&gt;everyone&lt;/em&gt; who says they want to run for office. That would have to be worked out later. But, just like Senator Sanders&amp;#8217; amendment, this will never happen.&lt;/p&gt;
&lt;p&gt;Third, we have to stop the &amp;#8220;revolving door&amp;#8221; between the Congress and the lobby. In that same Michael Moore post, he mentions &lt;a href="http://bennet.senate.gov/" target="_blank"&gt;Senator Michael Bennett&lt;/a&gt;, a Democrat from Colorado, who has introduced something he calls a &lt;a href="http://bennet.senate.gov/newsroom/press/release/?id=3b89b24a-c81e-4d6d-a4ec-0d3f5b91e728" target="_blank"&gt;Plan for Washington Reform&lt;/a&gt; that would, among other things, place a lifetime ban on former Congressmen from becoming lobbyists. &lt;em&gt;You have to read this!&lt;/em&gt; I just developed a man-crush on Senator Bennet as I was reading it. The things he proposes would fix so many problems in Washington. That means, of course, it has no chance of passing.&lt;/p&gt;
&lt;p&gt;Oh, one more thing. Have you ever wondered what sort of financial distribution there is among our elected &amp;#8220;representatives&amp;#8221;? In other words, how many millionaires are there vs. how many average joes. Here&amp;#8217;s a handy chart to answer that question.&lt;/p&gt;
&lt;div align="center"&gt;&lt;a href="http://front.moveon.org/how-many-millionaires-directly-create-our-laws/"&gt;&lt;img src="http://cdn.front.moveon.org/wp-content/uploads/2011/12/millawmakers-full.jpg" alt="" width="480" height="628" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Anyway, this wasn&amp;#8217;t the most eloquent explanation, but that&amp;#8217;s what I think needs to happen. Go read Michael Moore&amp;#8217;s blog post, then watch Senator Sanders&amp;#8217; video, then read Senator Bennet&amp;#8217;s proposal.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=sfMVxmvL4SQ:ZvWHrW0QfSM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=sfMVxmvL4SQ:ZvWHrW0QfSM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=sfMVxmvL4SQ:ZvWHrW0QfSM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=sfMVxmvL4SQ:ZvWHrW0QfSM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=sfMVxmvL4SQ:ZvWHrW0QfSM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=sfMVxmvL4SQ:ZvWHrW0QfSM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=sfMVxmvL4SQ:ZvWHrW0QfSM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=sfMVxmvL4SQ:ZvWHrW0QfSM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=sfMVxmvL4SQ:ZvWHrW0QfSM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=sfMVxmvL4SQ:ZvWHrW0QfSM:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=sfMVxmvL4SQ:ZvWHrW0QfSM:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/sfMVxmvL4SQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2011/12/28/we-have-to-get-the-money-out-of-politics/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2011/12/28/we-have-to-get-the-money-out-of-politics/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[Fizzing and Buzzing With Clojure]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2011/12/12/fizzing-and-buzzing-with-clojure/" />
		<id>http://joeygibson.com/?p=1935</id>
		<updated>2011-12-12T04:44:05Z</updated>
		<published>2011-12-12T04:44:05Z</published>
		<category scheme="http://joeygibson.com" term="tech" /><category scheme="http://joeygibson.com" term="clojure" /><category scheme="http://joeygibson.com" term="lisp" /><category scheme="http://joeygibson.com" term="programming" />		<summary type="html"><![CDATA[I&#8217;ve known about the FizzBuzz problem for a few years. I&#8217;ve written solutions for it in a few languages, but never posted them. I&#8217;ve been working with Clojure lately, and after reading articles about how many job applicants can&#8217;t solve &#8230; <a href="http://joeygibson.com/2011/12/12/fizzing-and-buzzing-with-clojure/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2011/12/12/fizzing-and-buzzing-with-clojure/">&lt;p&gt;I&amp;#8217;ve known about the &lt;a href="http://c2.com/cgi/wiki?FizzBuzzTest" target="_blank"&gt;FizzBuzz&lt;/a&gt; problem for a few years. I&amp;#8217;ve written solutions for it in a few languages, but never posted them. I&amp;#8217;ve been working with &lt;a href="http://clojure.org/" target="_blank"&gt;Clojure&lt;/a&gt; lately, and after reading articles about how many job applicants can&amp;#8217;t solve a simple problem like this &lt;a href="http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html" target="_blank"&gt;here&lt;/a&gt;, &lt;a href="http://www.codinghorror.com/blog/2007/02/fizzbuzz-the-programmers-stairway-to-heaven.html" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/" target="_blank"&gt;here&lt;/a&gt;, I decided to do a Clojure version. (It baffles me that someone who claims to be a developer can&amp;#8217;t come up with a solution for this, no matter how good or bad it might be.)&lt;/p&gt;
&lt;p&gt;I ended up doing it three different ways. The first is a simple first-cut solution. The second is somewhat better, I think, and the third is a refinement of the second. In all three cases, they use a nested function to do the evaluation, and return a lazy, infinite sequence. Here&amp;#8217;s the first&lt;/p&gt;
&lt;pre class="brush: clojure; title: ; notranslate"&gt;
(defn fizzbuzz []
  (map (fn [i] (cond
                 (and (= (rem i 3) 0)
                      (= (rem i 5) 0)) &amp;quot;FizzBuzz!&amp;quot;
                 (= (rem i 3) 0) &amp;quot;Fizz!&amp;quot;
                 (= (rem i 5) 0) &amp;quot;Buzz!&amp;quot;
                 :else i))
       (iterate inc 1)))

(doseq [i (take 100 (fizzbuzz))]
  (println i))
&lt;/pre&gt;
&lt;p&gt;This solution does work, but I have a problem with the fact that the division tests are done twice. I think doing those tests twice increases the chances of making a mistake. The second version does the tests one time, assigning the results to locals. It then checks them for nil, and concatenates them together, relying on the fact that a nil will not print.&lt;/p&gt;
&lt;pre class="brush: clojure; title: ; notranslate"&gt;
(defn fb []
  (let [fb1 (fn [n]
              (let [fizz (if (= (rem n 3) 0) &amp;quot;Fizz&amp;quot;)
                    buzz (if (= (rem n 5) 0) &amp;quot;Buzz&amp;quot;)]
                (if (or fizz buzz)
                  (str fizz buzz &amp;quot;!&amp;quot;)
                  n)))]
    (map fb1 (iterate inc 1))))

(doseq [i (take 100 (fb))]
  (println i))
&lt;/pre&gt;
&lt;p&gt;In this version, instead of passing an anonymous function to &lt;tt&gt;map&lt;/tt&gt;, I assigned it to a local in a &lt;tt&gt;let&lt;/tt&gt; expression. You can see that I only do the math once, assigning locals with either the appropriate word, or nil. I then check that one or the other of the locals are non-nil, cat them together and return it. If both are nil, the number itself is returned. &lt;/p&gt;
&lt;p&gt;The third version is almost identical to the second. The only difference is that the second one used a &lt;tt&gt;let&lt;/tt&gt; expression, and the third one uses a &lt;tt&gt;letfn&lt;/tt&gt; expression. It&amp;#8217;s effectively the same thing, but the third one is ever-so-slightly shorter, and I think every-so-slightly easier to read.&lt;/p&gt;
&lt;pre class="brush: clojure; title: ; notranslate"&gt;
(defn fb2 []
  (letfn [(fb3 [n]
               (let [fizz (if (= (rem n 3) 0) &amp;quot;Fizz&amp;quot;)
                     buzz (if (= (rem n 5) 0) &amp;quot;Buzz&amp;quot;)]
                 (if (or fizz buzz)
                   (str fizz buzz &amp;quot;!&amp;quot;)
                   n)))]
         (map fb3 (iterate inc 1))))

(doseq [i (take 100 (fb2))]
  (println i))
&lt;/pre&gt;
&lt;p&gt;I don&amp;#8217;t claim that these are particularly good solutions, though I do claim they work correctly. Any Clojure experts care to point out problems and/or offer suggestions?&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=bxbqm5NU0vc:08ekOo4dpGU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=bxbqm5NU0vc:08ekOo4dpGU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=bxbqm5NU0vc:08ekOo4dpGU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=bxbqm5NU0vc:08ekOo4dpGU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=bxbqm5NU0vc:08ekOo4dpGU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=bxbqm5NU0vc:08ekOo4dpGU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=bxbqm5NU0vc:08ekOo4dpGU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=bxbqm5NU0vc:08ekOo4dpGU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=bxbqm5NU0vc:08ekOo4dpGU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=bxbqm5NU0vc:08ekOo4dpGU:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=bxbqm5NU0vc:08ekOo4dpGU:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/bxbqm5NU0vc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2011/12/12/fizzing-and-buzzing-with-clojure/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2011/12/12/fizzing-and-buzzing-with-clojure/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	</entry>
		<entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[My New &#8220;Top Artists Last 7 Days&#8221; Widget]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2011/11/21/my-new-top-artists-last-7-days-widget/" />
		<id>http://joeygibson.com/?p=1913</id>
		<updated>2011-11-26T05:53:35Z</updated>
		<published>2011-11-21T04:30:04Z</published>
		<category scheme="http://joeygibson.com" term="general" /><category scheme="http://joeygibson.com" term="last.fm" /><category scheme="http://joeygibson.com" term="php" /><category scheme="http://joeygibson.com" term="wordpress" />		<summary type="html"><![CDATA[Note Redux: I changed my approach, yet again. Scroll farther down to see the latest. Note: I changed my approach on this, so scroll down to see how I&#8217;m doing it now. I&#8217;ve been wanting a widget or an auto-post &#8230; <a href="http://joeygibson.com/2011/11/21/my-new-top-artists-last-7-days-widget/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2011/11/21/my-new-top-artists-last-7-days-widget/">&lt;p&gt;&lt;strong&gt;Note Redux&lt;/strong&gt;: I changed my approach, yet again. Scroll farther down to see the latest.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: I changed my approach on this, so scroll down to see how I&amp;#8217;m doing it now.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been wanting a widget or an auto-post on the blog for a while that would show my most-listened-to bands over the previous week. Tumblr users have had something like this for a while, and there were efforts to do this for WordPress before, but they either don&amp;#8217;t seem to work with the latest versions of WP, or they only pulled top tracks (not artists), or they pulled album covers, instead of text. All of that is to say that I couldn&amp;#8217;t find anything pre-made to use.&lt;/p&gt;
&lt;p&gt;So, I had to roll my own. I did so in about 10 minutes using the &lt;a href="http://wordpress.org/extend/plugins/php-code-widget/" target="_blank"&gt;PHP Code Widget&lt;/a&gt; &lt;strike&gt;and the &lt;a href="http://geryit.com/blog/2010/12/get-last-fm-top-weekly-artist-chart-to-your-web-site-with-php/" target="_blank"&gt;script on this page&lt;/a&gt;. The only drawback to this is you have to get a &lt;a href="http://www.last.fm/api/account" target="_blank"&gt;developer account with last.fm&lt;/a&gt;, but it&amp;#8217;s free, so no big deal there&lt;/strike&gt;. I installed the PHP Code Widget &lt;strike&gt;, then pasted the script into a new widget. The only changes I had to make were to replace the appropriate bits in the script with my info, and to escape a couple of double-quotes&lt;/strike&gt;. Now if you look down the right side of the blog, below the Twitter and Facebook links, you&amp;#8217;ll see a rolling record of my top-artists. In case you were wondering what I&amp;#8217;ve been listening to. :-)&lt;/p&gt;
&lt;p&gt;The only thing I&amp;#8217;m not sure about is how this will work with the two levels of caching I use (&lt;a href="http://wordpress.org/extend/plugins/wp-super-cache/" target="_blank"&gt;WP Super Cache&lt;/a&gt; and &lt;a href="https://www.cloudflare.com/" target="_blank"&gt;Cloudflare&lt;/a&gt;). I suppose we&amp;#8217;ll see in the next few days, eh?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;11/23/2011 Update&lt;/strong&gt;: I decided that I didn&amp;#8217;t like the way I was doing this, for a couple of reasons. First, each time someone viewed the page, it would be making a call to Last.fm for my stats. This is too often. Also, the values returned using the developer API were at odds with what you can get just going through the web. So what I did was write a Ruby script to pull the feed once a day, parse it and output HTML to a file. I then used the PHP Code Widget to include it. Far simpler, in my opinion.&lt;/p&gt;
&lt;p&gt;Here&amp;#8217;s the Ruby code:&lt;/p&gt;
&lt;pre class="brush: ruby; title: ; notranslate"&gt;
#!/usr/bin/ruby

require 'rexml/document'
require 'open-uri'

include REXML

open(&amp;quot;http://ws.audioscrobbler.com/2.0/user/joeyGibson/weeklyartistchart.xml&amp;quot;) do |http|
	response = http.read
	doc = REXML::Document.new response

	index = 0

	File.open(ARGV[0], &amp;quot;w&amp;quot;) do |out|
		out.write(&amp;quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;\n&amp;quot;)
		out.write(&amp;quot;&amp;lt;meta charset=\&amp;quot;UTF-8\&amp;quot;/&amp;gt;\n&amp;quot;)
		out.write(&amp;quot;&amp;lt;body&amp;gt;&amp;lt;ol&amp;gt;\n&amp;quot;)

		doc.elements.each(&amp;quot;weeklyartistchart/artist&amp;quot;) do |artist|
			break if index == 5

			out.write &amp;quot;&amp;lt;li&amp;gt;&amp;lt;a href=\&amp;quot;#{artist.elements['url'].text}\&amp;quot;&amp;gt;#{artist.elements['name'].text}&amp;lt;/a&amp;gt;, Plays: #{artist.elements['playcount'].text}&amp;lt;/li&amp;gt;\n&amp;quot;

			index += 1
		end

		out.puts(&amp;quot;&amp;lt;/ol&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;\n&amp;quot;)
	end
end
&lt;/pre&gt;
&lt;p&gt;and here&amp;#8217;s the PHP that loads it:&lt;/p&gt;
&lt;pre class="brush: php; title: ; notranslate"&gt;
&amp;lt;?php include(&amp;quot;/tmp/artists.html&amp;quot;); ?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;11/26/2011 Update&lt;/strong&gt;: Well, I&amp;#8217;ve changed it again. I discovered that the RSS feed I was pulling is not updated with any sort of frequency. It certainly doesn&amp;#8217;t represent the &amp;#8220;last seven days&amp;#8221; as it claims to. At any rate, it differs greatly from what Last.fm shows on the web. So I decided to grab the HTML and pull out the interesting bits. I wrote another Ruby script, this time using &lt;a href="http://hpricot.com/" target="_blank"&gt;Hpricot&lt;/a&gt; to parse the HTML, which took about 10 minutes. So now, what you see on the right &lt;em&gt;should&lt;/em&gt; be the current values for the &amp;#8220;last seven days.&amp;#8221; Here&amp;#8217;s the latest script:&lt;/p&gt;
&lt;pre class="brush: ruby; title: ; notranslate"&gt;
#!/usr/local/bin/ruby

require 'rubygems'
require 'hpricot'
require 'open-uri'

open(&amp;quot;http://www.last.fm/user/your-username-here/charts?rangetype=week&amp;amp;subtype=artists&amp;quot;) do |http|
  doc = Hpricot.parse(http.read)

  count = 0

  File.open(ARGV[0], &amp;quot;w&amp;quot;) do |out|
    out.write(&amp;quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;\n&amp;quot;)
    out.write(&amp;quot;&amp;lt;meta charset=\&amp;quot;UTF-8\&amp;quot;/&amp;gt;\n&amp;quot;)
    out.write(&amp;quot;&amp;lt;body&amp;gt;&amp;lt;ol&amp;gt;\n&amp;quot;)

    doc.search(&amp;quot;td[@class=subjectCell]&amp;quot;).each do |subjectCell|
      break if count == 5

      artistString = subjectCell.get_attribute(&amp;quot;title&amp;quot;)

      artistString =~ /^(.+), played (\d+) times$/
      artist = $1
      playCount = $2

      subjectCell.search(&amp;quot;a&amp;quot;).each do |a|
        url = a.get_attribute(&amp;quot;href&amp;quot;)
        url = &amp;quot;http://last.fm#{url}&amp;quot;

        str = &amp;quot;#{artist}, #{url}, #{playCount}&amp;quot;

        out.write &amp;quot;&amp;lt;li&amp;gt;&amp;lt;a href=\&amp;quot;#{url}\&amp;quot;&amp;gt;#{artist}&amp;lt;/a&amp;gt;, Plays: #{playCount}&amp;lt;/li&amp;gt;\n&amp;quot;
      end

      count += 1
    end

    out.puts(&amp;quot;&amp;lt;/ol&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;\n&amp;quot;)
  end
end
&lt;/pre&gt;
&lt;p&gt;I&amp;#8217;m hopeful this is the last change. &lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=7fr58po0pYw:K2cR0DdIIps:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=7fr58po0pYw:K2cR0DdIIps:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=7fr58po0pYw:K2cR0DdIIps:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=7fr58po0pYw:K2cR0DdIIps:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=7fr58po0pYw:K2cR0DdIIps:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=7fr58po0pYw:K2cR0DdIIps:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=7fr58po0pYw:K2cR0DdIIps:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=7fr58po0pYw:K2cR0DdIIps:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=7fr58po0pYw:K2cR0DdIIps:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=7fr58po0pYw:K2cR0DdIIps:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=7fr58po0pYw:K2cR0DdIIps:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/7fr58po0pYw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2011/11/21/my-new-top-artists-last-7-days-widget/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2011/11/21/my-new-top-artists-last-7-days-widget/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
		<entry>
		<author>
			<name>Joey Gibson</name>
						<uri>http://joeygibson.com</uri>
					</author>
		<title type="html"><![CDATA[Lego VW Microbus]]></title>
		<link rel="alternate" type="text/html" href="http://joeygibson.com/2011/11/10/lego-vw-microbus/" />
		<id>http://joeygibson.com/?p=1897</id>
		<updated>2011-11-10T23:38:54Z</updated>
		<published>2011-11-10T23:37:12Z</published>
		<category scheme="http://joeygibson.com" term="life" /><category scheme="http://joeygibson.com" term="lego" /><category scheme="http://joeygibson.com" term="volkswagen" />		<summary type="html"><![CDATA[Thomas and I spent six hours this past weekend building this. It was my big splurge from our last trip to Disney World, back in October. What is it? It&#8217;s a classic, 1962 Volkswagen microbus. It was expensive, and had &#8230; <a href="http://joeygibson.com/2011/11/10/lego-vw-microbus/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></summary>
		<content type="html" xml:base="http://joeygibson.com/2011/11/10/lego-vw-microbus/">&lt;div align="center"&gt;&lt;object width="500" height="375" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="flashvars" value="offsite=true&amp;amp;lang=en-us&amp;amp;page_show_url=%2Fphotos%2Fjoeygibson%2Fsets%2F72157627952548063%2Fshow%2F&amp;amp;page_show_back_url=%2Fphotos%2Fjoeygibson%2Fsets%2F72157627952548063%2F&amp;amp;set_id=72157627952548063&amp;amp;jump_to=" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="src" value="http://www.flickr.com/apps/slideshow/show.swf?v=109615" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;embed width="500" height="375" type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=109615" flashvars="offsite=true&amp;amp;lang=en-us&amp;amp;page_show_url=%2Fphotos%2Fjoeygibson%2Fsets%2F72157627952548063%2Fshow%2F&amp;amp;page_show_back_url=%2Fphotos%2Fjoeygibson%2Fsets%2F72157627952548063%2F&amp;amp;set_id=72157627952548063&amp;amp;jump_to=" allowFullScreen="true" allowfullscreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;
&lt;p&gt;Thomas and I spent six hours this past weekend building this. It was my big splurge from our last trip to Disney World, back in October. What is it? It&amp;#8217;s a classic, 1962 &lt;a href="http://shop.lego.com/en-US/Volkswagen-T1-Camper-Van-10220" target="_blank"&gt;Volkswagen microbus&lt;/a&gt;. It was expensive, and had far too many pieces (1,332), but it was a blast putting it together. Now it&amp;#8217;s sitting on my desk, where I can gaze at it and/or remove the roof and pretend it&amp;#8217;s real&amp;#8230; :-)&lt;/p&gt;
&lt;p&gt;You can read more about the real microbus &lt;a href="http://en.wikipedia.org/wiki/VW_Microbus" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=X3KIJPFrtvo:liO0F19buo8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=X3KIJPFrtvo:liO0F19buo8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=X3KIJPFrtvo:liO0F19buo8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=X3KIJPFrtvo:liO0F19buo8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=X3KIJPFrtvo:liO0F19buo8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=X3KIJPFrtvo:liO0F19buo8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=X3KIJPFrtvo:liO0F19buo8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=X3KIJPFrtvo:liO0F19buo8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=X3KIJPFrtvo:liO0F19buo8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?a=X3KIJPFrtvo:liO0F19buo8:3QFJfmc7Om4"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeyGibsonsBlog?i=X3KIJPFrtvo:liO0F19buo8:3QFJfmc7Om4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeyGibsonsBlog/~4/X3KIJPFrtvo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://joeygibson.com/2011/11/10/lego-vw-microbus/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://joeygibson.com/2011/11/10/lego-vw-microbus/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	</entry>
	</feed><!-- Dynamic page generated in 0.539 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-02-08 00:00:36 --><!-- Compression = gzip -->

