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

<channel>
	<title>Joe Fleming dot net</title>
	<atom:link href="http://joefleming.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://joefleming.net</link>
	<description>what you see is what you get</description>
	<pubDate>Mon, 17 Nov 2008 23:17:20 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<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 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 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 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>
		</item>
		<item>
		<title>Media Playback in Ubuntu</title>
		<link>http://joefleming.net/2008/08/23/media-playback-in-ubuntu/</link>
		<comments>http://joefleming.net/2008/08/23/media-playback-in-ubuntu/#comments</comments>
		<pubDate>Sat, 23 Aug 2008 18:32:57 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
		
		<category><![CDATA[Comuters &amp; Technology]]></category>

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

		<category><![CDATA[Open Source]]></category>

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

		<guid isPermaLink="false">http://joefleming.net/?p=33</guid>
		<description><![CDATA[So, I had some Real Media (rm) videos that I wanted to view in Linux. But, like so many other sane people out there, I didn&#8217;t want anything to do with the official Real Player for Linux. I&#8217;ve never been a fan of Real and I&#8217;ve always thought their software was a bloated mess. Plus, [...]]]></description>
			<content:encoded><![CDATA[<p>So, I had some Real Media (rm) videos that I wanted to view in Linux. But, like so many other sane people out there, I didn&#8217;t want anything to do with the official <a href="http://www.real.com/linux">Real Player for Linux</a>. I&#8217;ve never been a fan of Real and I&#8217;ve always thought their software was a bloated mess. Plus, why install yet another media player when I know I can get the job done with the mighty <a href="http://www.mplayerhq.hu">Mplayer</a>?!</p>
<p>A quick search on Ubuntu Forums yielded <a href="http://ubuntuforums.org/showpost.php?p=5643578&#038;postcount=8">this post</a>. Following the link posted, here&#8217;s how I got it working from the command line:</p>
<p><code>$ sudo wget http://www.medibuntu.org/sources.list.d/hardy.list -O /etc/apt/sources.list.d medibuntu.list<br />
$ wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add - &#038;&#038; sudo apt-get update<br />
$ sudo apt-get install non-free-codecs w32codecs</code></p>
<p>After that, the videos fired right up without a hitch. Brilliant! One thing to note: these codecs may be illegal in the US. I&#8217;ve read warning about them in the past anyway, though I didn&#8217;t happen to see any this time around. It&#8217;s kind of a legal gray area I guess, and while you&#8217;re not likely to get in trouble for using them, it&#8217;s something you should probably know. In any event, if you&#8217;re having problems playing videos in Linux (especially rm files), give this a shot.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/08/23/media-playback-in-ubuntu/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Farewell Wordpress</title>
		<link>http://joefleming.net/2008/08/18/farewell-wordpress/</link>
		<comments>http://joefleming.net/2008/08/18/farewell-wordpress/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 03:09:07 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[Open Source]]></category>

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

		<category><![CDATA[Site News]]></category>

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

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

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

		<guid isPermaLink="false">http://joefleming.net/?p=30</guid>
		<description><![CDATA[In an effort to save time when I put together sites for people, I&#8217;ve been working on a universal engine I can use. It is modeled loosely off the MercuryBoard code and, for the most part, has served me pretty well. Recently, I&#8217;ve tried to revamp it with more object oriented code, integrating PEAR and [...]]]></description>
			<content:encoded><![CDATA[<p>In an effort to save time when I put together sites for people, I&#8217;ve been working on a universal engine I can use. It is modeled loosely off the <a href="http://www.mercuryboard.com/">MercuryBoard</a> code and, for the most part, has served me pretty well. Recently, I&#8217;ve tried to revamp it with more object oriented code, integrating PEAR and a few other niceties. Still, the more and more I use it, the more I realize it saves me very little time. In fact, it actually costs me time when I have to go back and update the sites. It seems, sadly, the idea of a flexible CMS or framework is just too abstract for my skills.</p>
<p>I&#8217;ve spent some time reading about <a href="http://www.symfony-project.org/">Symfony</a>, which looks like an amazing project. I&#8217;m positive I can make it do anything I would need, but the learning curve is pretty steep and I&#8217;m worried that the time I&#8217;d take to learn it wouldn&#8217;t really pay off in the end. I like a lot of the concepts, but I&#8217;m just not completely sold on it.</p>
<p>So what does that have to do with Wordpress? Well, I&#8217;ve recently revisited a project that I spent some time with in the past but never really did much with. That project is <a href="http://www.drupal.org/">Drupal</a>.<br />
<span id="more-30"></span><br />
While it&#8217;s not nearly as flexible as Symfony is, it seems like a very useful platform for putting a site together. I followed a quick tutorial last week that outlined just how easy it was, and after reading through their <a href="http://drupal.org/getting-started">Getting Started</a> guide, I&#8217;m pretty sure it can be bent into anything I might need. To me honest, most of the sites I&#8217;ve put together didn&#8217;t really need much of anything.</p>
<p>But, again, how does this relate to Wordpress? Well, I&#8217;ve grown tired of Wordpress, and it seems like Drupal would make for a great blogging tool. I have no doubt that I could add a lot more than a simple blog should I choose to as well, which makes it that much more appealing. From what I&#8217;ve seen, it also runs significantly faster than Wordpress does, which is always a nice perk. </p>
<p>So, in an effort to spend more time using and learning Drupal, I&#8217;m planning to port all of my Wordpress posts to Drupal and use it exclusively to run this site. Worst case scenario, I end up with nothing more than a blog running on Drupal. That&#8217;s not too different that the blog I have running on Wordpress now, so that&#8217;s not too bad of a worst case. Look for the change to happen soon (hopefully this week). You&#8217;ll know when it happens as it&#8217;s unlikely I&#8217;ll spend the time working on a theme just yet, so this site will live in default Drupal mode while I continue my Drupal education. Fun stuff!</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/08/18/farewell-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A History of Coding and Computers</title>
		<link>http://joefleming.net/2008/08/02/a-history-of-coding-and-computers/</link>
		<comments>http://joefleming.net/2008/08/02/a-history-of-coding-and-computers/#comments</comments>
		<pubDate>Sat, 02 Aug 2008 21:49:37 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
		
		<category><![CDATA[Comuters &amp; Technology]]></category>

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

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

		<guid isPermaLink="false">http://joefleming.net/?p=26</guid>
		<description><![CDATA[Apparently one of the people Aaron works with called him out on his programming and computer use history and he posted his response on his blog. In that blog, he took the liberty of calling out a few of his friends, myself included. I put off responding because my computer crapped out on me again. [...]]]></description>
			<content:encoded><![CDATA[<p>Apparently one of the people Aaron works with called him out on his programming and computer use history and he <a href="http://aaronstaves.com/2008/06/21/software-development-meme/">posted his response on his blog</a>. In that blog, he took the liberty of calling out a few of his friends, myself included. I put off responding because my computer crapped out on me again. Now that I&#8217;m back up and running, here is my response. Enjoy.<br />
<span id="more-26"></span><br />
<strong>How old were you when you started programming?</strong></p>
<p>Technically, we started writing BASIC on Apple some Apple IIe&#8217;s (if memory serves me right anyway) in kindergarten. It was all very simple and I don&#8217;t really consider it programming, but that would be the answer to the question. In grade school I started tinkering with QBASIC a little, making some simple calculation programs and stupid little things. I would consider this a more appropriate answer to the question since the kindergarten experience was more of less &#8220;copy what&#8217;s on this piece of paper and see what it does&#8221;.</p>
<p><strong>What was your first language?</strong></p>
<p>As stated in the last question, it was BASIC. I didn&#8217;t actually play with anything besides BASIC until I was in high school and I took a class in C. Truth be told, I was more curious how computers worked than how to make them do what I wanted. I&#8217;m not really an avid programmer and I consider myself more of a scripter than a programmer. Still, I get paid to write HTML, PHP and Javascript all day long, so I guess I am a professional programmer. But I digress&#8230;.</p>
<p><strong>What was the first program you wrote?</strong></p>
<p>Aside from some really simple QBASIC stuff (mostly to speed up math homework in grade and middle school), I didn&#8217;t write a &#8220;real&#8221; program until the C class in high school. I did some things in a Hypercard class I took, but let&#8217;s be honest, Hypercard doesn&#8217;t really write &#8220;real programs.&#8221; Anyway, our final project in the C class was breakout which was actually a pretty fun project. Learning how to do animation, collision detection and I/O through the arrow keys was pretty fun. </p>
<p>The requirements were as basic as you could expect, but you got extra credit for adding your own touches. I remembered playing versions of breakout that would move the ball at different speeds and angles based on where on the paddle you hit it and if the paddle was moving, so I added that to it. Overall though, it was pretty basic, but also a lot of fun. For whatever reason though, I didn&#8217;t really care to write in C.</p>
<p><strong>What languages have you used since you started programming?</strong></p>
<p>Let&#8217;s see if I can do this in order of when I learned them:</p>
<p>BASIC / QBASIC, C, C++, HTML, Access, Visual Basic, PHP, MySQL, CSS, Javascript, bash, Assembly (68HC11), VHDL, Python, Perl. Some I learned while I was in school, the scripting languages I learned pretty much all on my own and are really the only languages I care to use. I&#8217;m still learning Python and Perl.</p>
<p><strong>What was your first professional programming gig?</strong></p>
<p>Actually, the job I have now with Select Italy is the first programming gig I&#8217;ve had. You could call the freelancing I did before that job my first programming gig I guess, but it didn&#8217;t make me a ton of money and I wasn&#8217;t drawing a paycheck from it per se.</p>
<p><strong>If you knew then what you know now, would have started programming?</strong></p>
<p>I don&#8217;t think I would have changed much. I probably would have spent some more time learning programming principles but I&#8217;m pretty happy with the languages I know.</p>
<p><strong>If there is one thing you learned along the way that you would tell new developers, what would it be?</strong></p>
<p>Even more important though, &#8220;release early, release often&#8221; is a good motto to live by. You&#8217;ll never get things right the first time through. One of my co-workers said just yesterday &#8220;there&#8217;s never time to do it right, but there&#8217;s always time to do it over&#8221; and I think it sums up that mentality even better. I&#8217;m still working on taking that advice myself though.</p>
<p><strong>What’s the most fun you’ve ever had programming?</strong></p>
<p>Ever since I learned the MooTools library, it&#8217;s the only thing I&#8217;ve been wanting to look at. I think it&#8217;s really cool to take something that was &#8220;finished&#8221;, spend a couple minutes adding some flair to it and seeing just how much cooler it looks when you are done.</p>
<p><strong>Who am I calling out?</strong></p>
<p>There are a lot of people I&#8217;d like to call out, but none I know that maintain a blog. Since <a href="http://jasonsidabras.com/">Jay</a> still hasn&#8217;t followed up on Aaron&#8217;s calling him out, I might as well call him out myself.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/08/02/a-history-of-coding-and-computers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mootools, I Choose You</title>
		<link>http://joefleming.net/2008/07/04/mootools-i-choose-you/</link>
		<comments>http://joefleming.net/2008/07/04/mootools-i-choose-you/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 15:00:53 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

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

		<category><![CDATA[Open Source]]></category>

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

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

		<guid isPermaLink="false">http://joefleming.net/?p=24</guid>
		<description><![CDATA[I&#8217;ve always been a &#8220;do it yourself&#8221; kind of web developer, but after reinventing the wheel time and time again and struggling to make my code work in the various different browsers out there, I&#8217;ve come to appreciate that I can save a TON of time through different libraries and toolkits. I&#8217;m no Javascript pro [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always been a &#8220;do it yourself&#8221; kind of web developer, but after reinventing the wheel time and time again and struggling to make my code work in the various different browsers out there, I&#8217;ve come to appreciate that I can save a TON of time through different libraries and toolkits. I&#8217;m no Javascript pro (though I am the resident guru at work), but I find the language interesting. Ever since Google came along and showed the world that Javascript can be used for more than just popups and other web annoyances, I&#8217;ve been enthralled with some of the cool things people have done with Javascript. From <a href="http://en.wikipedia.org/wiki/AJAX">AJAX</a> to <a href="http://en.wikipedia.org/wiki/Comet_(programming)">Comet</a>, simple <a href="http://www.dynamicdrive.com/">DHTML</a> to <a href="http://script.aculo.us/">animations</a>, it&#8217;s simply been an amazing evolution.</p>
<p>About a year ago, Aaron tipped me off to the magic of Javascript toolkits, specifically <a href="http://dojotoolkit.org/">Dojo</a>. For a while, I was a proponent of it, opting to use it exclusively to drive an internal application that I had written from the ground up at work. It&#8217;s an extremely powerful toolkit which has been steadily adding more functionality as it ages to that point that it&#8217;s arguably the most powerful toolkit on the market. Unfortunately, I&#8217;ve also found it to be one of the most poorly documented toolkits available as well, which I&#8217;m sure was due in part to my lackluster understanding of some of the more advanced Javascript concepts. Still, looking at some of the more advanced Dojo examples I&#8217;ve seen from Aaron and other sources online, most of the syntax escapes me completely, even as I continue to learn more and more about Javascript.<br />
<span id="more-24"></span><br />
At the time I started using it, I was working with version 0.4.1, and as anyone with some Dojo experience can attest, it&#8217;s a far cry from where the 0.9 and and later branches ended up. I&#8217;ve since upgraded to 0.4.3, but porting everything over to the 1.0 branch would have taken about as much time as moving over to a completely different library. The 0.9+ branches also officially did not support Safari 2, which was a huge problem considering we&#8217;re an all-Mac shop. It also meant that production-side adaptation was pretty much out of the question as it&#8217;s a safe assumption that the majority of people using any software are drastically behind on their updates, if they ever even choose to perform them. For a company that makes most of its money by sales through the website, we just can&#8217;t afford to exclude and entire sector of people like that.</p>
<p>With all that in mind, I decided I&#8217;d poke around and see what else was out there as a possible Dojo replacement. A couple months ago, Aaron tipped me off to <a href="http://www.mootools.net/">MooTools</a>, which seemed like a nice mix of <a href="http://www.prototypejs.org/">Prototype</a> and the Scriptaculous animation library that was built on top of it. I had passed it on to my boss as something to check out but it was kind of left at that, though I did plan to learn it on my own time.</p>
<p>About a month after that, we hired a new designer at work, mostly so my boss could focus more on PHP and MySQL code and not just the design of both the site and various ads (which had become a full-time job). During his first week there, the new guy happened to stumble across the MooTools library on his own and suggested that we use some of the animations in the library to spruce up the site a little, though he knew absolutely nothing about Javascript. Of course, being the resident Javascript guru in the office, I was asked to look into what it would take to make it work. </p>
<p>I had spent a little time the previous week sifting through the APIs and docs of various other toolkits and libraries to try and narrow them down into a proper replacement for my aging Dojo code. I had actually planned to start making use of the <a href="http://extjs.com/">Ext toolkit</a> since it was a good compromise for Dojo; the code and feature set were very similar and their API and documentation was much easier to follow than that of Dojo. But, it wasn&#8217;t enough for me to consider introducing yet another Javascript library into the code base, and it made no guarantee about working with Safari 2. </p>
<p>Of the two other programmers in the office, one had been using <a href="http://jquery.com/">jQuery</a> for about as long as I had been using Dojo while the other had just started to implement MooTools into another piece of software he had written from the ground up. Since those two were already in out code base, they scored extra points and earned my attention over some of the other libraries. </p>
<p>Since MooTools was called for in the case of this particular animation, I spent a little time reading through the <a href="http://docs.mootools.net/">API</a> and the <a href="http://clientside.cnet.com/wiki/mootorial">Mootorial</a> and picking apart some of the <a href="http://demos.mootools.net/">demos</a> available on the MooTools site. To my surprise, it started to make sense very quickly; their API is extremely well put together (with a few fringe exceptions), I found the code and syntax very easy to comprehend, and best of all, I managed to get the animation working in only a few hours having never worked with the library in the past. </p>
<p>I then proceeded to port all of my Dojo code to MooTools, and in about two days time I was done. I even added some snappy fading and scrolling animations to the system with gave it a really nice polish. It all loads significantly faster to boot! I took another day and a half and added some drag-and-drop functionality that I had been planning since very early on in the project, something I still don&#8217;t even know how to approach with Dojo but made quick work of with MooTools, even adding heavy modifications to meet my specific needs. I&#8217;ve also learned a ton more about Javascript, written my own MooTools menu class from scratch (mostly as a learning experience) and rolled out some cool new things to our production website. I&#8217;ve drunk the milk and now I&#8217;m hooked. I can&#8217;t imagine ever working with raw Javascript again to be honest.</p>
<p>But, MooTools isn&#8217;t for everyone. It&#8217;s meant to be more of a core library that you extend and use to build your applications quickly. It also has one very significant downside; like Prototype, it extends the base Javascript prototype, meaning it could break existing code you have. It&#8217;s probably rare that it would (I haven&#8217;t run into it personally), but it&#8217;s a consideration. It also doesn&#8217;t play well with other libraries and toolkits as a result.</p>
<p>The point of this long-winded post is simply that I have become a huge MooTools fan, and if you have a project that would benefit from a well-documented, cross-browser library with some really easy animations and extremely useful functionality, you may too. Check it out, I think it&#8217;ll be worth your time.</p>
<p>One note I want to make is that I wrote this before MooTools 1.2 was released. For the record, I love the changes that were made; it&#8217;s much faster, there are a lot of cool tweaks that make it easier to use and it adds a lot of very useful new methods. That said, I think their new documentation page and demos page are just terrible! In addition, they&#8217;ve completely disabled their forums in favor of Google Groups, which means any old discussions and examples now only live in Google&#8217;s cache despite them coming up in their search very often. Those of you look for 1.11 docs and demos, see <a href="http://docs111.mootools.net">here</a> and <a href="http://demos111.mootools.net">here</a>, respectively.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/07/04/mootools-i-choose-you/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Skirting ISP Torrent Filtering Reset Requests</title>
		<link>http://joefleming.net/2008/06/07/skirting-isp-torrent-fitlering/</link>
		<comments>http://joefleming.net/2008/06/07/skirting-isp-torrent-fitlering/#comments</comments>
		<pubDate>Sat, 07 Jun 2008 14:24:27 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
		
		<category><![CDATA[Comuters &amp; Technology]]></category>

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

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

		<guid isPermaLink="false">http://joefleming.net/?p=25</guid>
		<description><![CDATA[Many ISPs these days employ traffic shaping to make their networks run smoother. In the most basic sense, they give priority to more critical traffic, like VoIP for instance, and slow down less important traffic, like HTTP and Torrents. Lately, many ISPs have been doing their best to slap down any peer-to-peer (p2p) traffic, especially [...]]]></description>
			<content:encoded><![CDATA[<p>Many ISPs these days employ traffic shaping to make their networks run smoother. In the most basic sense, they give priority to more critical traffic, like VoIP for instance, and slow down less important traffic, like HTTP and Torrents. Lately, many ISPs have been doing their best to slap down any peer-to-peer (p2p) traffic, especially Bittorrent, because users are are consuming more bandwidth than the ISPs can handle. This is a result of the ISPs grossly overselling their networks and expecting most consumers to use a tiny fraction of their connection, a practice that worked great until more and more users became heavy consumers thanks to sites like YouTube and technologies like BitTorrent.</p>
<p>Now, I&#8217;m not saying that ISPs are doing anything wrong in overselling per se, but I do have a problem with them not properly planning for the future. Now that they have this bandwidth problem, instead of expending their networks to try and meet demands, they are using more and more restrictive filtering, sometimes even resorting to hacker-style packet injection in their traffic, nearly crippling whatever technology it is that people would like to use (and pay to use). Not only is this a very shady thing to do on their part, but in nearly all cases, they hide this fact from consumers and outright deny that anything is going on. They get away with all of this thanks to their monopolies in their select markets. But I won&#8217;t get in to all of that.</p>
<p>As in any other situation where one party tries to control another party, people are finding that there are many ways to get around this type of filtering. <span id="more-25"></span>One extremely popular method is to use an encrypting VPN, which essentially encrypts either all of your traffic or just select traffic. This works because filtering relies on reading the data that is being transmitted and using that information to determine how fast that traffic should flow, so by encrypting all that information, the traffic just moves on without any modification. The one major drawback to this method is that it&#8217;s rarely, if ever, free to do and the encryption overhead usually means that the traffic is slower than it normally would be.</p>
<p>In my personal situation, I use Comcast as my network provider, who has been notorious for their filtering of torrent traffic. More recently, they started to inject reset packets into the traffic, which fools your Bittorrent client into thinking that the users you are connected to have reset the connection causing the client to stop the transfer and attempt to re-establish the connection. Since this is done hundreds of times a minute, it effectively stops any exchange from actually occurring. Luckily, this is easy enough to work around either on your Linux (or and Unix or Unix clone really) machine locally on through a Linux firewall and router. In fact, if you run a custom firmware on a Linux-based router, like the Linksys WRT54GL for example, you may even be able to set up a filtering rule that would apply to your entire network.</p>
<p>This method uses a local firewall, iptables in Linux in this example, to drop these rogue reset requests completely from your Bittorrent traffic and can be added on top of your existing rules if you have any. In this example, you would replace $TORRENT_CLIENT_PORT with the port your torrent client is actually using. Be sure you run this command as root or through sudo.</p>
<pre>iptables -A INPUT -p tcp --dport $TORRENT_CLIENT_PORT --tcp-flags RST RST -j DROP</pre>
<p>What this will allow, if you are on a network that employs this technique, is for you to seed torrents that have already finished downloading. This is great for keeping up your ratio on private trackers and being a good user in general. </p>
<p>On my machine I set up a logging rule (Google how, it&#8217;s fairly straightforward) so I could actually see the dropped requests and it&#8217;s really quite amazing how many drop requests it is dropping. It&#8217;s about 1 per second with only 3 torrents open, sometimes even more. There&#8217;s something gratifying about knowing how hard they are trying to stop my traffic and knowing that it&#8217;s now having no effect at all, and as an added bonus, I can get back to being a responsible seeder to the world.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/06/07/skirting-isp-torrent-fitlering/feed/</wfw:commentRss>
		</item>
		<item>
		<title>I&#8217;ll Have One of Your Finest Arduinos, Please</title>
		<link>http://joefleming.net/2008/05/27/ill-have-one-of-your-finest-arduinos-please/</link>
		<comments>http://joefleming.net/2008/05/27/ill-have-one-of-your-finest-arduinos-please/#comments</comments>
		<pubDate>Wed, 28 May 2008 04:14:37 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
		
		<category><![CDATA[Arduino]]></category>

		<category><![CDATA[Comuters &amp; Technology]]></category>

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

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

		<category><![CDATA[Open Source]]></category>

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

		<guid isPermaLink="false">http://joefleming.net/?p=23</guid>
		<description><![CDATA[I&#8217;ve seen all kinds of really cool projects that use the fancy new Arduino microcontroller. I&#8217;m not the biggest fan of C or C++ (to be honest, I hate them both), but the Wiring model and the Processing environment seems interesting. So much so that I decided over this long weekend that I wanted to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen all kinds of <a href="http://www.homebrewtalk.com/showthread.php?t=49645">really</a> <a href="http://news.cnet.com/2300-1041_3-6198780.html?part=dht&#038;tag=nl.e433">cool</a> <a href="http://blog.makezine.com/archive/arduino/?p=2">projects</a> that use the fancy new <a href="http://www.arduino.cc/">Arduino</a> microcontroller. I&#8217;m not the biggest fan of C or C++ (to be honest, I hate them both), but the Wiring model and the Processing environment seems interesting. So much so that I decided over this long weekend that I wanted to get in on the fun on purchased a <a href="http://www.adafruit.com/index.php?main_page=product_info&#038;cPath=17&#038;products_id=68">kit from Adafruit</a>. Sure I could have gotten it cheaper and ditched all the extras, but it seemed reasonable given that it comes with the Protoshield, breadboard, a couple power options, USB cable and some extra goodies to get me started out of the box. I figured it was all worth it.</p>
<p>I have some ideas for the normal automated plant watering, temperature-based fan controls and email and chat LED alerts, but I don&#8217;t have any revolutionary plans for the device. Talking to Jason, he gave me the idea of controlling motors with the unit which got me thinking back to the Assembly-based cars we coded for in college. I can see putting together a little car that can sense and route around obstacles and he suggested mounting some IR transmitters to turn TVs in the area on and off at random, which would be pretty fun too. I caught <a href="http://homepage.ntlworld.com/bigup2bigal/graffiti.htm">this &#8220;Large scale DOT Matric printer&#8221;</a> on Hackaday too, which made me think about feeding images into the device and having it drive motors to actually create them on a large scale either like a DOT Matrix printer or a planer.</p>
<p>Anyway, we&#8217;ll see how much I do with this thing and how far I get. If nothing else, it&#8217;s an excuse to get back into hardware hacking. And if things go well, I can actually start posting projects up here. If you have any ideas for cool things to try out or questions about the unit, please post in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/05/27/ill-have-one-of-your-finest-arduinos-please/feed/</wfw:commentRss>
		</item>
		<item>
		<title>My Foray Into Data Recovery</title>
		<link>http://joefleming.net/2008/03/23/my-foray-into-data-recovery/</link>
		<comments>http://joefleming.net/2008/03/23/my-foray-into-data-recovery/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 15:59:30 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
		
		<category><![CDATA[Comuters &amp; Technology]]></category>

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

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

		<guid isPermaLink="false">http://joefleming.net/2008/03/23/my-foray-into-data-recovery/</guid>
		<description><![CDATA[I&#8217;ve been growing increasingly concerned with the quality of hard drives being made today. It used to be that a hard drive would last you many years before you&#8217;d see a failure out of it. In fact, I still have hard drives that date back to the early 90&#8217;s that continue to work to this [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been growing increasingly concerned with the quality of hard drives being made today. It used to be that a hard drive would last you many years before you&#8217;d see a failure out of it. In fact, I still have hard drives that date back to the early 90&#8217;s that continue to work to this day. I can&#8217;t say the same for more recent drives, especially those that have been made in the last year or two, as I&#8217;ve just been constantly dealing with failed hard drives on my machines. I&#8217;ll preface my most recent experience with a little history first.</p>
<p><strong>The Preface</strong></p>
<p>I recently upgraded my raid machine, which is simply a low-power PC in a large case with four hard drives in it all set up as a Linux software RAID-5 array. Previously, I had used four 160GB IDE drives hooked up in the machine using a PCI controller card. That was fine for storage a few years ago when I built it, but recently I&#8217;ve managed to fill the thing, so it was clearly time for an upgrade. Considering that the entire array was less than a single 500GB drive, it&#8217;s not too surprising. </p>
<p>My plan was to buy four 500GB drives and increase the array to 1.5TB, but before the planned migration, I decided to buy a new 500GB drive on which to back up the current array. Sure I could have replaced the drives one by one, rebuilding the array each time and expending the partition when I was all done, but the machine was never quite set up the way I wanted it to be, and since I wanted to switch from IDE to SATA, I would have had a lot of tweaking to do. I also wasn&#8217;t sure how far I was stretching the PSU in the machine, because while it was running a low power VIA CPU, it was still powering five hard drives (the array and the main system drive). Backing everything up to another drive and starting a new array from scratch just made more sense, so that&#8217;s exactly what I did.<br />
<span id="more-20"></span><br />
<strong>The Upgrade</strong></p>
<p>After backing the information up to my new Seagate drive, I ordered and installed four brand new OEM Seagate drives from Newegg. I exclusively buy Samsung these days as it&#8217;s the only company that in the past has been reliable for me. Hitachi was infamous for their glass platter &#8220;Deathstar&#8221; line of drives, so they were not even a consideration. I stay far away from the cheap JB drive from Western Digital as both my experience and the experience of a data recovery company I used to use at a previous job had shown that the drives were very prone to failure. I&#8217;ve had a couple Maxtor drives fail on me too, but never Seagates, their drives were rocks.</p>
<p>Of the four new drives I ordered, one was shipped to me DOA. It would click when powered on, slow down the system POST tremendously, and it stopped me from being able to format the partition with Ubuntu. Oddly enough, Debian let me, so that&#8217;s what I installed. This was my first experience with SATA drives, so I thought the clicking was normal. Then once I had everything up and running, the controller card kept crashing when I was copying information to it the RAID array. Checking the logs showed me that one of the drives was failing, and when I pulled the drive from the machine, it posted in a split second and there was no clicking. Newegg was really good about the exchange for a working drive, but it didn&#8217;t instill a lot of confidence in me about the reliability of the drives. I continue without any more issues, but I think it speaks to the quality of these new drives as a whole.</p>
<p><strong>The Failure and Recovery</strong></p>
<p>That brings us to my most recent failure. The 500GB drive that I had used to backup the original array had found a permanent home in my desktop, where I made use of it extensively, eventually filling it completely and operating at 90% or higher capacity from then on. I started using the old 160GB drives in external enclosures as an intermediate backup method and even went so far as to backup a lot of what I was downloading a couple months ago. Unfortunately, I didn&#8217;t keep up with that, and when I came home last week to find my machine complaining about I/O errors with the drive, I wished I had. Luckily, the really important stuff on the drive wasn&#8217;t THAT important, so it wasn&#8217;t more than an inconvenience to lose the drive, but it was a big inconvenience that I really rather have not had deal with.</p>
<p>I unmounted and remounted the drive and attempted to pull a few files off the drive, but it was clicking and the machine started hanging and reporting more I/O errors. I put the drive into a USB enclosure and it started having problems with it spinning up, so I was pretty sure the drive motor had died, meaning I was in a hopeless situation. I tossed it in the freezer just to see if that would help, and magically it started to spool up again. I still couldn&#8217;t get the files off the drive though, and after enough time, it wouldn&#8217;t mount either; it was clear I needed to do something more drastic.</p>
<p>Fast forward to a couple days ago, my new 500GB replacement drive had shown up and I was attempting to use an old machine to perform a recovery. My plan was to try and clone what I could of the old drive onto the new one and see if I could repair the new one. This is a technique that the data recovery companies use, so it seemed like a good enough idea. Worst case scenario, I lose the information, so I was no worse off than I already was. The machine I was trying to use was my Mom&#8217;s old Celeron box that she bought some six years ago and recently replaced. The problem with using it was that the machine could only see the first 200GB or space on the 500GB drives; not really useful in my case. Part of the problem was that I was using <a href="http://www.hiren.info/pages/bootcd">Hiren&#8217;s Boot CD</a>, which is full of DOS-based utilities that rely on the BIOS for drive information. Linux doesn&#8217;t have this problem, but all my LiveCDs had disappeared somehow and I didn&#8217;t feel like making a new one when I could simply toss the drives into my desktop. Plus, I didn&#8217;t think using dd to clone the drive would work. However, none of the DOS or Windows based software would do it, so it became my last hope.</p>
<p>I put both drives into my desktop and booted my Ubuntu install. Everything was going well; the drive stopped clicking, I disabled the auto-mount of the drive already so it wasn&#8217;t hanging the system and it had no problems seeing the drive. I still couldn&#8217;t mount it though, but that would hopefully be solved by cloning and repairing it. I jumped to the terminal since I didn&#8217;t need a GUI and fired up dd as follows:</p>
<pre>dd if=/dev/hdb of=/dev/hdc conv=noerror</pre>
<p>This is just a bitwise clone of the dying drive to the new one, and it tells dd not to quit on errors. This worked for a while, and while it was reporting many errors in the beginning, it didn&#8217;t stop. That is, until it got about 1.6GB in, then it reported that the destination drive had an I/O error. I was pretty sure that was a false report though and that the source just had some wacky problem that dd couldn&#8217;t recreate on the destination, so I re-ran the command passing in bs=1024. This was I knew how many bits it was using in 1 byte without any doubt and I could calculate where it was stopping. By my math, 1605884 bytes was where the bad part was, so I tried this:</p>
<pre>dd if=/dev/hdb of=/dev/hdc conv=noerror skip=1605884 seek=1605884 count=1</pre>
<p>What that does is try to copy the first byte (and only the first byte) from the point of failure and appends it to the source exactly where it should. This failed, as I expected. This meant one of two things; I calculated it correctly and I was trying to copy the same bad spot or there were many bad spots on the drive and I was going to have a hell of a time continuing on. So I tried to copy the next byte in:</p>
<pre>dd if=/dev/hdb of=/dev/hdc conv=noerror skip=1606908 seek=1606908 count=1</pre>
<p>This time it worked! So, I dropped the count so that it would keep going until the next error. Luckily for me though, it was the last error on the drive, and five hours later, I had a clone of the damaged drive. Things were looking good! Of course, I still couldn&#8217;t <em>mount</em> the clone, but at least I had a reliable platform for a restoration. Next, I had to repair the single XFS partition on the drive:</p>
<pre>xfs_repair -n /dev/hdc1</pre>
<p>The -n option says to not write any changes, only report what would be changed. This was a huge report as it was going to fix a LOT of errors. But, again, what did I have to lose? So I ran it without the -n and crossed my fingers. It failed&#8230;&#8230; but only because it had an outstanding log. Because XFS is a journaling filesystem, that journal (or log) was not written to the drive when it crashed. I captured the log with xfs_metadump but I couldn&#8217;t find out how to write that log to the drive. So, I ran xfs_repair again without the -n but this time with -L, which forces the log to clear before the repair.</p>
<pre>xfs_repair -L /dev/hdc1</pre>
<p><strong>The Results</strong></p>
<p>This ran for a few minutes, and when it was done, I could mount the drive! But I still wasn&#8217;t where I wanted to be. Because the journal was lost and because the superblock had gotten corrupted, all the files were moved to the lost+found directory and the filenames were simply the inode values. This was nearly worthless, as you can see by the screen capture below.</p>
<p><img src='http://joefleming.net/wp-content/uploads/2008/03/inodes.png' alt='inodes' /></p>
<p>Basically, the filesystem lost the information about the filename and location of may of the files and directories. I started to get ready to re-run the clone and replay the log before the recovery to see if it helped, but I decided to see what was in one of the directories before I ran the cloning for another five or six hours. To my surprise, the information inside the directories was properly named, as shown by the screenshot below.</p>
<p><img src='http://joefleming.net/wp-content/uploads/2008/03/files.png' alt='files' /></p>
<p>After sorting out the proper directory names I started comparing the backups that I had with the files that were recovered. All of the md5sums I ran resulted in matches, which means that I likely recovered 99% to 100% of the files without corruption. There were a lot of stray mp3s that were not properly named (at least nautilus thinks they are mp3s), but the few important files I actually wanted to back up as well as a lot of other very large files were all OK. My Virtualbox images, video files, mp3s, N800 map data, it was all OK! So now I am copying the recovered information to my raid array and making four backups of the information I really cared about. I&#8217;ll sort through it all later, for now, I&#8217;m just happy that it worked!</p>
<p>I guess the lesson to learn here is that before you write off your data as lost or send your failing drive off to a recovery company and spending thousands of dollars to get your data back, it might be worth spending a little time on your own to see what you can accomplish. Of course, recovery is no substitute for backups! <strong>ALWAYS KEEP RECENT BACKUPS OF YOUR INFORMATION</strong>!!! And, if the drive is audibly failing (clicking, grinding, spooling up and back down), don&#8217;t power it on unless you don&#8217;t plan to get that information back as it&#8217;s probably a mechanical failure that is destroying your information as it&#8217;s running. Now, back to sorting out this data, and backing it up!</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/03/23/my-foray-into-data-recovery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wordpress Users; Check Your Registered User List</title>
		<link>http://joefleming.net/2008/03/23/wordpress-users-check-your-registered-user-list/</link>
		<comments>http://joefleming.net/2008/03/23/wordpress-users-check-your-registered-user-list/#comments</comments>
		<pubDate>Sun, 23 Mar 2008 14:50:11 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
		
		<category><![CDATA[Site News]]></category>

		<guid isPermaLink="false">http://joefleming.net/2008/03/23/wordpress-users-check-your-registered-user-list/</guid>
		<description><![CDATA[I recently got an email saying that I had a new user register here. Out of curiosity, I checked who it was, but neither the name nor the email was familiar to me. The username was alina77vere9uk and the email alina77vere@gmail.com, which to me looked like the kind of email address that you&#8217;d see on [...]]]></description>
			<content:encoded><![CDATA[<p>I recently got an email saying that I had a new user register here. Out of curiosity, I checked who it was, but neither the name nor the email was familiar to me. The username was alina77vere9uk and the email alina77vere@gmail.com, which to me looked like the kind of email address that you&#8217;d see on a SPAM email, so I tossed it into Google to see what I&#8217;d find.</p>
<p>Sure enough, I&#8217;m not the only person who&#8217;s had this user register. As pointed out <a href="http://cubelodyte.com/2008/03/21/another-slice-of-spam/">over at the Cubelodyte&#8217;s lair</a>, this is mot likely a bot that is registering on Wordpess blogs all over the Internet, and while it&#8217;s not posting any comments, it&#8217;s highly likely that it&#8217;ll release some kind of SPAM payload at a later date. So, if you see this user register on your Wordpress blog, go ahead and delete them before then SPAM hits the fan.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/03/23/wordpress-users-check-your-registered-user-list/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rolling Your Own .deb Package, Getting Secure VPN Tunneling on Ubuntu</title>
		<link>http://joefleming.net/2008/02/08/rolling-your-own-deb-package-getting-secure-vpn-tunneling-on-ubuntu/</link>
		<comments>http://joefleming.net/2008/02/08/rolling-your-own-deb-package-getting-secure-vpn-tunneling-on-ubuntu/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 03:59:54 +0000</pubDate>
		<dc:creator>Joe</dc:creator>
		
		<category><![CDATA[Comuters &amp; Technology]]></category>

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

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

		<guid isPermaLink="false">http://joefleming.net/2008/02/08/rolling-your-own-deb-package-getting-secure-vpn-tunneling-on-ubuntu/</guid>
		<description><![CDATA[As you may or may not know, Ubuntu doesn&#8217;t include a build environment by default. What this means is that in order to compile program from source, you&#8217;ll need to get the build environment on your own. This is simple enough though, as outlined below:
sudo apt-get install build-essential checkinstall
This will install 2 things, the build [...]]]></description>
			<content:encoded><![CDATA[<p>As you may or may not know, Ubuntu doesn&#8217;t include a build environment by default. What this means is that in order to compile program from source, you&#8217;ll need to get the build environment on your own. This is simple enough though, as outlined below:</p>
<p><code>sudo apt-get install build-essential checkinstall</code></p>
<p>This will install 2 things, the build environment (build-essential) and a program that will allow you to install your compiled code as a .deb package (checkinstall). Installing your code as a deb means that you can easily remove it on your own using apt instead of hunting down files and removing them by hand. Instead you just issue <em>apt-get remove PACKAGE</em> as root and it&#8217;s gone.</p>
<p>I learned this while getting a VPN tunnel through <a href="http://www.torrentfreedom.com" rel="ext">Torrent Freedom</a> working. In order to use their service, you have to be running a Beta build of <a href="http://openvpn.net" rel="ext">OpenVPN</a>. Since the version in the Ubuntu repository is NOT the Beta, it won&#8217;t work with that version. So, you have to roll your own, but it&#8217;s easier than you might think.<br />
<span id="more-18"></span><br />
First, go get the package from the OpenVPN site. At the time of this writing, version 2.1 RC7 was the latest Beta build. Once you have it downloaded, open up a terminal, navigate to the path you downloaded it to and uncompress it. I won&#8217;t go through those steps, you should know this much already if you are trying to use VPN tunneling. Once there, execute the following:</p>
<p><code>sudo apt-get liblzo-dev libssl-dev<br />
./configure<br />
make<br />
sudo checkinstall</code></p>
<p>I assume you have installed your build environment at this point. If not, you&#8217;ll need to do that first before you can compile, This will install the dependencies you need to build OpenVPN, configure the source, create a binary from the source, build a .deb package and finally, install that package. You will be asked some questions when you run checkinstall, but it&#8217;s nothing too pressing, so simple that I don&#8217;t even see a need to cover it here.</p>
<p>That&#8217;s it, now just run your compiled and installed application. If you are interested in running Torrent Freedom (or any other VPN tunnel for that matter), check out their specific instructions on how to get them up and running. For the focus of this post, my work is done.</p>
]]></content:encoded>
			<wfw:commentRss>http://joefleming.net/2008/02/08/rolling-your-own-deb-package-getting-secure-vpn-tunneling-on-ubuntu/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
