<?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>Joe Fleming dot net &#187; Software</title>
	<atom:link href="http://joefleming.net/category/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://joefleming.net</link>
	<description>what you see is what you get</description>
	<lastBuildDate>Wed, 26 May 2010 19:25:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Serving Files in Internet Explorer over HTTPS</title>
		<link>http://joefleming.net/2010/05/11/serving-files-in-internet-explorer-over-https/</link>
		<comments>http://joefleming.net/2010/05/11/serving-files-in-internet-explorer-over-https/#comments</comments>
		<pubDate>Tue, 11 May 2010 21:34:13 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Computers & Technology]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[https]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=163</guid>
		<description><![CDATA[I recently came across a problem where serving a file to Internet Explorer would result in the following error message.

This affected IE6, IE7 and IE8 in my testing. The way I was serving the file was through PHP via readfile. Before sending the contents of the file, I was, of course, setting some header parameters [...]]]></description>
			<content:encoded><![CDATA[<p>I recently came across a problem where serving a file to Internet Explorer would result in the following error message.<br />
<a href="http://joefleming.net/wp-content/uploads/2010/05/Untitled.jpg"><img src="http://joefleming.net/wp-content/uploads/2010/05/Untitled-300x200.jpg" alt="" title="IE_Error" width="300" height="200" class="alignnone size-medium wp-image-164" /></a></p>
<p>This affected IE6, IE7 and IE8 in my testing. The way I was serving the file was through PHP via <a href="http://us2.php.net/manual/en/function.readfile.php">readfile</a>. Before sending the contents of the file, I was, of course, setting some header parameters so that the browser would handle the file and the user wouldn&#8217;t just see some binary garbage on their screen. In my case, I was serving a PDF file that was being generated server-side and sent to the client. The basic header parameters are as follows:</p>
<p><code>// We'll be outputting a PDF<br />
 header('Content-type: application/pdf');<br />
 // It will be called your_file.pdf<br />
 header('Content-Disposition: attachment; filename="your_file.pdf"');<br />
 // declare Files Size here (for the sake pf peoples sanity, please add this<br />
 header('Content-Length: '.filesize($filename));</code></p>
<p>This works just fine in most situations, but once you introduce a secure connection, IE fails with the above error. Of course, like most IE problems, this doesn&#8217;t happen in any other browser. Ugh.<br />
<span id="more-163"></span><br />
Luckily, I noticed some additional parameters in the first example on the readfile page, namely the &#8216;Pragma&#8217; parameter. Reading some comments on the header function, I stumbled upon <a href="http://www.php.net/manual/en/function.header.php#88038">this one</a>. It basically, says that once you add HTTPS, you need to also tell IE how to handle caching the file. So now, my headers look like this:</p>
<p><code>// Force clear cache<br />
header('Pragma: public'); // Fix for IE<br />
header("Expires: 0");  //always expire<br />
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');<br />
// We'll be outputting a PDF<br />
header('Content-type: application/pdf');<br />
// It will be called your_file.pdf<br />
header('Content-Disposition: attachment; filename="your_file.pdf"');<br />
// declare Files Size here (for the sake pf peoples sanity, please add this<br />
header('Content-Length: '.filesize($filename));</code></p>
<p>Directly following these header calls is the readfile call and a call to exit to stop the script from executing anything else and alert the browser that the entire file has been delivered. </p>
<p>It seems like the Pragma parameter controls how browsers handle caching, and adding the other cache parameters to the header are just added enforcement. Now, IE works exactly as expected and I&#8217;ve got happy clients once again!</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2010/05/11/serving-files-in-internet-explorer-over-https/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Samsung X360 Backlight Control with Ubuntu</title>
		<link>http://joefleming.net/2010/03/30/samsung-x360-backlight-control-with-ubuntu/</link>
		<comments>http://joefleming.net/2010/03/30/samsung-x360-backlight-control-with-ubuntu/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 18:06:19 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Computers & Technology]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[karmic]]></category>
		<category><![CDATA[karmic koala]]></category>
		<category><![CDATA[samsung x360]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=155</guid>
		<description><![CDATA[I recently send my Samsung X360 laptop to the shop. The bearing on the fan had gone bad so I sent it in for warranty replacement. Before I sent it, I thought I would wipe out all my data since a lot of it was work-related and I didn&#8217;t need that information getting out, plus [...]]]></description>
			<content:encoded><![CDATA[<p>I recently send my Samsung X360 laptop to the shop. The bearing on the fan had gone bad so I sent it in for warranty replacement. Before I sent it, I thought I would wipe out all my data since a lot of it was work-related and I didn&#8217;t need that information getting out, plus I didn&#8217;t want to confuse the poor tech with Linux. </p>
<p>When I got it back, I immediately installed Ubuntu&#8217;s most current version, 9.10 (Karmic Koala). I was really impressed with it; even more-so than with 9.04 in fact. But I ran in to a problem when I was setting it all up; I couldn&#8217;t get the backlight adjustment to work.<br />
<span id="more-155"></span><br />
I resorted to the original <a href="http://ubuntuforums.org/showthread.php?t=1031764">Ubuntu Forums article</a> on it but I quickly found that it no longer worked. LVDS and VGA had been replaced with LVDA1 and VGA1, and changing the command still didn&#8217;t work; it complained about something which I no longer remember. But, that error (as well as replies to that thread) lead me to <a href="https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/397617/comments/30">this Launchpad comment</a> about disabling KMS.</p>
<p>Seems KMS is enabled by default for a certain chipset, specifically the Intel i915 chipset. My next questions, of course, were &#8220;what is KMS&#8221; and &#8220;how do I disable it&#8221;? Looking around, I found out that KMS, or Kernel Modesetting, could be disabled <a href="http://www.ubuntu.com/getubuntu/releasenotes/910#No%20Xv%20support%20for%20Intel%2082852/855GM%20video%20chips%20with%20KMS">like so</a>:</p>
<p><code>Edit: /etc/default/grub<br />
Change: GRUB_CMDLINE_LINUX=""<br />
To: GRUB_CMDLINE_LINUX="nomodeset"</code></p>
<p>Then run</p>
<p><code>sudo update-grub</code></p>
<p>Now, reboot and KMS will be disabled. We can now refer back to the original post <a href="http://ubuntuforums.org/showthread.php?t=1031764">here</a>, adding the following to the startup applications (or just running it from the command line each time, you&#8217;re call I guess).</p>
<p><code>xrandr --output LVDS --set BACKLIGHT 102 --set BACKLIGHT_CONTROL legacy --output VGA --auto</code></p>
<p>This still won&#8217;t make the brightness buttons on the keyboard work, but it WILL make xbacklight work. As the article points out, you can then set hotkeys for xbacklight commands.</p>
<p>So what do you lose by disabling KMS? Well, according to <a href="http://fedoraproject.org/wiki/Features/KernelModesetting#Summary">this article</a>, KMS offloads the graphics initialization from X to the kernel, which has some benefits. But, the fact remains that it doesn&#8217;t work on a lot of machines (the Samsung X360, The MacBook and possible MacBook Pro, MSI&#8217;s U90, U100, and U120 netbooks and the Asus EeePC, to name a handful), so for users with this hardware, you don&#8217;t lose anything ;). I&#8217;ve read about some people having success with KMS in newer kernels, but it didn&#8217;t work for me so I&#8217;m not going to bother posting it. I&#8217;m hopeful that this will be fixed when 10.04 (Lucid Lynx) is released, but I haven&#8217;t yet tried the beta release to see.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2010/03/30/samsung-x360-backlight-control-with-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Living with PulseAudio via PulseAudio Device Chooser</title>
		<link>http://joefleming.net/2010/01/06/living-with-pulseaudio-via-pulseaudio-device-chooser/</link>
		<comments>http://joefleming.net/2010/01/06/living-with-pulseaudio-via-pulseaudio-device-chooser/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 15:30:25 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Computers & Technology]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[pulseaudio]]></category>
		<category><![CDATA[skype]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=151</guid>
		<description><![CDATA[Telecommuting is a pretty sweet gig with a good number of benefits. To name a few, while I&#8217;m working I can:

Toss some laundry in the machine
Start my lunch and work while it cooks
Sign for packages when they are delivered

And that&#8217;s just the tip of the iceberg. However, to make telecommuting possible, there are some technologies [...]]]></description>
			<content:encoded><![CDATA[<p>Telecommuting is a pretty sweet gig with a good number of benefits. To name a few, while I&#8217;m working I can:</p>
<ul>
<li>Toss some laundry in the machine</li>
<li>Start my lunch and work while it cooks</li>
<li>Sign for packages when they are delivered</li>
</ul>
<p>And that&#8217;s just the tip of the iceberg. However, to make telecommuting possible, there are some technologies I simply MST have working. VPN is a big one, so I can get at the computers back in the office. SSH and FTP access is important to manage servers and files. And of course, I need to communicate with people; for that, we use AIM and Skype. Up until recently, it&#8217;s been enough for me to use my Nokia N800 to make my calls back to the office. It&#8217;s no good for chatting with video though, so I needed to set it up on my desktop with my camera and, preferably, my headset.</p>
<p>Simple enough task really; both my Logitech webcam and Plantronics headset work out of the box with Ubuntu (at least in 9.04) with nearly zero configuration required. I just plug them in, tweak Skype quickly and I&#8217;m up and running. However, with the addition of PulseAudio in the more recent version of Ubuntu, this became a little trickier.<br />
<span id="more-151"></span><br />
You see, in the new version of Skype, the ONLY option I have for ANY audio, input or output, is simpley PulseAudio. No control for which device to use for different tasks. Enter <a href="http://0pointer.de/lennart/projects/padevchooser/">padevchooser</a>, short for <strong>PulseAudio Device Chooser</strong>.</p>
<p><img src="http://i.imgur.com/nZASMl.png" alt="padevchooser in action" /></p>
<p>It&#8217;s a pretty sweet application, and you should have no problem installing it since it&#8217;s in the repository (note: I&#8217;ve <a href="https://help.ubuntu.com/community/Medibuntu#Adding%20the%20Repositories">added the Medibunutu repo</a>, and it&#8217;s possible it came from there). Once installed, you simply run it, from the command line, the run dialog, gnome-do or whatever method you choose, and you&#8217;ll get an icon in the notification area. Click on that, choose Volume Control, and you&#8217;re off and running. There are tabs for Playback, Recording, Output Devices, and Input Devices. Any current audio stream will show up in the list in the appropriate tab and you can move them around to different devices. </p>
<p>The easiest way to configure Skype is to place a test call. As soon as you start that call it will show up in the list. Move the &#8220;Skype: Output&#8221; stream to your headset in the Playback tab, do the same for &#8220;Skype: Input&#8221; in the Recording tab and you&#8217;re off and running. All Skype audio is now sent to your headset for easy chatting. I still haven&#8217;t figured out how to make it ring through the speakers and still use the headset for chatting, but this is good enough for now. Padevchooser made living with PulseAudio that much better!</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2010/01/06/living-with-pulseaudio-via-pulseaudio-device-chooser/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asynchronous PHP</title>
		<link>http://joefleming.net/2009/10/16/asynchronous-php/</link>
		<comments>http://joefleming.net/2009/10/16/asynchronous-php/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 18:46:53 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=144</guid>
		<description><![CDATA[I needed to &#8220;asynchronous PHP&#8221; recently and it took me a little while to find the solution. What my script basically does is generate a PDF file for the user to download based on some parameters they have chosen. The problem was, the PDF generate take a while and during that time I needed to [...]]]></description>
			<content:encoded><![CDATA[<p>I needed to &#8220;asynchronous PHP&#8221; recently and it took me a little while to find the solution. What my script basically does is generate a PDF file for the user to download based on some parameters they have chosen. The problem was, the PDF generate take a while and during that time I needed to show the user a screen explaining that the file was being generated, which would also show the download link once the generation was complete. My setup is as follows:</p>
<p><strong>generate.php</strong></p>
<blockquote><p>This script is where the user is sent when they click &#8220;download&#8221; on the parameter choice page. This is where the asynchronous magic has to happen. From here, the user is immediately sent to <em>download.php</em>.</p></blockquote>
<p><strong>download.php</strong></p>
<blockquote><p>This script gives the user either a &#8220;please wait&#8221; message of a &#8220;click here to download&#8221; message, depending on where the target PDF has been generated yet.
</p></blockquote>
<p>My problem was, even though was added the header redirect code (shown below) to <em>generate.php</em>, the browser would still wait for the PDF to be generated before sending the user to <em>download.php</em>. In other words, it was only synchronous PHP, which didn&#8217;t help me at all.</p>
<p><code>header("Location: download.php");</code></p>
<p>Thanks to <a href="http://www.php.net/manual/en/features.connection-handling.php#89177" rel="ext">this comment</a> on php.net, I was able to make it work! Basically, you need to tell the browser that you are done sending it data, even though the PHP script will keep executing. Code below:</p>
<p><code>//redirects the browser to the new url, but continues processing in the background<br />
        function redirect_and_continue($sURL) {<br />
                header( "Location: ".$sURL );<br />
                ob_end_clean();<br />
                header("Connection: close");<br />
                ignore_user_abort();<br />
                ob_start();<br />
                header("Content-Length: 0");<br />
                ob_end_flush();<br />
                flush();<br />
                session_write_close();<br />
        }</code></p>
<p>So, the user is sent to <em>generate.php</em>, which immediately calls <em>redirect_and_continue(&#8216;download.php&#8217;)</em>, redirecting the user to <em>download.php</em> while still continuing to execute <em>generate.php</em> (and make the PDF file). Once the user is at <em>download.php</em>, the script checks for the existence of the generated PDF file (as indicated by the filename sent through the session) and uses a <a href="http://en.wikipedia.org/wiki/Meta_refresh" rel="ext">meta refresh tag</a> in the HTML to keep reloading <em>download.php</em>. Once the PDF file exists, it provides the user with a link to the PDF file for download.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2009/10/16/asynchronous-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 64-bit, Firefox and Flash</title>
		<link>http://joefleming.net/2009/04/23/ubuntu-64-bit-firefox-and-flash/</link>
		<comments>http://joefleming.net/2009/04/23/ubuntu-64-bit-firefox-and-flash/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 21:17:23 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Computers & Technology]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=108</guid>
		<description><![CDATA[OK, so you have this sweet new computer (much like myself) running 64-bit Ubuntu like a champ. Except for one thing; Flash elements on webpages in keep flaking out. That is, from time to time, instead of seeing the Flash content, you see a grey box that doesn&#8217;t do anything. It just sits there, mocking [...]]]></description>
			<content:encoded><![CDATA[<p>OK, so you have this sweet new computer (<a href="http://joefleming.net/2009/03/11/my-sweet-new-laptop/">much like myself</a>) running 64-bit Ubuntu like a champ. Except for one thing; Flash elements on webpages in keep flaking out. That is, from time to time, instead of seeing the Flash content, you see a grey box that doesn&#8217;t do anything. It just sits there, mocking you, until you close and re-open either the tab, or in most cases, the browser itself. </p>
<p>I had this happen in both Firefox and Opera. As it turns out, the problem is related to the machine running a 32-bit version of flash with a 64-bit version of the browser. There are 2 ways to fix this: run a 32-bit browser or run 64-bit flash. But, why would you run a 32-bit browser on your sweet 64-bit machine? Well, because there isn&#8217;t a 64-bit version of flash&#8230; or at least, there wasn&#8217;t <a rel="ext" href="http://labs.adobe.com/technologies/flashplayer10/releasenotes_64bit.html">until recently</a>.</p>
<p>I was tired of this problem so I hit Google and looked for a solution. Sure enough, <a rel="ext" href="http://news.softpedia.com/news/How-to-Install-Adobe-Flash-Player-64-bit-on-Ubuntu-8-10-98076.shtml">I found one</a>! Now, I will warn you that the 64-bit Flash is still in Alpha, but i&#8217;ve been running it for a few weeks now without any problems. Here&#8217;s how you can too.<br />
<span id="more-108"></span><br />
Before we begin, <strong>CLOSE FIREFOX</strong>!! That guide will tell you the same thing. I had a friend who borked his entire Flash setup and I have a feeling this is why that happened. Grab the files, write down the instructions, close Firefox and go for it. Personally, I just opened the instructions in Opera and everything worked out just fine.</p>
<p>Start by removing the existing 32-bit version of Flash. If you haven&#8217;t yet installed it, you can skip to the next part. To uninstall it, fire up the Synaptic Package Manager, search for <em>nsplugin</em> and select <em>Mark for Complete Removal</em>. It will confirm that you also want to remove flashplugin-nonfree, click Mark and then Apply.</p>
<p>Next, download the <a rel="ext" href="http://labs.adobe.com/downloads/flashplayer10.html">alpha 64-bit Flash 10 player</a> from Adobe. One last warning: this is alpha software, and I make no guarantees that it will work, or even not ruin everything, nor does Adobe. Note the filename; in my case, it was <em>libflashplayer-10.0.22.87.linux-x86_64.so.tar.gz</em>, so that&#8217;s what I&#8217;ll use in the console instructions below.</p>
<p>Finally, we need to extract the files and put them in the proper places. The guide will tell you to do this through the X interface, but that&#8217;s not my style. Here&#8217;s how to do it from a terminal, assuming you downloaded the flash tarball to your Desktop.</p>
<p><code>$ cd ~/Desktop<br />
$ tar zxvf libflashplayer-10.0.22.87.linux-x86_64.so.tar.gz<br />
$ mkdir ~/.mozilla/plugins<br />
$ mv libflashplayer.so ~/.mozilla/plugins</code></p>
<p>That&#8217;s it. Now start Firefox back up and you&#8217;re good to go! As I said, this fixed my problem completely, so hopefully it&#8217;ll fix yours as well. While we&#8217;re on the topic, I also highly recommend using <a href="https://addons.mozilla.org/en-US/firefox/addon/433" rel="ext">FlashBlock</a> so cut down on flash ads, useless video loading and just generally enhance your browsing experience. And don&#8217;t worry, you can whitelist whatever sites you want so you won&#8217;t have to keep making extra clicks to watch videos.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2009/04/23/ubuntu-64-bit-firefox-and-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How NOT to Sell MP3s</title>
		<link>http://joefleming.net/2009/03/16/how-not-to-sell-mp3s/</link>
		<comments>http://joefleming.net/2009/03/16/how-not-to-sell-mp3s/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 06:43:00 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Computers & Technology]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=103</guid>
		<description><![CDATA[I recently came across the band 3 on last.fm and absolutely love them. I managed to find all of their albums via torrents, but I thought I would actually buy their stuff since they aren&#8217;t on an RIAA label. Their website didn&#8217;t help at all and CDBaby didn&#8217;t have any of their stuff. I was [...]]]></description>
			<content:encoded><![CDATA[<p>I recently came across the band <a href="http://en.wikipedia.org/wiki/3_(band)" rel="ext">3</a> on last.fm and absolutely love them. I managed to find all of their albums via torrents, but I thought I would actually buy their stuff since they aren&#8217;t on an <a href="http://riaaradar.com" rel="ext">RIAA label</a>. Their website didn&#8217;t help at all and CDBaby didn&#8217;t have any of their stuff. I was about to give up when I thought I&#8217;d give Amazon a try. Turns out, it was a good idea; Amazon had all of their albums available for sale. But, that&#8217;s also where the problem came in.<br />
<span id="more-103"></span><br />
Their oldest album, Paint by Number, was only available as an mp3 download. In order to buy mp3s from Amazon, you have to download THEIR software. &#8220;Crap,&#8221; I thought, &#8220;they always do this and the software never runs in Linux!&#8221; But to my surprise, theirs did! I&#8217;d still prefer a normal download link, but whatever, I installed it just to check it out. They give you a free mp3 to try the software out, and it worked just fine. &#8220;Great, now I can buy the album I want!&#8221; </p>
<p>Of course, their webpage kept kicking me off the album I was trying to buy and I had to keep pulling it back in from my history. And the album page lacked a way to purchase the WHOLE thing, I had to hunt that down from the band&#8217;s album list page. How any normal person (ie. my parents, or, GASP, my grandparents) is supposed to buy mp3s from Amazon is beyond me!</p>
<p>Despite all these problems, I finally had a &#8220;Buy MP3 Album&#8221; link and I was ready to go. I clicked on it and it verified that I would be purchasing the album. &#8220;Awesome, here we go,&#8221; I thought, thinking I would be taken to the checkout process and be given this magical file which would download the album through the download software I just installed. I couldn&#8217;t have been more wrong. Instead, I was greeted with a page saying that the order failed and that I had to do one of the following:</p>
<ul>
<li>Verify or update your 1-click billing address in the &#8220;Payment Settings&#8221; section of Your Account. (with a link)</li>
<li>Retry with the existing credit card. (no idea what this means, I tried 3 times and got the same errors)</li>
<li>Choose a different payment method from your account. (the one useful tip, with no indication of HOW i would do that!)</li>
<li>Enter a new payment method. (Again, no link, no idea how!!!!)</li>
</ul>
<p>They did have a link to their Help pages, which had all kinds of information on the Kindle 2, tracking my shipment, etc. No indication of how I buy mp3s without 1-click billing enabled or &#8220;[c]hoose a different payment method.&#8221; Needless to say, this crap is unusable! I&#8217;ve uninstalled their software, vowed to never buy mp3s from their site (not that I could if I wanted to, which I did) and I&#8217;ll no go out of my way to buy the physical discs from some other site, whether they&#8217;re available on Amazon or not.</p>
<p>This is exactly how NOT to sell mp3s. With processes like this, it&#8217;s no wonder at all why nobody can cut in to Apple&#8217;s market, no matter how over-priced and under-featured their players are and how terrible their iTunes software is!</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2009/03/16/how-not-to-sell-mp3s/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Remote Backups with Amazon&#8217;s S3</title>
		<link>http://joefleming.net/2009/02/09/remote-backups-with-amazons-s3/</link>
		<comments>http://joefleming.net/2009/02/09/remote-backups-with-amazons-s3/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 01:40:56 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Computers & Technology]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=70</guid>
		<description><![CDATA[Recently, my SATA controller on my RAID box failed, silently corrupting my entire array. Fun stuff, I assure you. Luckily, I had backed up the array about a month before the failure and was keeping a nightly rsync running. I had a few things that weren&#8217;t included in the rsync backup, but I didn&#8217;t really [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, my SATA controller on my RAID box failed, silently corrupting my entire array. Fun stuff, I assure you. Luckily, I had backed up the array about a month before the failure and was keeping a nightly rsync running. I had a few things that weren&#8217;t included in the rsync backup, but I didn&#8217;t really lose much data. So, again, backups saved my ass!</p>
<p>But, I&#8217;ve been aware for a while that regardless of how much I back up, I still have everything in one place. If there were a fire or a robbery, I&#8217;d be completely SOL. This fact has prompted me to look for some free or very low cost online file storage services. Most of the ones I found required you to run their software for them to work. This wasn&#8217;t very desirable for several reasons, the most important being that I run Linux and most of the services didn&#8217;t have a Linux client to use. But even more than that, I wanted to be the one in change of the backups, something that would allow me to just set up a cron job that would encrypt my data and ideally use rsync (via <a rel="ext" href="http://www.ibm.com/developerworks/aix/library/au-filesync/?S_TACT=105AGY06&#038;S_CMP=HP#N1014E">this script</a>) to send that data. Unfortunately, I still haven&#8217;t found that, but I did find service that is both cheap and easy to use; <a rel="ext" href="http://aws.amazon.com/s3/">Amazon&#8217;s Simple Storage Service</a>!<br />
<span id="more-70"></span><br />
To be fair, I didn&#8217;t find it, I was tipped off to it by Jason. I had heard of it, but never even considered using it for backups. Looking at the prices though, I couldn&#8217;t resist. For just $0.15/month per GB stored and $0.10 per GB transfered, I would theoretically keep weekly incremental backups of 2GB worth of data for $0.70/month or less!</p>
<p>Jay also tipped me off to some pretty handy Firefox extensions <a rel="ext" href="https://addons.mozilla.org/en-US/firefox/addon/6955">s3://</a> and <a rel="ext" href="https://addons.mozilla.org/en-US/firefox/addon/3247">S3Fox</a>. S3Fox is much cooler than s3://, but using it on my machine was causing X to use 100% of the cpu for some reason, so it wasn&#8217;t really usable for me. s3:// suited me just fine, allowing me to create &#8220;buckets&#8221; and browse, upload and remove my files from those buckets. It also saved the login info so all I need to do is slap the full S3 path in the address bar (like s3://mybucket/) and I was off. Now that was convenient!</p>
<p>Next up, I needed a way to script my backups. I was planning to use the s3fs Fuse library but I thought that might be overkill. Plus, for whatever reason, I&#8217;m just not ready to play with Fuse; it&#8217;s super cool, but I just didn&#8217;t feel like setting it up. Plus, I found <a rel="ext" href="http://s3tools.org/s3cmd">s3cmd</a>. Like s3://, it stores your login info to ease login and access of your files, but it offers one more step that is vital (at least to me); encryption!</p>
<p><code>s3cmd -e put myfile s3://mybucket</code></p>
<p>This will upload the <em>myfile</em> to my bucket on s3 and encrypt it on the fly. s3cmd uses symetric gpg and stores the password when you configure your AWS login information. Best of all, it transparently decrypts the file(s) when you download them from your s3 account. You don&#8217;t even have to tell s3cmd that the file is encrypted, it automatically knows. Amazing!</p>
<p>So, while I wish I had rsync access to the s3 service, I can make it meet my needs with a little tar magic. Since tar has an option to only grab files that have been changed since a specific date, I can leave my huge, base archive up there and just create a weekly tar file of all of the changed files since the last weekly tar file. So, I have my backup from today (2/9) and in a week (2/16) I&#8217;ll create a backup of all files that have changed since today (2/9). A week from then (2/23), I&#8217;ll create an archive of all the files that have changed since previous week (2/16) and so on. When the incremental backups start to get too large, I&#8217;ll simply create a new base backup and start the process all over again. Should work out swimmingly!</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2009/02/09/remote-backups-with-amazons-s3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fallout 3 Terminal Hacker</title>
		<link>http://joefleming.net/2009/01/30/fallout-3-terminal-hacker/</link>
		<comments>http://joefleming.net/2009/01/30/fallout-3-terminal-hacker/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 01:53:42 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=54</guid>
		<description><![CDATA[I recently started playing the game Fallout 3 a little more and I came across a terminal I could actually attempt to hack. After a few failed attempts at it, I thought I would poke around on the Internet and see if anyone had any guides for hacking the things. Instead, I found this online [...]]]></description>
			<content:encoded><![CDATA[<p>I recently started playing the game Fallout 3 a little more and I came across a terminal I could actually attempt to hack. After a few failed attempts at it, I thought I would poke around on the Internet and see if anyone had any guides for hacking the things. Instead, I found <a rel="ext" href="http://mediumexposure.com/dev/f3hack/">this online terminal hacker</a>, among others (this was the best one though). I thought, &#8220;man, that&#8217;s pretty slick, but I wish I has something that I could run locally in the event my Internet was down.&#8221; I poked around online a little and found a bunch of people claiming to be prepping downloadable, standalone versions, but nobody had yet delivered. Then I thought, &#8220;I bet I could write me own,&#8221; and that&#8217;s exactly what I did.</p>
<p>The rules for hacking the terminals are:</p>
<ul>
<li>You get 4 tries, after which you can never try again</li>
<li>If you exit before the 4 tries are up, your available tries reset to 4, but so does the puzzle</li>
<li>For each word you pick, you will be told how many matching letters you got</li>
<li>That count is how many matching letters there are in the SAME position of the correct word</li>
</ul>
<p>Originally, I was going to write it in Python. That way I could potentially execute it from anywhere I could install the Python interpreter and it would give me a reason to dive in to Python. Then I decided I wanted it done quick, and in an even more portable way; as a raw HTML page. So, I decided to write my version in Javascript, and <a rel="ext" href="http://joefleming.net/files/fallout3terminalhacker.html">here it is</a>!</p>
<p>I used the one over at mediumexposure.com as a benchmark and honed mine down a bit (I didn&#8217;t catch that last rule when I was playing the game, which is why I could never figure the puzzles out). I will admit, mine isn&#8217;t as smart as his since it doesn&#8217;t take past guesses and matches into account, only the most recent guess and the remaining list of possible words. So, there&#8217;s a chance mine won&#8217;t guess correctly in the 4 attempts, but in the handful of tests I ran, I always managed to get it.</p>
<p>Now, I know what you might be thinking. &#8220;Hey, this is just another online file, how is this portable? How can I run it from my machine?!&#8221; Simple, save the html file to your computer and open it locally. All of the magic happens in the Javascript code (which I commented so you can follow along), which will run from your machine without the need for any extrernal processing or server. Go ahead, give it a spin and be sure let me know what you think in the comments. It&#8217;s a work in progress, so when I make it smarter, I&#8217;ll update the file and post again. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2009/01/30/fallout-3-terminal-hacker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a Better CAPTCHA</title>
		<link>http://joefleming.net/2009/01/03/building-a-better-captcha/</link>
		<comments>http://joefleming.net/2009/01/03/building-a-better-captcha/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 05:46:29 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[Computers & Technology]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=47</guid>
		<description><![CDATA[CAPTCHAs can be good for stopping SPAM, but the last thing most of them are are usable. Don&#8217;t take my word for it, it&#8217;s a fact. One of the coolest ideas I ever saw was a HotOrNot mashup where you had to pick the three best looking ladies to prove you are a human. It [...]]]></description>
			<content:encoded><![CDATA[<p>CAPTCHAs can be good for stopping SPAM, but the last thing most of them are are usable. Don&#8217;t take my word for it, <a rel="ext" href="http://www.johnmwillis.com/other/top-10-worst-captchas/">it&#8217;s a fact</a>. One of the coolest ideas I ever saw was a <a rel="ext" href="http://valleywag.gawker.com/246656/tech/hot-or-not/a-face-only-a-bot-could-love">HotOrNot mashup</a> where you had to pick the three best looking ladies to prove you are a human. It was both usable and easy for a normal person, like my Grandparents, to use. That&#8217;s pretty unique and hard to come by, and that&#8217;s why I liked it.</p>
<p>One of the other easier CAPTCHAs I&#8217;ve <a rel="ext" href="http://selectitaly.com/contact.php">used at work</a> is a little dynamic images that asks you to do a little simple math. It&#8217;s an idea I saw on another site so I thought I would give it a try and it&#8217;s been extremely effective despite it&#8217;s ease of being broken. Surprisingly, it has completely stopped all SPAM coming through our contact form.</p>
<p>Another one I tried, much less effectively, is a colored word and a dropdown with a number of colors to choose from. It literally asks &#8220;What color is this text?&#8221; and offers a number of possibilities. This, however, was not effective for more than a week or so. The form still sees about one or two SPAM messages a day, which is especially strange because it&#8217;s a site that sees far less traffic. I think if I added more colors that weren&#8217;t even valid selections and changed the order it might be more effective, but I still need to find something better.</p>
<p>I&#8217;m thinking a system that would show three images and ask which one doesn&#8217;t belong could be usable, but it&#8217;s a little more difficult to implement; where do I get the images, how do I randomize the data, etc. I really like the HotOrNot CAPTCHA because the images always change and all of the images and data are crowdsourced, nothing for you to manage.</p>
<p>So, what can one do? Sadly, I don&#8217;t have an answer, but there is a lot of work being done on the topic. I think I need to just keep looking and mull this all over for a bit. We&#8217;ll see what I can find or come up with.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2009/01/03/building-a-better-captcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal&#8217;s On Hold</title>
		<link>http://joefleming.net/2008/11/17/drupals-on-hold/</link>
		<comments>http://joefleming.net/2008/11/17/drupals-on-hold/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 23:16:14 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://joefleming.net/?p=41</guid>
		<description><![CDATA[I know I said before that I would be replacing Wordpress with Drupal around here, and I did start working on that. However, the more I read about Drupal, the harder it seems to do custom things. Actually, it&#8217;s more a problem of poor documentation than it is a lack of flexibility. Still, if I [...]]]></description>
			<content:encoded><![CDATA[<p>I know I said before that <a href="http://joefleming.net/2008/08/18/farewell-wordpress/">I would be replacing Wordpress with Drupal</a> around here, and I did start working on that. However, the more I read about Drupal, the harder it seems to do custom things. Actually, it&#8217;s more a problem of poor documentation than it is a lack of flexibility. Still, if I don&#8217;t know what I&#8217;m doing, it&#8217;s hard to learn anything.</p>
<p>Granted, I could easily replace Wordpress for the sake of my blog here (and probably still will at some point), but that&#8217;s not why I was planning to learn it. I wanted something that would allow me to crank out new pages quickly without constantly restarting from scratch. I do have a very weak framework I&#8217;ve written to try to achieve this, but every time I start a new site, I feel compelled to re-do at least part of it, so in the end I don&#8217;t save any time. In fact, I lose time because I have to re-learn the changes I made for each site when I need to maintain them.<br />
<span id="more-41"></span><br />
A while back, I started looking into frameworks to use at work. I&#8217;m still enthralled with <a rel="ext" href="http://www.symfony-project.org/">Symfony</a>, but it&#8217;s way too hard to just jump in to. In order to take advantage of all of its niceties, there&#8217;s a lot you need to learn. It&#8217;s almost like learning a new language on its own, which is fine and all, but it doesn&#8217;t help me get things done quickly. It&#8217;s hard to be motivated to learn new frameworks and techniques unless you have something to work on, and any new projects I have need to be done in a timely manner, so I can&#8217;t take too long to jump into something new.</p>
<p>Anyway, one other framework that stood out when I we were doing our research was <a rel="ext" href="http://codeigniter.com/">CodeIgniter</a>. Not because it&#8217;s better, but because it has more of an a-la-carte mentality. Don&#8217;t want to use the full MVC design pattern? No problem, just use the parts you want to; you can use it as a simple controller mechanism only if you so choose. Don&#8217;t feel like getting into a full <a rel="ext" href="http://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a>? Skip it, they have a built-in ActiveRecord style interpreter, which means you don&#8217;t need to create your own class for each table in your database. Of course, ou can write your queries completely by hand if you choose to too. Best of all, no command line magic to make your code work, and on top of it all, the entire framework is 3.3MB with the user guide included, under 2MB without it.</p>
<p>I&#8217;ve spent a couple nights reading through the documentation (which is pretty well done) and I already have a good understanding of how it all works. And, since it&#8217;s almost Christmas again, it&#8217;s time to get my annual list manager online again. So, I&#8217;ve got a new tool to play with and a simple project to do it with. As a result, Drupal&#8217;s on hold while I work on that. I&#8217;ll report back on how it goes.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/11/17/drupals-on-hold/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
