<?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>iandouglas.com &#187; webdev</title>
	<atom:link href="http://iandouglas.com/category/webdev/feed/" rel="self" type="application/rss+xml" />
	<link>http://iandouglas.com</link>
	<description>senior web architect</description>
	<lastBuildDate>Thu, 10 Jun 2010 17:58:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Ubuntu 10.04 on Alienware M17x (R1)</title>
		<link>http://iandouglas.com/2010/05/27/ubuntu-10-04-on-alienware-m17x-r1/</link>
		<comments>http://iandouglas.com/2010/05/27/ubuntu-10-04-on-alienware-m17x-r1/#comments</comments>
		<pubDate>Thu, 27 May 2010 09:19:32 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=1224</guid>
		<description><![CDATA[After several failed attempts to install Linux late last year, and over the past week or so, I finally got Ubuntu 10.04 installed on my Alienware laptop. Working wifi, working audio, working nvidia graphics. To get started, I downloaded unetbootin-windows-442.exe, and the Ubuntu 10.04 LTS CD .iso, and ran unetbootin to unpack the ISO on [...]]]></description>
			<content:encoded><![CDATA[<p>After several failed attempts to install Linux late last year, and over the past week or so, I finally got Ubuntu 10.04 installed on my Alienware laptop. Working wifi, working audio, working nvidia graphics.</p>
<p>To get started, I downloaded <a href="http://sourceforge.net/projects/unetbootin/files/UNetbootin/442/unetbootin-windows-442.exe/download">unetbootin-windows-442.exe</a>, and the Ubuntu 10.04 LTS CD .iso, and ran unetbootin to unpack the ISO on a USB stick. When that was finished, I rebooted, went into the BIOS and disabled both the hybrid graphics and the integrated graphics, rebooted again and selected F12 to choose my boot medium, and booted from the USB stick.</p>
<p>With the graphics cards &#8216;disabled&#8217;, installation began in 1900&#215;1200 native mode. I moved my 25GB recovery partition to another USB drive using dd:<br />
dd if=/dev/sda2 of=/media/MyPassport/DellRecovery.partition<br />
I then removed that partition and started the Ubuntu installer.</p>
<p>When installation was complete, and I rebooted, I realized I had no way to download the restricted STA driver, but there&#8217;s a workaround &#8212; you can install it from your installation medium by running a dpkg command. First, insert your installation medium, then start a Terminal prompt, change to the mount folder, such as /media/cdrom or in my case, /media/CORSAIR &#8230; from there, change into the pool folder, so your path is similar to /media/CORSAIR/pool/ and run the following command:</p>
<p><code>sudo dpkg -i restricted/b/bcmwl/bcmwl-kernel-source_5.60.48.36+bdcom-0ubuntu3_i386.deb \<br />
main/d/dkms/dkms_2.1.1.2-2fakesync1_all.deb \<br />
main/p/patch/patch_2.6-2ubuntu1_i386.deb<br />
</code><br />
This will install the restricted driver and kernel patch, etc.</p>
<p>Next, I downloaded all available updates, rebooted, loaded the restricted nvidia driver, rebooted, and voila:<a href="http://iandouglas.com/wp-content/uploads/2010/05/nvidia.png"></a></p>
<p><a href="http://iandouglas.com/wp-content/uploads/2010/05/nvidia.png"><img class="aligncenter size-medium wp-image-1225" title="nvidia" src="http://iandouglas.com/wp-content/uploads/2010/05/nvidia-300x231.png" alt="" width="300" height="231" /></a></p>
<p>Now to see if the HDMI output will work at the office in the morning for a dual monitor setup.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/05/27/ubuntu-10-04-on-alienware-m17x-r1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apparently there&#8217;s no escape from Facebook&#8217;s Social Web</title>
		<link>http://iandouglas.com/2010/04/28/apparently-theres-no-escape-from-facebooks-social-web/</link>
		<comments>http://iandouglas.com/2010/04/28/apparently-theres-no-escape-from-facebooks-social-web/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 17:12:52 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=1147</guid>
		<description><![CDATA[Like it or not, opt-out or not, Facebook will deliver a social web. I have my Facebook account locked down fairly well with very few details open to the public (my website and Email) and I of course followed my own instructions on how to properly opt out of Facebook&#8217;s &#8220;Instant Personalization&#8221; settings. Or so [...]]]></description>
			<content:encoded><![CDATA[<p>Like it or not, opt-out or not, Facebook will deliver a social web.</p>
<p>I have my Facebook account locked down fairly well with very few details open to the public (my website and Email) and I of course followed <a href="http://iandouglas.com/2010/04/21/howto-protect-yourself-as-best-you-can-from-facebooks-f8-platform/">my own instructions</a> on how to properly opt out of Facebook&#8217;s &#8220;Instant Personalization&#8221; settings. Or so I thought.</p>
<p><a href="http://iandouglas.com/wp-content/uploads/2010/04/facebook-personalization.png"><img src="http://iandouglas.com/wp-content/uploads/2010/04/facebook-personalization.png" alt="" title="facebook-personalization" width="209" height="443" class="alignleft size-full wp-image-1149" /></a><br />
Even though I have opted out and set up restrictive privacy settings as seen to the left, visiting <a href="http://www.facebook.com/cormyn">http://www.facebook.com/cormyn</a> will allow you to view my entire friend&#8217;s list, and show you all products, apps, music and games that I am a fan of, or have selected that I like. Honestly, I could care less that the world can see that I like Jason Mraz or Sara Bareilles, they&#8217;re both excellent musicians. And I&#8217;m certain that nobody is going to lose any sleep knowing that I&#8217;m a die-hard Dr Pepper fan or that I play some of Zynga&#8217;s games on Facebook.</p>
<p><br clear=all /><br />
However, despite my efforts to follow Facebook&#8217;s instructions to opt out of Instant Personalization, I visited CNN.com this morning to read a news article about a tweet I read a few minutes ago, and saw the following:<br />
<a href="http://iandouglas.com/wp-content/uploads/2010/04/cnn-facebook-home.png"><img src="http://iandouglas.com/wp-content/uploads/2010/04/cnn-facebook-home.png" alt="" title="cnn-facebook-home" width="307" height="410" class="aligncenter size-full wp-image-1152" /></a></p>
<p>Upon clicking an article, I also saw this at the top right of the screen and also at the bottom of the article I was reading:<br />
<a href="http://iandouglas.com/wp-content/uploads/2010/04/CNN-facebook.png"><img src="http://iandouglas.com/wp-content/uploads/2010/04/CNN-facebook.png" alt="" title="CNN-facebook" width="359" height="88" class="aligncenter size-full wp-image-1148" /></a></p>
<p>This is definitely something that concerns me. Not only is the front page of CNN showing me messages about one of my Facebook friends, it&#8217;s also aware of the fact that none of my 300-something friends on Facebook have &#8220;recommended&#8221; the article on their Facebook pages, and suggests I get the scoop and be the first of my friends to do so.</p>
<p>Seriously, Facebook? I&#8217;ve opted out, I&#8217;ve blocked the three partner sites, yet there are still other sites out there, implementing your &#8220;like&#8221; button for your grandiose &#8220;social web&#8221; scheme, and my information and web browsing will be made known to you just because I happen to be logged into Facebook?</p>
<div style="float:left; margin-right:10px;"><script type="text/javascript"><!--
google_ad_client = "pub-1335093070283715";
/* id content, 300x250, created 4/26/10 */
google_ad_slot = "8498795251";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<p>That&#8217;s right, folks: as soon as I&#8217;ve logged out of Facebook, CNN fails to show any of the text/graphics which I show in the screenshots above.</p>
<p>I will admit, the web developer in me is amazed because I know the effort and technology that goes into building something like this. At the same time, if the only way I can NOT see this information is to log out of Facebook, then perhaps I will reserve a separate browser for my Facebook activity, and use my primary browser choice (Google Chrome) for the rest of the web.</p>
<p>Either that, or I need to see if AdBlock has a rule implemented that blocks Facebook&#8217;s iframe on every other web site. That&#8217;d be convenient.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/04/28/apparently-theres-no-escape-from-facebooks-social-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HOWTO: start named PuTTY sessions from a Windows shortcut</title>
		<link>http://iandouglas.com/2010/04/23/howto-start-named-putty-sessions-from-a-windows-shortcut/</link>
		<comments>http://iandouglas.com/2010/04/23/howto-start-named-putty-sessions-from-a-windows-shortcut/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 18:38:55 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[cygwin]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[putty]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=687</guid>
		<description><![CDATA[I have Windows 7 on my laptop, but since I&#8217;m a die-hard Linux geek and haven&#8217;t got the patience to wait for anyone else to figure out all of the drivers needed for a clean, working Linux build on my M17x, I installed Cygwin. However, the limitation of running Cygwin in a DOS-like command line [...]]]></description>
			<content:encoded><![CDATA[<p>I have Windows 7 on my laptop, but since I&#8217;m a die-hard Linux geek and haven&#8217;t got the patience to wait for anyone else to figure out all of the drivers needed for a clean, working Linux build on my <a href="http://www.dell.com/us/en/home/notebooks/laptop-alienware-m17x/pd.aspx?refid=laptop-alienware-m17x&amp;cs=19&amp;s=dhs" target="_blank">M17x</a>, I installed <a href="http://www.cygwin.com/" target="_blank">Cygwin</a>. However, the limitation of running Cygwin in a DOS-like command line window that couldn&#8217;t be expanded beyond 80 characters was a nuisance. Enter &#8220;puttytel&#8221; (<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" target="_blank">downloadable on this page</a>) which can connect to your local Cygwin installation in a PuTTY-like SSH terminal. Running this executable gives you a connection type of &#8220;cygterm&#8221; which you select along with a command of just a dash mark for a local shell.</p>
<p>Of course, then came the mind-numbing exercise of clicking the PuTTY icon, and having to double-click the &#8220;cygwin&#8221; profile I made (for scrollback, colored terminal, etc). A quick Google search later, and I had my answer.</p>
<p>1. Create a shortcut on your desktop for PuTTYtel.exe (right-button drag and drop the executable works great, select &#8220;Create Shortcuts here&#8221;)<br />
2. Right-click the shortcut icon and select Properties<br />
3. Under the &#8220;General&#8221; tab, give it a meaningful name<br />
4. Under the &#8220;Shortcut&#8221; tab, where it lists your target as &#8220;C:\whateverpath\puttytel.exe&#8221; change it to include a parameter of -load (single dash) and then a string (quoted if it contains spaces, etc) of which profile name you want to autoload. Since mine was called &#8220;&#8212;-cygwin&#8221; (so it would appear at the top of my stored session list), my new Target line became this:<br />
<code>"C:\Program Files (x86)\putty\puttytel.exe" -load "----cygwin"</code><br />
5. Click OK to save, then right-click on the shortcut again and select &#8220;pin to taskbar&#8221;<br />
6. Now you can simply click that icon, and it will immediately load that PuTTY saved session for you.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/04/23/howto-start-named-putty-sessions-from-a-windows-shortcut/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO: protect yourself (as best you can) from Facebook&#8217;s F8 platform</title>
		<link>http://iandouglas.com/2010/04/21/howto-protect-yourself-as-best-you-can-from-facebooks-f8-platform/</link>
		<comments>http://iandouglas.com/2010/04/21/howto-protect-yourself-as-best-you-can-from-facebooks-f8-platform/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 23:18:03 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=681</guid>
		<description><![CDATA[To recap my &#8220;social web is not a private web&#8221; article, Facebook&#8217;s F8 platform will begin to create a massive social web for which you have already given them permission to share your public info. Be warned though that even if you do take some of the following steps to opt-out, your friends might still [...]]]></description>
			<content:encoded><![CDATA[<p>To recap my &#8220;s<a title="Facebook's social web will not be a private web" href="http://iandouglas.com/2010/04/21/facebooks-social-web-will-not-be-a-private-web/">ocial web is not a private web</a>&#8221; article, Facebook&#8217;s F8 platform will begin to create a massive social web for which you have already given them permission to share your public info.</p>
<p>Be warned though that even if you do take some of the following steps to opt-out, your friends might still be able to share some of your public information (Name, Profile Picture, Gender, Current City, Networks, Friend List, and Pages) without your consent as these &#8216;partner&#8217; sites will have access to your friend&#8217;s contact list which can contain public pieces of information about you.</p>
<p>To help protect yourself, here are some links at Facebook that can help you opt out of as much of this F8 platform as you can:</p>
<p>1. <a href="http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=applications">http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=applications</a></p>
<p>You&#8217;ll notice a new check box at the bottom called &#8220;Instant Personalization&#8221; which is enabled &#8212; this was Facebook&#8217;s way of forcing you to opt into their f8 platform without asking you first.<br />
Recommendation: un-select the &#8220;Instant Personalization&#8221; checkbox.</p>
<p>2. <a href="http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=applications&amp;field=friends_share">http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=applications&amp;field=friends_share</a></p>
<p>This first link will let you control which pieces of your profile data can be shared by your friends.<br />
Recommendation: turn them all off.</p>
<div style="float:left"><script type="text/javascript"><!--
google_ad_client = "pub-1335093070283715";
/* id content, 300x250, created 4/26/10 */
google_ad_slot = "8498795251";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<div>
3. <a href="http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=profile">http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=profile</a></div>
<p>This is where you can see who has access to various pieces of information you store on Facebook.<br />
Recommendation: set everything to &#8220;Only Friends&#8221;.</p>
<p>4. <a href="http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=contact">http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=contact</a></p>
<p><a href="http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=contact"></a>This is where you select who can access the contact information you store on Facebook.<br />
Recommendation: Lock this area down unless there&#8217;s information here that you truly want to be publicly available such as an IM screen name for your friends to find. I have contact information that I only make available to family (cell phone, etc) so I have a contact group set up, and give them permission to certain pieces of info that wouldn&#8217;t be shown even to &#8220;only friends.&#8221; I let my web site, iandouglas.com, be available to &#8216;everyone&#8217;.</p>
<p>5. Block the partner apps you don&#8217;t want your information given to. Each of these three links will have a &#8220;Block Application&#8221; link on the left menu of the page.<br />
Recommendation: block these apps unless you want these partners to have your data.</p>
<p>Microsoft Docs.com: <a href="http://www.facebook.com/docs">http://www.facebook.com/docs</a><br />
Pandora: <a href="http://www.facebook.com/apps/application.php?id=139475280761">http://www.facebook.com/apps/application.php?id=139475280761<br />
</a>Yelp: <a href="http://www.facebook.com/apps/application.php?id=97534753161">http://www.facebook.com/apps/application.php?id=97534753161</a></p>
<p><a href="http://www.facebook.com/apps/application.php?id=97534753161"></a>Once you block them, you can verify they&#8217;re listed here: <a href="http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=applications&amp;field=blocked_apps">http://www.facebook.com/settings/?tab=privacy#!/settings/?tab=privacy&amp;section=applications&amp;field=blocked_apps</a></p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/04/21/howto-protect-yourself-as-best-you-can-from-facebooks-f8-platform/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Facebook&#8217;s social web will not be a private web</title>
		<link>http://iandouglas.com/2010/04/21/facebooks-social-web-will-not-be-a-private-web/</link>
		<comments>http://iandouglas.com/2010/04/21/facebooks-social-web-will-not-be-a-private-web/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 22:21:23 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=674</guid>
		<description><![CDATA[Facebook has introduced their new &#8216;f8&#8242; platform which raises several serious privacy concerns. While I&#8217;m not a tinfoil-hat kinda guy, these realizations today really raised my ire against Facebook. The f8 platform will allow web developers to add a &#8216;like&#8217; button on their sites, and if you&#8217;re a content publisher, face it &#8212; you&#8217;ll WANT [...]]]></description>
			<content:encoded><![CDATA[<p>Facebook has introduced their new &#8216;f8&#8242; platform which raises several serious privacy concerns. While I&#8217;m not a tinfoil-hat kinda guy, these realizations today really raised my ire against Facebook.</p>
<p>The f8 platform will allow web developers to add a &#8216;like&#8217; button on their sites, and if you&#8217;re a content publisher, face it &#8212; you&#8217;ll WANT to add that to your site. But this HTML iframe will give Facebook access to every site you visit that includes the LIKE button, however those sites won&#8217;t be able to *publish* anything on your Facebook wall, for example, unless you specifically permit them to. However, FB will still know you&#8217;ve been there, and who knows what they&#8217;ll do with that information (they&#8217;ve declined to specify what they&#8217;ll use that information for). It seems the only</p>
<p>Also included in the f8 platform is a means to set up partnerships between Facebook and groups like Microsoft, Pandora and Yelp which will gain access to any public information you have on Facebook, including your name, gender, profile photo, and friend connections. Even if you set your own privacy settings to opt-out of giving these partner sites your information, your friends could still unwittingly give this information to the partner sites without your consent. To fix this, Facebook says you must manually visit each of these partner sites and ALSO opt-out of their f8 platform settings. To recap, to restrict my public information from being given away, I must:</p>
<ol>
<li>DE-select a checkbox in my Facebook privacy settings that FB has already turned on without my consent</li>
<li>Find a list of partner applications at Facebook and manually block each application from within Facebook</li>
<li>Visit each partner&#8217;s web site and click a &#8220;no thanks&#8221; link</li>
<li>Convince every one of my hundreds of Facebook friends to do the same. One friend not complying will undo all the work I do myself.</li>
</ol>
<p>That&#8217;s an awful lot of hoop-jumping to protect my privacy. Not to mention the first point that every site that starts including their LIKE button will give Facebook a means to log every page I visit which I have no way to opt-out of.</p>
<div style="float:left"><script type="text/javascript"><!--
google_ad_client = "pub-1335093070283715";
/* id content, 300x250, created 4/26/10 */
google_ad_slot = "8498795251";
google_ad_width = 300;
google_ad_height = 250;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<div style="padding-left:20px;">At launch, only docs.com (partnership with Microsoft to rival Google Docs), Pandora and Yelp are partnered up on f8, but how are we, as users, going to know when Facebook adds a new partner so we can race there to opt-out before an unwitting friend beats us there and unknowingly shares our info? I don&#8217;t like the idea of Facebook having dozens or hundreds of partners and now suddenly I have to perform two tasks per partner in order to opt-out.</div>
<p>Granted, this platform will certainly, in Facebook&#8217;s words, make web &#8220;more open and social.&#8221; But at what price? How is my web experience going to be better if I have to lock down my social network profiles and spend time opting out of these partner sites when my friends who do NOT do this work will end up sharing my information any way, without my consent?</p>
<p>In the 90&#8242;s, there were tons of computer viruses that would infect a person&#8217;s PC and upload their address book to a central location which would then attempt to re-infect those users via Email. This feels eerily similar. Even if I lock down my settings, a friend who doesn&#8217;t will sent their entire friends list to these partner sites which will include my Facebook information. How is that a better experience for me?</p>
<p>From Facebook&#8217;s own help FAQ&#8217;s:</p>
<p><a><strong>What data is shared with instantly personalized partner sites?</strong><br />
When you and your friends visit an instantly personalized site, the partner can use your public Facebook information, which includes your name, profile picture, gender, and connections. To access any non-public information, the website is required to ask for you or your friend&#8217;s explicit permission.<br />
</a><a href="http://www.facebook.com/help/?faq=17100">http://www.facebook.com/help/?faq=17100</a></p>
<p><strong>How do I opt-out of instant personalization?</strong><br />
You can opt-out of instant personalization by disallowing it here. By clicking &#8220;No Thanks&#8221; on the Facebook notification on partner sites, partners will delete your data. To prevent your friends from sharing any of your information with an instant personalization partner, block the application: <a href="http://www.facebook.com/docs">Microsoft Docs.com</a>, <a href="http://www.facebook.com/apps/application.php?id=139475280761">Pandora</a>, <a href="http://www.facebook.com/apps/application.php?id=97534753161">Yelp</a>.<br />
<a rel="nofollow" href="http://www.facebook.com/help/?faq=17105" target="_blank">http://www.facebook.com/help/?faq=17105</a></p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/04/21/facebooks-social-web-will-not-be-a-private-web/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Imitation is the sincerest form of flattery</title>
		<link>http://iandouglas.com/2010/04/15/imitation-is-the-sincerest-form-of-flattery/</link>
		<comments>http://iandouglas.com/2010/04/15/imitation-is-the-sincerest-form-of-flattery/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 22:41:42 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[freelance]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=671</guid>
		<description><![CDATA[I&#8217;ve been developing a web app for a little while that allows users to register their Facebook Email address, select one or more games from a list, and download mass-add Email lists that they can bulk-add into Facebook&#8217;s &#8220;invite a friend via Email address&#8221;. You can check out my latest redesign too, over at http://facebook-massadd.com/ [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been developing a web app for a little while that allows users to register their Facebook Email address, select one or more games from a list, and download mass-add Email lists that they can bulk-add into Facebook&#8217;s &#8220;invite a friend via Email address&#8221;. You can check out my latest redesign too, over at <a href="http://facebook-massadd.com/">http://facebook-massadd.com/</a> which include a new HTML/CSS layout, automated RSS feeds and Twitter integration, and finally got around to adding a Google Analytics tracking code on the site.</p>
<p>I was recently contacted by a gentleman via Email asking if I&#8217;d sell him the site, or license a copy of the site to him &#8220;to tinker with&#8221; as a personal project. We&#8217;ve sent a few Emails back and forth, but I&#8217;ve had a busy week and didn&#8217;t get back to him until today. Turns out he, or his company, have posted a scriptlance.com project request to clone my site and add extra functionality to it. Today, when I logged into Google Analytics, I noticed a few incoming links from scriptlance.com, a site I&#8217;ve looked at in the past for freelance work, so I followed the links and found his project request.</p>
<p>Honestly, I&#8217;m quite flattered. While this isn&#8217;t the first site I&#8217;ve built for which I&#8217;ve seen subsequent freelance project requests to clone, it&#8217;s always a nice feeling to know I&#8217;ve done a good enough job on a site, building up a user base, that makes the site and its functionality worth copying.</p>
<p>I&#8217;m a little bit torn on the idea of just selling the web site, but I&#8217;m unsure if that would constitute &#8220;selling&#8221; the Email addresses of my users, which I promised all 4,000 of them is something I wouldn&#8217;t do. However, I made that promise in the context of selling their Email addresses to marketing companies, etc..</p>
<p>Any thoughts or opinions?</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/04/15/imitation-is-the-sincerest-form-of-flattery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>paved with good intentions</title>
		<link>http://iandouglas.com/2010/04/13/paved-with-good-intentions/</link>
		<comments>http://iandouglas.com/2010/04/13/paved-with-good-intentions/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 20:59:16 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=663</guid>
		<description><![CDATA[I&#8217;ve had a lot of web projects and ideas over the years. Unfortunately, as I approach middle-age, I find that having ideas and having the energy to build those ideas are very, very different things. For example, a coworker and myself, while we were both employed at Rubicon and playing darts all the time, came [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had a lot of web projects and ideas over the years. Unfortunately, as I approach middle-age, I find that <span style="text-decoration: underline;">having</span> ideas and having the energy to <span style="text-decoration: underline;">build</span> those ideas are very, very different things.</p>
<p>For example, a coworker and myself, while we were both employed at Rubicon and playing darts all the time, came up with the idea of a mobile web app (thus, usable on any mobile device that could access the web) to track dart scores, perhaps let users register and track scores over time. I registered &#8220;dartscore.mobi&#8221; and we put up a basic scoring system for 501/301/x01 games, and promptly got way too busy to ever carry on the idea. Now, at the risk of an expiring domain name, I&#8217;m left with the decision of paying money to renew the domain for one or more years, and dream of a time when I could work on the project, or just drop the idea. Or, write a blog post about the idea, and see if there&#8217;s enough interest to carry on the idea.</p>
<p>So now I&#8217;m debating building a web site just to list these ideas, since very few people read this blog at all.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/04/13/paved-with-good-intentions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reinventing myself, and my blog</title>
		<link>http://iandouglas.com/2010/03/26/reinventing-myself-and-my-blog/</link>
		<comments>http://iandouglas.com/2010/03/26/reinventing-myself-and-my-blog/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 20:41:11 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[freelance]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=653</guid>
		<description><![CDATA[In 2005 and 2006, I blogged a LOT. So did my wife. It seems that since our son was born in late 2008, neither of us has had much time for blogging any more, and I think my wife has lost interest in it as other things occupy her time. Combined with the prevalence of [...]]]></description>
			<content:encoded><![CDATA[<p>In 2005 and 2006, I blogged a LOT. So did <a href="http://bloggymommer" target="_blank">my wife</a>. It seems that since our son was born in late 2008, neither of us has had much time for blogging any more, and I think my wife has lost interest in it as other things occupy her time.</p>
<p>Combined with the prevalence of micro-blogging such as Twitter and Facebook status updates, writing out full-length quality postings seems to be quite old-school now. While in the process of migrating my old blog articles back to WordPress, I&#8217;m reading through all of them again and finding some oldies but goodies, such as &#8220;<a href="http://iandouglas.com/2005/05/11/date-a-geek/">Reasons to Date a Geek</a>&#8221; and &#8220;<a href="http://iandouglas.com/2005/07/17/do-you-geek-take-this-mini-geek/">I, Geek, take you, Mini-geek</a>&#8221; among others. I also see lots of failed potential such as setting up thedouglasclan.com as a photo site for our family, and I&#8217;ve lost count of how many times I&#8217;ve switched from one blog engine to another or posted about new layouts on the site.</p>
<p>Like most full-time employees, I fear blogging about my workplace or what I&#8217;m working on, so as not to <a href="http://www.urbandictionary.com/define.php?term=dooced" target="_blank">get dooced</a> which really only leaves a few areas of my life to share that I feel could help others: running a freelance business, web development, marriage, finances, and being a new dad. And since I&#8217;m not particularly an expert in any of those areas, I imagine iandouglas.com will be a culmination of all of those topics. I&#8217;ll do my best to categorize and tag my ramblings so you can filter out only what you really want to read.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/03/26/reinventing-myself-and-my-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data migration</title>
		<link>http://iandouglas.com/2010/03/26/data-migration/</link>
		<comments>http://iandouglas.com/2010/03/26/data-migration/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 07:43:33 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=482</guid>
		<description><![CDATA[After importing my Drupal database into my WordPress database, a single MySQL query imported all of my articles from Drupal to WordPress (without comments). All that&#8217;s left is to add categories and tags, and build URL redirects from thedouglasclan.com over to iandouglas.com. I simply got tired of some of the imitations I found in Drupal, [...]]]></description>
			<content:encoded><![CDATA[<p>After importing my Drupal database into my WordPress database, a single MySQL query imported all of my articles from Drupal to WordPress (without comments). All that&#8217;s left is to add categories and tags, and build URL redirects from thedouglasclan.com over to iandouglas.com. I simply got tired of some of the imitations I found in Drupal, and find WordPress a much friendlier interface to use.</p>
<p>For anyone curious enough, here&#8217;s the query I used to migrate from Drupal 6.8 to WordPress 2.9:</p>
<p><code>INSERT INTO wp_posts (id, post_author, post_date, post_content, post_title, post_excerpt, post_name, post_modified, post_status)<br />
SELECT DISTINCT 120+n.nid, 1, FROM_UNIXTIME(created), body, n.title, teaser, REPLACE(REPLACE(REPLACE(REPLACE(LOWER(n.title),' ', '-'),'.', '-'),',', '-'),'+', '-'),FROM_UNIXTIME(changed), "draft"<br />
FROM drupal6_node n, drupal6_node_revisions r<br />
WHERE n.vid = r.vid;<br />
</code></p>
<p>The 120+ vaue in the ID field is because I currently had 120 items in my wp_posts table already, and each post must have a unique ID. So, I simply added a value of 120 to whatever ID value was in Drupal. The &#8217;1&#8242; value in the post_author field assigns my WordPress user ID as the author of each article. I also added a post_status of &#8220;draft&#8221; so I could go through the articles, verify their integrity, and then publish them.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/03/26/data-migration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO: redirect iPhone/iPod users on nginx</title>
		<link>http://iandouglas.com/2010/01/20/howto-redirect-iphoneipod-users-on-nginx/</link>
		<comments>http://iandouglas.com/2010/01/20/howto-redirect-iphoneipod-users-on-nginx/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 23:44:46 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=35</guid>
		<description><![CDATA[I learned a little something about nginx, a small footprint web server that is ideal for serving up mobile sites, or sites where you don&#8217;t want the heavy usage of Apache. Today, I needed to solve a problem where we redirected iPhone/iPod users to a different URL. Since nginx doesn&#8217;t use the old-style mod_rewrite rules, [...]]]></description>
			<content:encoded><![CDATA[<p>I learned a little something about nginx, a small footprint web server that is ideal for serving up mobile sites, or sites where you don&#8217;t want the heavy usage of Apache. Today, I needed to solve a problem where we redirected iPhone/iPod users to a different URL. Since nginx doesn&#8217;t use the old-style mod_rewrite rules, I had to learn how to enable redirection in the server.</p>
<p>Since nginx was already compiled with redirection support, I simply had to locate the correct configuration file and add a few lines of code, and away it went.</p>
<p>First, I checked out /etc/nginx/ and opened the site configuration file within the /sites-enabled/ path. For this example, let&#8217;s say the site was m.iandouglas.com:</p>
<pre><code># vi /etc/conf/nginx/sites-enabled/m.iandouglas.com</code></pre>
<p>In here, I&#8217;d look for the &#8216;server&#8217; block and add my redirection rules:</p>
<pre><code>server {
	listen      80;
	server_name m.iandouglas.com;
        root /var/www/m.iandouglas.com/public;

	# redirect iPhone/iPod users to the new iphone site
        if ($http_user_agent ~* '(iPhone|iPod)') {
                rewrite ^/$ http://m.iandouglas.com/iphone/index.html;
        }
.
.
.
</code></pre>
<p>Then a simple nginx restart:</p>
<p><code># /etc/init.d/nginx restart</code></p>
<p>&#8230; and we were all set.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/01/20/howto-redirect-iphoneipod-users-on-nginx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dream come true</title>
		<link>http://iandouglas.com/2010/01/20/dream-come-true/</link>
		<comments>http://iandouglas.com/2010/01/20/dream-come-true/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 00:38:06 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[armor games]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=33</guid>
		<description><![CDATA[I think I was 8 years old when my dad came home with a Commodore 64 and various games. Hacking up those games in C64 Basic is what got me interested in programming, and now 20-something years later I landed a job at Armor Games as a Sr Web Developer. Not doing game programming, but [...]]]></description>
			<content:encoded><![CDATA[<p>I think I was 8 years old when my dad came home with a Commodore 64 and various games. Hacking up those games in C64 Basic is what got me interested in programming, and now 20-something years later I landed a job at Armor Games as a Sr Web Developer. Not doing game programming, but I *am* in the industry where I&#8217;m happiest, and the web development work so far has been a nice change from the heavy lifting I&#8217;ve been doing in Perl for so long. For obvious reasons I won&#8217;t blog about specifics going on here at the office, but I may share insights into some of the things I&#8217;m learning.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2010/01/20/dream-come-true/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Build-it-Yourself SpamAssassin Trainer</title>
		<link>http://iandouglas.com/2008/11/18/build-it-yourself-spamassassin-trainer/</link>
		<comments>http://iandouglas.com/2008/11/18/build-it-yourself-spamassassin-trainer/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 20:45:09 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=64</guid>
		<description><![CDATA[Over the past while, I&#8217;ve been working on a build-it-yourself interface for configuring my SpamAssassin Training script. You can find it here. Keep in mind, I&#8217;m not the author of SpamAssassin, nor its included utility called &#8220;sa-learn&#8221;. My Perl script simply tells the sa-learn utility how to find your mailboxes to train it on spam/non-spam. [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past while, I&#8217;ve been working on a build-it-yourself interface for configuring my SpamAssassin Training script. <a href="http://iandouglas.com/spamassassin-trainer/">You can find it here</a>.</p>
<p>Keep in mind, I&#8217;m not the author of SpamAssassin, nor its included utility called &#8220;sa-learn&#8221;. My Perl script simply tells the sa-learn utility how to find your mailboxes to train it on spam/non-spam.</p>
<p>After fielding several support requests over the past year which usually result from basic syntax errors or confusion over which option(s) to use, I decided to write a front-end for the script, asking which of several scenarios are best suited to the user, and then have PHP do a search-and-replace on the Perl script to build the configuration the user ultimately needs to install on their web hosting account.</p>
<p>So far this has been very successful. I&#8217;ve had several users write in saying it&#8217;s much easier for them to manage.</p>
<p>I&#8217;ll have to tweak the next version of the script, though, to alert other users to visit the build-it-yourself page to download a new copy of the script whenever I make a change.</p>
<p>The other thing that might be handy, of course, is to separate out the logic of the scanning script from the configuration, and just have the main portion of the script download a new copy of the scanning logic whenever a new version is detected &#8230; I&#8217;ll have to think about that one a little longer.</p>
<p>I also promised about a year ago to write a PHP version of the training script, since some users just don&#8217;t understand Perl or execution permissions or what a &#8220;500&#8243; error means or how to work around it, etc., but truth be told, PHP is a bit of a pain to write output of shell-executed programs while they run. In my experience, PHP waits for everything to be finished before displaying any output.</p>
<p>Does anyone know of the equivalent command in PHP that unbuffers output like $|=1; does in Perl for PHP calls like exec() or passthru()?</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/11/18/build-it-yourself-spamassassin-trainer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Mitch Hedberg site went live tonight</title>
		<link>http://iandouglas.com/2008/09/02/new-mitch-hedberg-site-went-live-tonight/</link>
		<comments>http://iandouglas.com/2008/09/02/new-mitch-hedberg-site-went-live-tonight/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 07:23:18 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[freelance]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=113</guid>
		<description><![CDATA[I&#8217;ve been pleased to have helped out over at http://mitchhedberg.net/ in the past, with some phpBB programming to keep spammers out of the memorial forums for the late Mitch Hedberg, by far my most favorite comedian ever. Lynn Shawcroft, Mitch&#8217;s wife, contacted me about a week ago, asking if I could help redesign the whole [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been pleased to have helped out over at <a href="http://mitchhedberg.net/">http://mitchhedberg.net/</a> in the past, with some phpBB programming to keep spammers out of the memorial forums for the late Mitch Hedberg, by far my most favorite comedian ever.</p>
<p>Lynn Shawcroft, Mitch&#8217;s wife, contacted me about a week ago, asking if I could help redesign the whole web site into something classier and and easier to manage. Sounded like a job for Drupal, so I moved a good bulk of their content to the CMS, and the site looks great.</p>
<p>Lynn called me back tonight and is going to put me on the guest list for the CD Release Party for &#8220;Do You Believe In Gosh?&#8221;, a new recording of Mitch&#8217;s material that he recorded just before his death in 2005. There are release parties all over the country, but Lynn mentioned that Mitch&#8217;s folks will be in town so I&#8217;m going to get to meet them at the party too &#8212; how cool is that?! I can&#8217;t wait. Check out the new site for Mitch to see where the party is in your area.</p>
<p>Lynn&#8217;s web site is <a href="http://lynnshawcroft.com/">http://lynnshawcroft.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/09/02/new-mitch-hedberg-site-went-live-tonight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Georgia Lab Rescue back online</title>
		<link>http://iandouglas.com/2008/06/27/georgia-lab-rescue-back-online/</link>
		<comments>http://iandouglas.com/2008/06/27/georgia-lab-rescue-back-online/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 09:26:42 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[freelance]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2008/06/27/georgia-lab-rescue-back-online/</guid>
		<description><![CDATA[<a href="http://georgialabrescue.com">Georgia Lab Rescue</a> is back online, complete with forums to help those in the state of Georgia to find homes for their dogs (or dogs for their homes). We'll see what Kim has up her sleeve next for GLR.

I've also reinstalled <a href="http://georgialabrescue.com/calendarcontest">their Labradays 2005 Calendar Contest Fund-Raiser</a> software; while registration and voting is long over, you can still check out the winning results. If you're interested in licensing a copy of the software, <a href="/contact-me">contact me for details</a>.

]]></description>
			<content:encoded><![CDATA[<p><a href="http://georgialabrescue.com">Georgia Lab Rescue</a> is back online, complete with forums to help those in the state of Georgia to find homes for their dogs (or dogs for their homes). We&#8217;ll see what Kim has up her sleeve next for GLR.</p>
<p>I&#8217;ve also reinstalled <a href="http://georgialabrescue.com/calendarcontest">their Labradays 2005 Calendar Contest Fund-Raiser</a> software; while registration and voting is long over, you can still check out the winning results. If you&#8217;re interested in licensing a copy of the software, <a href="/contact-me">contact me for details</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/06/27/georgia-lab-rescue-back-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rubicon Project Review</title>
		<link>http://iandouglas.com/2008/06/26/rubicon-project-review/</link>
		<comments>http://iandouglas.com/2008/06/26/rubicon-project-review/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 09:02:04 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[rubicon project]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2008/06/26/rubicon-project-review/</guid>
		<description><![CDATA[Online advertising was something that used to really get under my skin. Why on earth would I want to see blinky flashy ads on web sites when all I want to do is read some content? The first plugin I'd install with Firefox on any computer was Adblock Plus.
]]></description>
			<content:encoded><![CDATA[<p>Online advertising was something that used to really get under my skin. Why on earth would I want to see blinky flashy ads on web sites when all I want to do is read some content? The first plugin I&#8217;d install with Firefox on any computer was Adblock Plus.</p>
<p>After hearing what <a href="http://www.rubiconproject.com">The Rubicon Project</a> was all about, I immediately saw a business plan that couldn&#8217;t fail. I&#8217;d tried AdSense on my site in the past, as well as various linked ads with LinkShare and others. I even had a guy contact me out of the blue offering to buy advertising space on my site. I made about $0.02-$0.46 per day with the advertising, with a peak of $0.75 on one day, which was extremely lame. A month of effort barely bought me a ticket to a movie or covered my monthly Napster subscription. Bleh.</p>
<p>The Rubicon Project changed all that.</p>
<p>I tried their ad tags here at iandouglas.com, then my wife got interested and we <a href="http://bloggymommer.com">tried them on her site too</a> (with her own account), so of course it was a no-brainer when <a href="http://iandouglas.com/new-site-for-bj2-content">I launched</a> <a href="http://blackjack2.info">blackjack2.info</a> that I&#8217;d include Rubicon ads.</p>
<p>The net result over the past couple of months since their Public Beta launch?</p>
<p>When I first added the tags to my site, I started out lower than my original daily take, which discouraged me, and I debated going back to managing everything myself. But optimizing ad networks based on your traffic takes a few days for the system to analyze, so I decided to stick it out, because Rubicon learns over time. As of this writing, they&#8217;ve served about 23.5 BILLION ads, and every ad they serve helps them learn and optimize even more efficiently, both over all and for just my individual site.</p>
<p>Between the public beta launch in April and yesterday, my average CPM jumped by 170%. I only need about $3.60 per day just to cover my hosting fees, and having my daily revenue increase by over 306% means I&#8217;m pretty much at my break-even point.</p>
<p>Some people will read this and think &#8220;Meh, a measly $4/day, are you kidding?&#8221; Well, running iandouglas.com was never about making enough money to quit my job and blog full time, but making enough money on it to at least cover my costs for hosting makes me happy! I&#8217;m still doing a lot more SEO work on my sites to get a little more traffic, and just <a href="http://www.rubiconproject.com/product/ad_network_optimization">let Rubicon work out the details of making me more money</a> with the increased traffic. Rubicon *has* customers who make a full-time living just from their ads.</p>
<p>Stop reading, <a href="http://www.rubiconproject.com/certify/request_mad_cash/">go sign up for Rubicon Project ad tags</a>, and make some &#8220;mad cash&#8221; today!</p>
<p>In the spirit of Full Disclosure:</p>
<p>This review is an honest-and-true account of my own recent dealings with online advertising. To be completely open about it, <u>I&#8217;m currently an employee at The Rubicon Project</u> as the lead engineer on core statistics and analytics data which helps our math geniuses do what they do best &#8212; make people &#8220;mad cash&#8221; with optimization. I was not asked or encouraged to write this review.</p>
<p>Despite being an employee, I use the *exact* same interface that any other person uses when they sign up, and I pay Rubicon the same 10% of the managed advertising they bring to my site. I get no discounts, I have absolutely no special treatment on my sites or ads, I use the same ad networks as everyone else that signs up, I have no hidden extras, my setup is as vanilla as they come.</p>
<p>On average, Rubicon Project clients see between 30% and 300% revenue increases. And <a href="http://www.rubiconproject.com/hiring">we&#8217;re hiring</a>. Come join the fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/06/26/rubicon-project-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My day job, and why I have ads on my site</title>
		<link>http://iandouglas.com/2008/02/27/my-day-job-and-why-i-have-ads-on-my-site/</link>
		<comments>http://iandouglas.com/2008/02/27/my-day-job-and-why-i-have-ads-on-my-site/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 08:55:16 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[This will be the only place you'll see me write anything about my day job, because I'm pretty careful about not writing about people or happenings in the workplace, plus I'm bound by non-disclosure agreements and such. Unless it's just a funny story of something that happened at the office or something.

But you'll notice I've added some advertising to my site. Part of this is due to the popularity of the site since adding my Blackjack 2 article series, and partly because of where I'm working now.
]]></description>
			<content:encoded><![CDATA[<p>This will be the only place you&#8217;ll see me write anything about my day job, because I&#8217;m pretty careful about not writing about people or happenings in the workplace, plus I&#8217;m bound by non-disclosure agreements and such. Unless it&#8217;s just a funny story of something that happened at the office or something.</p>
<p>But you&#8217;ll notice I&#8217;ve added some advertising to my site. Part of this is due to the popularity of the site since adding my Blackjack 2 article series, and partly because of where I&#8217;m working now.</p>
<p>On Monday February 4th, I was hired as a software engineer for <a href="http://rubiconproject">The Rubicon Project</a> and all I&#8217;m willing to say is that I&#8217;m part of the team working on scalability and reliability.</p>
<p>In a nutshell, The Rubicon Project works on your behalf with numerous ad agencies to let you put various ads on your site with far less manual work on your part than before. Before The Rubicon Project came around, if you wanted ads on your site, you had to go sign up with Google, Yahoo, ValueClick, AdBrite, and others, and then manually work at rotating your ads based on performance, cost per click (CPC), cost per thousand impressions (CPM), and so on, and it was a very arduous task to check all of your reports every month from every provider, plus getting a handful of checks at the end of the month for a few dollars here, a few dollars there, or having to wait for a few months for an ad agency to pay if they had a minimum payout level to reach before they paid you.</p>
<p>The problem from the advertising agency&#8217;s point of view is that as a web site publisher, you can only send them so much information about what kind of ads to serve up, and The Rubicon Project will work with you to figure out what sort of information to send to the ad agencies so they can give you advertisements that are more focused on the demographic you&#8217;re trying to reach. Also, The Rubicon Project will let you adjust the &#8216;weight&#8217; of the advertisements based on who you want to reach, and those slider adjustments can even be done at the country level so you can push Shopzilla very heavily to Canadian viewers, or Google at American viewers, or a latin agency to cater ads to users who come from Latin America, and so on</p>
<p>it&#8217;s a very slick system, and I wish I could tell you some of the clients we have signing up &#8212; big names in the Web 2.0 world! There are a few testimonials on the site that you can read. The beta users who signed up have seen up to 300% increase in ad revenues because of the Rubicon system.</p>
<p>And since I&#8217;m helping develop it, I added The Rubicon Project ad tags to my own site to get familiar with the process. It&#8217;s not like I *need* to run ads to support my site, but hey, every little bit helps. ;o)</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/02/27/my-day-job-and-why-i-have-ads-on-my-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SilverStripe to Drupal migration script almost complete</title>
		<link>http://iandouglas.com/2008/02/26/silverstripe-to-drupal-migration-script-almost-complete/</link>
		<comments>http://iandouglas.com/2008/02/26/silverstripe-to-drupal-migration-script-almost-complete/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 17:54:47 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[blogging]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2008/02/26/silverstripe-to-drupal-migration-script-almost-complete/</guid>
		<description><![CDATA[<p>My SilverStripe2Drupal migration script is almost complete. I moved the static content manually, but since I have over 300 blog posts, I obviously want to automate that as much as possible.</p><p>I'm almost there -- I just need to figure out a few final things about injecting data into drupal's database, and we'll be all set. Plus I need to undo BBcode formatting from SilverStripe (changing [b] to real bold tags, etc).</p>]]></description>
			<content:encoded><![CDATA[<p>My SilverStripe2Drupal migration script is almost complete. I moved the static content manually, but since I have over 300 blog posts, I obviously want to automate that as much as possible.</p>
<p>I&#8217;m almost there &#8212; I just need to figure out a few final things about injecting data into drupal&#8217;s database, and we&#8217;ll be all set. Plus I need to undo BBcode formatting from SilverStripe (changing [b] to real bold tags, etc).</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/02/26/silverstripe-to-drupal-migration-script-almost-complete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New CMS Coming in March</title>
		<link>http://iandouglas.com/2008/02/22/new-cms-coming-in-march/</link>
		<comments>http://iandouglas.com/2008/02/22/new-cms-coming-in-march/#comments</comments>
		<pubDate>Sat, 23 Feb 2008 05:04:00 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[blogging]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2008/02/22/new-cms-coming-in-march/</guid>
		<description><![CDATA[Yeah, decided I'm tired of SilverStripe -- the flashy admin interface just isn't worth the negatives that I face on a regular basis, not to mention that something in its XHTML parsing is screwing with the ad tags I'm getting from the Rubicon Project for my ad banners (thanks, by the way, to the few of you who have clicked on ads to help offset my hosting costs).]]></description>
			<content:encoded><![CDATA[<p>Yeah, decided I&#8217;m tired of SilverStripe &#8212; the flashy admin interface just isn&#8217;t worth the negatives that I face on a regular basis, not to mention that something in its XHTML parsing is screwing with the ad tags I&#8217;m getting from the Rubicon Project for my ad banners (thanks, by the way, to the few of you who have clicked on ads to help offset my hosting costs). I&#8217;ve also found that two anti-spam controls meant to block spam are not effective whatsoever &#8212; spam comments are still being logged in the software and since the SilverStripe spam comment interface&#8217;s pagination is broken, you have to manually click on checkboxes to highlight every comment on each page since the &#8216;delete all&#8217; button wipes out every spam message which could delete a false positive. And if you&#8217;re a few pixels off on a checkbox, the admin panel actually redirects your browser to whichever URL is listed first in the spam comment &#8230; which is obviously less than desirable when clearing spam comments during my lunch hour.</p>
<p>So I&#8217;m loading up my old articles, but I don&#8217;t know if I&#8217;ll have the energy to port comments or not.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/02/22/new-cms-coming-in-march/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SilverStripe CMS v2.21 Review</title>
		<link>http://iandouglas.com/2008/02/11/silverstripe-cms-v2-21-review/</link>
		<comments>http://iandouglas.com/2008/02/11/silverstripe-cms-v2-21-review/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 04:45:12 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://iandouglas.com/?p=111</guid>
		<description><![CDATA[Well, I&#8217;ve had a little over a month to get used to SilverStripe CMS v2.21 and there are many things about it that I truly love, and a handful of things that make me want to uninstall it every time I use it. Here&#8217;s a recap. 1. The admin panel&#8217;s AJAX interface Something I love: [...]]]></description>
			<content:encoded><![CDATA[<p>Well, I&#8217;ve had a little over a month to get used to SilverStripe CMS v2.21 and there are many things about it that I truly love, and a handful of things that make me want to uninstall it every time I use it. Here&#8217;s a recap.</p>
<p>1. The admin panel&#8217;s AJAX interface</p>
<p>Something I love: Very slick. Adding new pages or blog articles is quite easy to do, and clicking save/publish doesn&#8217;t redraw the whole page, thanks to AJAX. Clicking a previous page/blog entry from the site tree, again, doesn&#8217;t refresh the entire page, only the relevant portions.</p>
<p>Something I hate: It&#8217;s buggy, and it drives me nuts. In the admin interface under &#8216;Site Content&#8217;, you can&#8217;t natively drag and drop pages around to reorder them without clicking on &#8216;Create&#8217; like you want to create a new page/blog entry, and then selecting a check box that says &#8220;Allow drag &#038; drop reordering&#8221;. The problem is that the drag-and-drop reordering doesn&#8217;t always work. I&#8217;ve had dragging issues in Firefox on both Windows and Linux, as well as IE6 and IE7 on XP and IE7 on Vista.</p>
<p>2. The tiny_mce2 editor for creating Page content</p>
<p>Something I love: Being able to select something and click a button for bold/italic/underline or bullet lists or indenting, etc., is pretty user-friendly, and the right-hand column that appears for adding links or images is very slick. Giving you a site tree breakdown again for creating a link to an existing page is pretty slick, as well as being able to manually enter photo sizes when inserting images.</p>
<p>Something I hate: there are occasional bugs in the AJAX interface where you highlight your content, click on the &#8216;link&#8217; icon, and by the time you navigate to which page you want to insert, your highlighted text is no longer highlighted. And going back re-highlighting the content is all fine and good, except that clicking on the &#8216;insert link&#8217; button immediately un-highlights your content again. This bug is very random, and I&#8217;ve seen it on IE6/XP and FF2/Linux.</p>
<p>3. Having a Blog Engine as a separate widget</p>
<p>Something I love: keeping things separated like that makes managing the code a lot easier.</p>
<p>Something I hate: whoever build the blog widget decided to use BBCode for formatting, which means manually adding square-bracketed code around things you want to modify like:<br />
[b]this phrase is bold[/b]<br />
or<br />
[u]this is underlined[/u]</p>
<p>I don&#8217;t understand why the BlogEntry portion of the code can&#8217;t use the same tiny_mce2 interface. It&#8217;s such a serious pain in the butt trying to remember whether I need to manually write BBCode instructions or not, and moving articles to blog entries, or more recently, moving my Blackjack 2 articles from blog entries to pages and subpages, means I usually have to go back into the content and rebuild the layout, reinsert graphics and links, and what a hassle that is!</p>
<p>It was, however, pretty satisfying to add my own BBCode styling for a &#8216;quote&#8217; field which included a fancy quotation background image, etc., something I can&#8217;t do when indenting with tiny_mce2</p>
<p>Still though, the interface for managing content should be uniform.</p>
<p>4. Template layouts</p>
<p>Something I love: the template scheme is pretty simple to use, in terms of creating full page layouts or just sub-module layouts to insert within other full page layouts is pretty simple.</p>
<p>Something I hate: it&#8217;s a serious pain in the ___. The default setup I have right now creates /mysite/ where some CSS and template code lives. Then there&#8217;s the blog engine which installs as /blog/ and also contains CSS and template code. Then there&#8217;s the actual theme I&#8217;m working with (in this case, a heavily modified version of &#8216;paddygreen&#8217;), which is under /themes/paddygreen/ which, you guessed it, includes CSS and template code. Oh wait, there&#8217;s also /themes/paddygreen_blog/ which ALSO contains CSS and template code. And knowing which of 4 folders to place my CSS/template code has helped subdue my insomnia on more than one occasion.</p>
<p>5. Code is easy to change because it&#8217;s open-source</p>
<p>Something I love: tweaking and hacking is awesome.</p>
<p>Something I hate: having to tweak and hack the code for simple things like:<br />
- tweaking the code so the FirstParagraph function wouldn&#8217;t inject line-breaks using PHP&#8217;s wordwrap() function at a 60-character EOL.<br />
- tweaking the code comments would print in ASCending date order, instead of DESCending date order. Seriously, who on earth ever expects newer comments at the top of a comment stack? That&#8217;s very non-conducive to reading styles.<br />
- tweaking the code so writing a new blog entry would auto-fill the page with the same date format that my database is expecting to interpret &#8212; the code was auto-filling the date field as MM/DD/YYYY and the database was expecting DD/MM/YYYY and instead of gracefully trying to determine why there&#8217;s no 13th month and perhaps the month/day fields should be reversed, the database instead stores a &#8217;0&#8242; in the &#8216;created&#8217; field, which parses back out as Dec 31 1969 &#8212; technically the &#8216;epoch&#8217; time of January 1, 1970 UTC minus 8 hours for my server in Pacific time</p>
<p>6. mod_rewrite is our friend</p>
<p>Something I love: SEO-friendly URLs</p>
<p>Something I hate: having to hack .htaccess to cover basic things, like:<br />
- allowing the site visitor access to pre-existing pages or folders, without having to explicitly name them in .htaccess<br />
- having to add an extra set of rules to find the proper javascript/css files because the CMS engine uses relative pathing for everything, so iandouglas.com/my-blog-entry-title no longer looks for ~/public_html/blog/css/whatever.css, it tries to resolve it as iandouglas.com/my-blog-entry-title/blog/css/whatever.css and the engine can&#8217;t cope with finding the necessary bits, so my error_log was filling up with tons of missing javascript files and css files. I finally had to add these 4 lines of code into my .htaccess file before processing anything else:<br />
RewriteEngine On<br />
RewriteRule ([a-zA-Z0-9-_]*)/jsparty(.*) /jsparty$2 [L]<br />
RewriteRule ([a-zA-Z0-9-_]*)/cms/javascript(.*) /cms/javascript$2 [L]<br />
RewriteRule ([a-zA-Z0-9-_]*)/blog(.*) /blog$2 [L]<br />
RewriteRule ([a-zA-Z0-9-_]*)/themes/paddygreen(.*) /themes/paddygreen$2 [L]</p>
<p>7. Creating sub-content</p>
<p>Something I love: being able to create a page, then create multiple sub-pages under that, with the initial page as the parent, like the Blackjack 2 Tips pages and the SpamAssassin Trainer pages.</p>
<p>Something I hate: subpages aren&#8217;t created under a hierarchical URL format. For example, I could create a parent page for my SpamAssassin Trainer and call it &#8220;iandouglas.com/spamassasin/&#8221; if I wanted to, for a URL. But subpages would not be created as &#8220;iandouglas.com/spamassassin/subpage1&#8243; or &#8220;iandouglas.com/spamassassin/subpage2&#8243; &#8212; instead, every page, every blog article, has to have a unique URL name from everything else on the site, and get created as &#8220;iandouglas.com/unique-title-name&#8221;. From an SEO perspective, this is very bad form, because by URL alone, the top layer of your site is most important, and sublayers under that should be supporting material. Sure, I could mimic this with .htaccess, but this is something the CMS should handle on its own.</p>
<p>8. Good community vibe</p>
<p>Something I love: logging into XChat, connecting to #silverstripe on freenode, and chatting with a few of the developers who are always patient to answer questions</p>
<p>Something I hate: lack of documentation. Seriously guys, you&#8217;re at version 2.2.1 and your documentation sucks. Granted, this tends to plague most open-source projects I&#8217;ve ever worked with, but knowing which variables I could use within a page template was met with an answers of &#8220;I doubt there is, as it depends on the page type&#8221; and &#8220;check out (link) for a decent list, not exhaustive by any means, A good idea would be to make a documentation request on the SS site&#8221; Ultimately they were able to point me in the right direction to fix the blog entry date formatting issue I mentioned above, but I still don&#8217;t have a list of which variables I can use in my page templates&#8230;</p>
<p>9. Spam blocking</p>
<p>It didn&#8217;t take long to start getting spam on my site since the CMS allows comments to be left on pages and blog entries, by default, without any sort of captcha engine turned on, again, by default. Built-in Akismet is awesome but you have to manually activate it plus sign up for a WordPress.com account to get an API key &#8212; thankfully I already had one from my old WordPress-based personal blog. SilverStripe also includes a spam blocker in the form of a math equation that must be solved to leave a comment on the site, like &#8220;what is seven minus three&#8221;. And the documentation you do find about enabling the math blocker is incorrect (it says to add this line to your /mysite/_config.php file:<br />
MathSpamProtection::enabled(true) ;<br />
but the instruction should actually read:<br />
MathSpamProtection::setEnabled(true) ;</p>
<p>Of course, this doesn&#8217;t seem to actually *do* anything &#8212; I&#8217;m still getting just as many spam messages as before.</p>
<p>So I&#8217;m seriously starting to think about ditching SilverStripe. I was drawn to it because it looked slick, but as we all know, eye-candy doesn&#8217;t make something professional grade by any means. Of course, I&#8217;ll need to keep it around for a while yet since porting to something else means moving about 300 blog articles and a few dozen article pages, and probably having to reformat many articles all over again (hopefully in a unified interface). I&#8217;m really tempted just to go back to WordPress, but maybe I should peek at the open-source version of MovableType. Decisions, decisions. Of course, I could just get around to finally writing my own CMS and ust shut up about it, but that wouldn&#8217;t be nearly as much fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/02/11/silverstripe-cms-v2-21-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SCALE 6x 2008 Review and OpenMoko</title>
		<link>http://iandouglas.com/2008/02/10/scale-6x-2008-review-and-openmoko/</link>
		<comments>http://iandouglas.com/2008/02/10/scale-6x-2008-review-and-openmoko/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 04:45:00 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[fanboy]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[openmoko]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2008/02/10/scale-6x-2008-review-and-openmoko/</guid>
		<description><![CDATA[If I had to sum up SCALE 2008 in one word, I'd have to say "underwhelmed." I was disappointed in the sessions offered this year, and found that instead of trying to coordinate with colleagues to cover multiple sessions in the same time slot that I only really wanted to attend a single session on Saturday and Sunday each (of 16 possible each day). The session I attended today on MySQL Clustering was okay, but honestly wasn't anything new from what I'd already read on MySQL's own site.]]></description>
			<content:encoded><![CDATA[<p>If I had to sum up SCALE 2008 in one word, I&#8217;d have to say &#8220;underwhelmed.&#8221; I was disappointed in the sessions offered this year, and found that instead of trying to coordinate with colleagues to cover multiple sessions in the same time slot that I only really wanted to attend a single session on Saturday and Sunday each (of 16 possible each day). The session I attended today on MySQL Clustering was okay, but honestly wasn&#8217;t anything new from what I&#8217;d already read on MySQL&#8217;s own site. The only difference was the presenter, Solomon Chang, who was a co-author of a book on MySQL 5.1 Clustering Certification. Turns out Solomon was hired at PriceGrabber shortly after I left working there full-time, and did some database work there. He admitted early in his presentation that he accessed a development database server at PriceGrabber recently to, I guess, get some ideas for his talk this afternoon, and joked about how a previous manager of his from PG had to borrow bus fare from him at the show.</p>
<p>The highlight of &#8220;SCALE 6x&#8221; for me though was getting to meet <a href="http://www.socallinuxexpo.org/blog/2008/02/03/interview-with-michael-shiloh-of-openmoko/">Michael Shiloh</a> of <a href="http://www.openmoko.com">OpenMoko</a>. Looking back through my blog, I can&#8217;t believe I haven&#8217;t blogged more about owning a <a href="http://openmoko.com/products-neo-base-00-stdkit.html">Neo 1973 GAT01v4</a> since last fall, the world&#8217;s first fully open-source phone (hardware and software). Their latest phrase is &#8220;if you can&#8217;t open it, you don&#8217;t own it&#8221; &#8230; OpenMoko creates the hardware through FIC (the motherboard people), and also develops the underlying software stack (OS, drivers and firmware). Their marketing lingo from <a href="http://openmoko.org/">OpenMoko.org</a> (the dot-org site is their community based site with wiki and mailing lists etc) says that OpenMoko is creating the &#8220;world&#8217;s first integrated open source mobile communications platform.&#8221; Then name comes from OPEN (source) MObile COmmunication, with the &#8216;C&#8217; changed to a &#8216;K&#8217; perhaps so the &#8216;co&#8217; wouldn&#8217;t be pronounced &#8216;so&#8217; by those who have never heard of the company.</p>
<p>In a nutshell, the OpenMoko software running on the device is essentially an embedded Linux environment. You should have seen the eyes light up on my fellow Linux geeks when pulling up a shell prompt on the phone. Well, okay, the younger geeks had their eyes light up &#8212; the &#8216;mature&#8217; geeks in the crowd immediately squinted at the on-screen keyboard wondering how on earth they were going to type on a software keyboard where the letters were about 1/32&#8243; big.</p>
<p><img src="http://farm3.static.flickr.com/2056/2256762720_a892f4831f.jpg?v=0" align="left" /> When I arrived at SCALE on Saturday, Michael&#8217;s booth was one of the first I saw, and quickly introduced myself. We had a handful of Emails back and forth about the GSM modem firmware upgrade and why my T-Mobile pre-paid SIM card would not work, and I had also contacted Michael shortly before SCALE to volunteer to help him out at the booth. After some debugging with Michael during quieter times at the booth, we determined there was something wrong with the T-Mobile SIM card. Michael uses a T-Mobile phone, so we put my SIM card in and it said it had a 0 balance on the card. Michael got a little swamped with answering questions, so I stuck around and shared my own experiences with passers-by and was able to relay information in true F.A.Q. style:</p>
<p>- When can I buy one? (openmoko.org, whenever it&#8217;s released &#8212; in Michael&#8217;s own words &#8220;we&#8217;re horrible at predicting when we&#8217;ll be releasing something&#8221;, but <a href="http://wiki.openmoko.org/wiki/OpenMokoFramework">you don&#8217;t need the phone to start developing</a>)<br />
- How much is it? ($450-ish)<br />
- Does it have Wifi? (the GTA02 model will, yes, 802.11 b/g)<br />
- Can I do VoIP with it? (why not, port your favorite VoIP software using the cross compiler available at openmoko.org)<br />
- What&#8217;s the battery life? (&#8220;Uh, Michael, you want to take this one?&#8221;)<br />
- (while searching the edges of the phone) Where&#8217;s the stylus? (you want a stylus on the phone, make your own case, that&#8217;s open source now too!)<br />
- Does it support (insert your favorite Linux app here)? (<a href="http://projects.openmoko.org/">check the OpenMoko project tree</a>)</p>
<p><img src="http://farm3.static.flickr.com/2005/2256762850_92ba79c499.jpg?v=0" align="right" /> Having been caught up in answering questions, I had missed the only session I had wanted to attend on Saturday. One overly-excited geek who attended that &#8220;mobile Linux&#8221; session from Motorola, in his words (not mine) Motorola told the crowd that a pure Linux environment did not exist yet on a phone. This same excited fellow geek wouldn&#8217;t believe the Neo ran Linux until I opened a shell prompt and ran &#8220;uname -a&#8221; and showed him &#8220;2.6.22.5-moko11&#8243; &#8230; he immediately asked where he could buy one. I *almost* had a guy named Marc offer to straight up trade his Nokia N810 for my Neo. During the afternoon I also got to meet a guy named Matthew (sorry, I forget his last name) who is also on the community list. We all paired up and answered questions for people at the booth sometimes 3 deep crowding around wondering what an &#8220;open source&#8221; phone was all about.</p>
<p>I called T-Mobile this morning, had them fix the SIM card (they had never activated the minutes on the card), but my Neo still wouldn&#8217;t register with T-Mobile over the 25-mile trek down Imperial Hwy and down the full length of the 105 Freeway getting back to SCALE. I dropped the phone off with Michael, attended the MySQL talk, and came back to the booth about 4:30pm to find Michael packing up. After trying the SIM again in Michael&#8217;s own T-Mobile phone to see if it was still a SIM card issue, and being able to receive a call on his phone with my SIM, we put the SIM back into my Neo which *immediately* registered on the T-Mobile network, and I was able to both make and receive calls on the Neo with full audio !!! I&#8217;ve posted a question to the OpenMoko community list regarding the pre-paid SIM issue we tracked down by inserting the pre-paid SIM into an actual phone sold by the carrier (AT&#038;T or T-Mobile) before it would work in the Neo, since my Neo wouldn&#8217;t register on the network for over 6 hours, yet immediately (within 10 seconds) once we successfully used the SIM card in the carrier&#8217;s phone.</p>
<p><img src="http://farm3.static.flickr.com/2410/2256771883_382727dcff.jpg?v=0" align="left" />The SCALE organizers had common interest group meetings after the show officially closed at 6pm, called &#8220;Birds of a Feather&#8221; and about 10 people including Michael and myself sat around a table discussing the features of the phone, and about 8 others wandered in and out. We talked about the wants and needs of people there who were just hearing about it for the first time, and passing around three GTA01&#8242;s including my own. Again, there were people there who are part of the OpenMoko community mailing lists and Michael shared his thoughts on the 500MHz CPU running at 400MHz, battery life, the GTA02 features, and so on.</p>
<p>Not that I was surprised by this, but Michael is a fountain of knowledge. He&#8217;s definitely passionate about the project and product, and it definitely showed when talking to people at the booth and the after-show meeting. It was great to meet him and help out as best I could. Next stop with the Neo is the Orange County Linux Users Group (OCLUG) who had a member at the &#8220;Birds of a Feather&#8221; session, who I told I&#8217;d attend a meeting of theirs at UC Fullerton in March to show off the Neo and a development environment, provided we&#8217;re not moving that weekend. Might have to wait until April.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/02/10/scale-6x-2008-review-and-openmoko/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I have a rotating masthead banner</title>
		<link>http://iandouglas.com/2008/01/30/why-i-have-a-rotating-masthead-banner/</link>
		<comments>http://iandouglas.com/2008/01/30/why-i-have-a-rotating-masthead-banner/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 06:53:11 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2008/01/30/why-i-have-a-rotating-masthead-banner/</guid>
		<description><![CDATA[<p>Facebook allowed me to reconnect with a friend from high school named <a href="http://shewentwest.ca/">Lee-Ann</a>, who is currently studying graphic design. Being the avid little RSS subscriber, I've been reading her blog for a while, and sa...</p>]]></description>
			<content:encoded><![CDATA[<p>Facebook allowed me to reconnect with a friend from high school named <a href="http://shewentwest.ca/">Lee-Ann</a>, who is currently studying graphic design. Being the avid little RSS subscriber, I&#8217;ve been reading her blog for a while, and sa&#8230;</p>
<p>Facebook allowed me to reconnect with a friend from high school named <a href="http://shewentwest.ca/">Lee-Ann</a>, who is currently studying graphic design. Being the avid little RSS subscriber, I&#8217;ve been reading her blog for a while, and saw a post back in late November about some graphics work she wanted to make public. <a href="http://shewentwest.ca/comments.php?id=245_0_1_0_C">One of her assignments</a> was to create some poster ideas, and her designs impressed me enough to hire her to my roster of graphic artists who I use for my various freelance projects.</p>
<p>After a single round of drafts and some feedback from me she came through with six designs, and I picked my top three favorites and build a rotating banner script for them until I decide which one to keep permanently. My basis for hiring Lee-Ann was two-fold: <a href="http://robbridges.com">Robert</a> and his wife are expecting a baby in April and he&#8217;ll have his hands full for the foreseeable future, and Lee-Ann holds down a couple of jobs to put herself through school, so any way to help a friend, I&#8217;m all over it. Plus, her designs rock. All I had to do was send her a sample of the business card I got from VistaPrint, and she came up with some great designs. Thanks again, Lee-Ann!</p>
<p>So now I&#8217;m stuck trying to pick my favorite. I&#8217;m leaning towards the darker of the three for the contrast, but the other two are closer matches to the business card design I got from VistaPrint which I&#8217;ll be spreading all over the <a href="http://www.socallinuxexpo.com/">SCALE Linux Expo</a> happening near LAX on the weekend of Feburary 8-10.</p>
<p>Feel free to leave a comment telling me which one is your favorite, maybe I&#8217;ll let you guys pick it for me&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/01/30/why-i-have-a-rotating-masthead-banner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE Annoyance and Downtime</title>
		<link>http://iandouglas.com/2008/01/30/ie-annoyance-and-downtime/</link>
		<comments>http://iandouglas.com/2008/01/30/ie-annoyance-and-downtime/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 18:29:50 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[cheating]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[msn]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2008/01/30/ie-annoyance-and-downtime/</guid>
		<description><![CDATA[<p>I remember Microsoft making a claim recently that it's MSN network received so much traffic. This, of course, is because MSN is the default home page of Internet Explorer unless you reset it. But it seems even if you reset the browser to some...</p>]]></description>
			<content:encoded><![CDATA[<p>I remember Microsoft making a claim recently that it&#8217;s MSN network received so much traffic. This, of course, is because MSN is the default home page of Internet Explorer unless you reset it. But it seems even if you reset the browser to some&#8230;</p>
<p>I remember Microsoft making a claim recently that it&#8217;s MSN network received so much traffic. This, of course, is because MSN is the default home page of Internet Explorer unless you reset it. But it seems even if you reset the browser to some alternate home page, it still makes a connection to MSN every time you start the browser. In this case though, it seems they had a hiccup over at MSN:</p>
<p><img src="/assets/Uploads/pics/ie-goofup.png" /></p>
<p>Personally, I&#8217;d like to see Microsoft publish reports of how much traffic MSN really gets that does NOT include &#8220;runonce.msn.com&#8221; as a hostname. I bet their reported traffic would be SIGNIFICANTLY lower.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2008/01/30/ie-annoyance-and-downtime/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Bottom Line about Appearances</title>
		<link>http://iandouglas.com/2007/10/26/the-bottom-line-about-appearances/</link>
		<comments>http://iandouglas.com/2007/10/26/the-bottom-line-about-appearances/#comments</comments>
		<pubDate>Fri, 26 Oct 2007 17:33:56 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[cartoons]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2007/10/26/the-bottom-line-about-appearances/</guid>
		<description><![CDATA[<p>A very nice gentleman named Eric contacted me this morning. He is of the &#34;Eric and Bill&#34; duo that author the <a href="http://www.gocomics.com/bottomliners/">Bottomliners</a> cartoon. Eric asked me quite politely via Email to contact him as soon as I was able and left a telephone number, and I called within 20 minutes of his Email arriving. </p>]]></description>
			<content:encoded><![CDATA[<p>A very nice gentleman named Eric contacted me this morning. He is of the &quot;Eric and Bill&quot; duo that author the <a href="http://www.gocomics.com/bottomliners/">Bottomliners</a> cartoon. Eric asked me quite politely via Email to contact him as soon as I was able and left a telephone number, and I called within 20 minutes of his Email arriving. </p>
<p>Very pleasantly, he asked whether the daily cartoon page I had here at iandouglas.com was something I&#8217;d paid to license. Upon asking for more clarification on both sides of the conversation, he basically informed me that even by my site linking to comics from other sites, it gives the appearance of &quot;publication&quot; of those cartoons, and some of those cartoons sign exclusive distribution rights. </p>
<p>Personally, it was just more convenient for me to have all of my most favorite cartoons in a single place to read than to click, and click, and click, and click, somewhat endlessly, to read my favorite cartoons. I don&#8217;t recall these other cartoon sites having a service where you can do such a thing. </p>
<p>However, since I don&#8217;t want to get into any legal trouble over the appearance of publication, I&#8217;ve removed my daily cartoon page, and do not apologize for any inconvenience it causes anyone else who visited my site just to read them. A</p>
<p>ll of you can go to comics.com and gocomics.com to read them just like me. A few extra mouse clicks per day versus legal hassle or paying money? Yeah, I think I&#8217;ll click my mouse a little more. </p>
<p>Thanks again, Eric, for being polite and cordial about it &#8212; please keep up the great work! If you can think of any good ideas about web development to work into a cartoon, I&#8217;d love to see them.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2007/10/26/the-bottom-line-about-appearances/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>7 Things I&#8217;ve Learned in 10 Years as a Web Developer</title>
		<link>http://iandouglas.com/2007/07/18/7-things-ive-learned-in-10-years-as-a-web-developer/</link>
		<comments>http://iandouglas.com/2007/07/18/7-things-ive-learned-in-10-years-as-a-web-developer/#comments</comments>
		<pubDate>Wed, 18 Jul 2007 20:23:15 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[misc]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2007/07/18/7-things-ive-learned-in-10-years-as-a-web-developer/</guid>
		<description><![CDATA[<p>Through a lot of thinking over the past few months, and some recent events that have gone on, I wanted to pass along a few tidbits of advice to up-and-coming web developers, as well as seasoned professionals that need to remember a few key point...Through a lot of thinking over the past few months, and some recent events that have gone on, I wanted to pass along a few tidbits of advice to up-and-coming web developers, as well as seasoned professionals that need to remember a few key points about doing business as a web de]]></description>
			<content:encoded><![CDATA[<p>Through a lot of thinking over the past few months, and some recent events that have gone on, I wanted to pass along a few tidbits of advice to up-and-coming web developers, as well as seasoned professionals that need to remember a few key point&#8230;Through a lot of thinking over the past few months, and some recent events that have gone on, I wanted to pass along a few tidbits of advice to up-and-coming web developers, as well as seasoned professionals that need to remember a few key points about doing business as a web developer.</p>
<p><strong>Get it all in writing ahead of time, preferably with a signature</strong></p>
<p>The very first web project I ever did, commercially, was for the husband of a friend of a friend. Things were communicated very casually that he wanted me to redesign his company&#8217;s web page, but didn&#8217;t give any specifics at all. I agreed, although graphic design is not my strongest talent. I talked to him on the phone once or twice and most of our conversation was handled via Email, and I spent a couple of weeks working out a new design for his site. I never wrote up a quote, I just gave him my hourly rate, and away I went.</p>
<p>At the end of the project, I delivered the new site design to his server, submitted an invoice via Email, and eagerly awaited my money to arrive. A few weeks later I got a check in the mail for only two-thirds the amount of my invoice. I was puzzled and Emailed him back saying I&#8217;d only received a partial payment. His response was a very curt &#8220;We didn&#8217;t like your design and didn&#8217;t think it was worth paying 100% of your invoice.&#8221;</p>
<p>I was new at this, and frankly stunned that a friend of a friend would do this to me. I didn&#8217;t have anything with their signature on it stating I would do &#8220;ABC&#8221;, following a design they approved ahead of time, and be paid a specific amount of money when the work was delivered.</p>
<p>Could I have gone to small claims court? Yes, but it wasn&#8217;t worth my time for the amount of money I lost. Some have argued with me that I should have gone to small claims court just on principle but he was a friend of a friend. Chalk up my first of many experiences of not doing business with friends.</p>
<p>Nowadays, when I discuss work with a client, I write up an initial quote, I specify that the the client will receive a minimum of three designs to choose from (more if they pay extra), and once they choose a design, that they have a set number of hours to tweak that design until they&#8217;re 100% comfortable with it, and then work begins once we work out an exact list of requirements to accomplish. Not a single line of code gets written on my end until they sign off on a design to follow, a contract is signed by both parties, and I&#8217;ve cashed their non-refundable deposit to begin work.</p>
<p><strong>Write up a contract, and use it</strong></p>
<p>Given the &#8220;once bitten, twice shy&#8221; life lesson I learned from my first (bad) experience as a web developer, I immediately started working on a contract layout which I&#8217;ve tweaked to death over the past decade. When writing up your contract, it&#8217;s important to specify milestones and partial payments along the way. My standard project contract template, which gets sent with every quote I submit, now lists things like:</p>
<ul>
<li>A payment schedule, including a non-refundable deposit before I even begin any work, another partial payment when I show them the design on my own server, and the final payment upon delivery. I structure it so that the client pays me about 90% of my original quote before they have the project delivered, so I&#8217;ll never be out very much money if they decide not to pay my final invoice.</li>
<li>In the case where I&#8217;m simply adding something onto an existing site, I include a disclaimer that I must be paid for my work regardless of whether the client implements my work or not, although typically I&#8217;m being contracted to build something directly into their site to begin with.</li>
<li>Clear definitions of their scope and requirements and that anything requested outside of those separate documents will be charged as extra work, to avoid &#8220;feature creep&#8221; or &#8220;scope creep&#8221;.</li>
<li>A disclaimer that they may not end up owning 100% of the copyright on everything delivered if I need to implement third-party software as part of the development. For example, if I were to use [link=http://www.symfony-project.com]Symfony[/link] as a framework on a site, that the client cannot own the copyright on the framework software, just the software I develop on top of the framework.</li>
<li>A portion dedicated to their agreeing to allow me to subcontract any portion of work if I deem it necessary, and that any subcontractors will sign any non-disclosure agreement that my client requests to ensure confidentiality.</li>
<li>A single sentence stating clearly that they will receive a discount for repeat business and to allow me to &#8216;brand&#8217; their site with my business name (&#8220;developed by &#8230;&#8221; and linked back to my site)</li>
<li>Areas to initial allowing me to brand their site, add their site to my portfolio, etc. &#8212; all optional things that I can do after the project is completed. If they don&#8217;t initial an area, I don&#8217;t do it.</li>
</ul>
<p><strong>Know your strengths and weaknesses</strong></p>
<p>It&#8217;s important to know what you&#8217;re good at and what you&#8217;re not good at, when meeting with clients to discuss their project. When I know for a fact that I&#8217;m a very capable programmer and a weak graphic designer, if the client wants a very visually-captivating design, I have to discuss with them various subcontracting allowances as graphic design is not my strongest talent. And to let them know that quite often, graphic designers and Flash programmers are quite expensive, sometimes prohibitively so.</p>
<p>Can I make a visually-appealing site? Yes. Can I do it quickly? No, and it&#8217;s not fair to charge my client twice as much money to do it myself. I&#8217;m better off subcontracting that portion of work to someone with far more talent in the graphics arena to have it done quicker.</p>
<p>The newest spin-off business I&#8217;m working on with my friend Robert is developing a catalog of web designs, some hand-drawn and illustrated by Robert, and slicing those designs into skins/themes for about a dozen of the more popular CMS/blog engines being used today. We work well together because we understand that I am a strong programmer, he&#8217;s a strong graphic designer, and we each know enough about what each other does to appreciate the work involved.</p>
<p><strong>Know how to build an accurate time line</strong></p>
<p>One of the most important skills that I&#8217;ve learned over the years, besides the multiple programming languages I&#8217;m quite fluent in, is estimation. It&#8217;s important to have a good understanding of how long something will take you to accomplish, since no client will want to agree to a time line and then be asked over and over to stretch it out. In college, no joke, I had my professors all discuss estimation with us (this was back in 1993-1996), and they all had different views: have everyone in your team write out their estimate, and do one of the following:</p>
<ul>
<li>take the highest value, submit that as your estimate</li>
<li>take the highest value, double it, submit that as your estimate</li>
<li>add them all together, submit that as your estimate</li>
</ul>
<p>Obviously their approaches on this wouldn&#8217;t fly in today&#8217;s economy, plus they never taught us how to accurately estimate something. I&#8217;ve learned on my own through the guidance of a manger I worked under briefly, that by breaking something down into smaller pieces and realistically work out how long those smaller modules will take ME to develop, accounting for a typical 40-hour work week, I can often come up with a very realistic and very accurate answer as to how long something should take to develop.</p>
<p>I&#8217;ve often been asked to come up with an estimate in the middle of a meeting, so I start thinking out loud, writing down my notes the same way I would if I were alone working on something. This process almost always makes your client impatient though, however it shows them that you are methodical in your approach to things, and they&#8217;ll learn to appreciate your efforts more. To give them a quick answer off the top of my head, it&#8217;d be no more accurate, and just as much of a gamble, for me to pull out some dice and use a roll of those dice to determine how long something would take without carefully analyzing everything.</p>
<p><strong>Keep a portfolio of your work, but keep it maintained</strong></p>
<p>In a world where you must prove to others that you know what you claim to know, maintaining a portfolio of your work is an important aspect of marketing yourself. However, that same world also changes quickly and frequently, and some of your clients may use other designers and developers over time, minimizing the effort you put into their site. This can happen as quickly as a few months, or as long as a few years. My goal, of course, is that my clients will come back for repeat business instead of going elsewhere, because taking their business elsewhere tells me they were not 100% satisfied with what I did. Granted, some clients will always look for the &#8216;lowest bidder&#8217; just to save a buck, but those clients are usually very easy to spot.</p>
<p>When developing your portfolio, it&#8217;s important to keep a few things in mind:</p>
<ul>
<li>Get permission from your clients, and a clear outline from them what you&#8217;re allowed to discuss or not. Never assume you can show their site to anyone else (in fact, your non-disclosure agreement may explicitly prohibit you from doing so). Don&#8217;t assume that linking to their site is okay either. Also, don&#8217;t hide your name in HTML comments on their site unless you explicitly have their permission to do so. Discuss with your client what you can say on the site in a sentence or two about your work, whether a browser screen shot is permitted, even a testimonial from the client in their own words, etc.</li>
<li>Time stamp your involvement. Without this, you&#8217;re essentially claiming, incorrectly, you are the current developer/maintainer of the site, if the client has gone elsewhere. This will only lead to confusion when people no longer see your design or your branding.</li>
<li>Be honest about your role. If you worked through an agency on a site, say so on your portfolio. If all you did was the HTML/code while someone else did the graphics, you need to outline that. It&#8217;s simply dishonest to claim you were the only developer on a project for a client when you were working for or contracted through some third-party group when you did the work, or only a portion of the work. For example, I could easily list a popular customer service web site at Toyota in my portfolio, but I&#8217;m not entitled to, as I was working for another agency at the time, and my contract prohibits me from claiming I worked on the site, though I did, happily, for 6 months.</li>
</ul>
<p>It&#8217;s also very important to note that while your clients may go elsewhere for workers over time for any number of reasons, that you keep tabs on the sites you build, because while designers and developers change over time, domain names as well can change hands over time too, which means you no longer have any claim to the site whatsoever. My suggestion is, where possible, to use <a href="http://www.archive.org/">The Wayback Machine</a> to look for the version of the web site you worked on, and link to archive.org&#8217;s older version of the site instead of the current design.</p>
<p><strong>Keep learning</strong></p>
<p>My wife and I both are very keen learners. I credit my parents for always encouraging me to stretch myself to learn something. My web development expertise is pretty much entirely self-taught, but I have a formal college education in software development, so learning new web-based programming languages has been quite easy for me. In 1996 it was learning basic HTML. In 1997, it was Perl. In 1998, it was MySQL and PHP. In 2002 it was XHTML, and so on. If you stop learning, your skills become stale, and having stale skills will effectively end your career. Being good at one thing used to be a major credit, but in a field of technology that changes so quickly, there is no question that you must adapt to keep up.</p>
<p>What I&#8217;m learning right now is that it&#8217;s important to learn technologies you&#8217;ve always said you&#8217;d never learn. Those that read my blog will know I don&#8217;t really care for Microsoft&#8217;s approach to many things, and that has frankly kept me from learning ASP or .NET programming, despite the fact that it&#8217;s still very strongly supported by the industry. Being such a strong advocate for open source, I tend to shy away from closed-source solutions. However, my current contract position is with a company that is a &#8220;Microsoft shop&#8221;. And while they run PHP and MySQL, they do so on Windows servers with IIS 6. The smart aleck in me wants to talk about the LAMP acronym (linux, apache, mysql, php/perl/python) and apply that to my working environment and how ineffective I see it as Windows IIS MySQL PHP (&#8220;WIMP&#8221;), but I digress. Whether I like it or not, I MUST learn ASP and .NET to keep up with where this company is headed, or I&#8217;m out of a job.</p>
<p>It&#8217;s important to keep tabs on where industry is today, and also where it&#8217;s headed, and learning those skills too. For this reason, I&#8217;ve started working with some J2EE and Java Beans code lately. Granted, I&#8217;m a few years behind on learning J2EE, but that&#8217;s the latest trend, so if I want to compete, I have to learn. If I don&#8217;t keep up, I might as well go learn a completely new kind of career.</p>
<p><strong>Give back to the community</strong></p>
<p>I used to tutor in college, especially in my programming classes, but also in math which I hated. However, nothing will reinforce your knowledge for something like having to teach it to someone else. Find a prodigy, and be a mentor. Find a forum to get involved in and share some of your knowledge with others. Go sit in an IRC chat room for a while and give out some friendly advice.</p>
<p>Giving back to the community is the biggest thing that working with open source has taught me. And while I&#8217;ve never submitted code patches for any large-scale projects of note, like the Linux kernel, Apache or PHP, I have certainly given my ideas and code back to other smaller open-source projects, some of them will be marked with my name forever in subversion repositories. I participate in forums where I can, and I release my own software as open source and often use suggestions submitted by my own user base.</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2007/07/18/7-things-ive-learned-in-10-years-as-a-web-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>11 Reasons Linux is Better than Windows</title>
		<link>http://iandouglas.com/2007/05/07/11-reasons-linux-is-better-than-windows/</link>
		<comments>http://iandouglas.com/2007/05/07/11-reasons-linux-is-better-than-windows/#comments</comments>
		<pubDate>Mon, 07 May 2007 22:07:23 +0000</pubDate>
		<dc:creator>id</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://iandouglas.com/2007/05/07/11-reasons-linux-is-better-than-windows/</guid>
		<description><![CDATA[There was a good article on digg.com today called <a href="http://www.irintech.com/x1/blogarchive.php?id=1018">Things I can do in Linux that I can't do on Windows.</a>. Since that server seems to be crashing badly, someone pasted the list in a digg comment, and I wanted to share my thoughts on each bullet point as well.]]></description>
			<content:encoded><![CDATA[<p>There was a good article on digg.com today called <a href="http://www.irintech.com/x1/blogarchive.php?id=1018">Things I can do in Linux that I can&#8217;t do on Windows.</a>. Since that server seems to be crashing badly , someone pasted the list in a digg comment, and I wanted to share my thoughts on each bullet point as well:</p>
<blockquote><p>1. <strong>Update every single piece of software on my system with a single action.</strong><br />
This is one of the main reasons I run Linux. Sure, Windows has Windows Update, but that only updates the operating system, Office, and a few other things. For every Linux distribution I&#8217;ve used (Gentoo, Red Hat, Suse, Ubuntu), updating is simple. When you update, you have every application, every library, every script &#8211; every single piece of software upgraded automatically for you. And on most of them, they will check for updates automatically and notify you. This is great for security, fixing bugs quickly, and getting the latest in features.</p></blockquote>
<p>Think about the simplicity of this &#8212; Wouldn&#8217;t you love a single Windows process that could update Windows, MS Office, Adobe Photoshop/Illustrator, WinAmp, Firefox, Opera, Thunderbird, MS Money/Quicken/Quickbooks, etc., all in a single session? This exact functionality is built into every modern version of Linux. Every third-party application that gets installed or is available through &#8216;portage&#8217; or &#8216;apt&#8217; or &#8216;up2date&#8217; etc., can be updated in a single shot. Not to mention that you can update critical updates right away instead of waiting until Patch Tuesday next month while virus writers and black had hackers are exploiting your box.</p>
<blockquote><p>2. <strong>Update nearly everything on my computer without a reboot</strong>.<br />
On Linux, there is only one thing that requires a reboot after updates. The kernel. And even then you can continue to run on the previous kernel. You just need to reboot to get the benefit of using the new kernel (say, if it has a bug fix or a new feature). In Windows, many of the updates to even non-critical software require reboots.</p></blockquote>
<p>My biggest pet peeve about Windows since Win95 is that just installing the OS now requires a handful of reboots just to get the OS itself installed and immediately run Windows Update. I think the last time I installed Windows XP SP2, I still needed to run Windows Update 6 or 7 times just to download a set of patches and reboot, only to find even more patches needed. With Linux, you run a single update and I think in the 13+ years that I&#8217;ve been using Linux, I can count on one hand the number of times I&#8217;ve had to re-run the update utility to fetch extra packages.</p>
<p>If you&#8217;re running 20 versions behind on the kernel, for example, Windows would probably have you upgrade every single step of the way and reboot every time. On Linux, it would just download the very latest version which includes all of the latest patches. It astounds me that Microsoft never built a &#8216;cumulative&#8217; patch set, where if you install a new copy of the OS, you just install a single file to patch everything in one shot instead of downloading dozens and dozens of individual patch files that need reboots along the way.</p>
<blockquote><p>3. <strong>Keep my system secure without software that consumes my system resources, requires my time, and frequently nags me.</strong><br />
Basic requirement for a secure Windows box include:<br />
1. Running antivirus protection. AV software consumes resources and requires routine scans.<br />
2. A software firewall like ZoneAlarm or the one built into Vista that constantly asks you if you want to allow software to contact the Internet. More time on your part.<br />
3. Running Adblock Adaware and/or Spybot Search &amp; Destroy on a routine basis, consuming your time, and requiring your manual intervention. People often forget or don&#8217;t &#8220;get around to it&#8221;.<br />
4. Never trusting software. You have to go through life assuming every bit of software and every website on the Internet is going to screw you over. What a sorry state of affairs that is.</p>
<p>All of this requires your attention, slows your computer, and ruins the open experience of the Internet. None of this is necessary in Linux. You get your software through your distribution. As long as you can trust your distribution, you can trust the software available. Having a firewall is a good thing even in Linux, but most of us have a firewall built into our Cable and DSL modems, or our wi-fi router. A software firewall in windows is as much used to keep malware from calling out as it is to keep outside intrusions from coming in, and you don&#8217;t have the same concerns in Linux (since, as I said, you can trust your software).</p></blockquote>
<p>In full-disclosure mode, iptables, the most common firewall in Linux, is a software-based firewall much like ZoneAlarm would be (from #2 the above list of 4 things), except that the firewall software plugs directly into the kernel making it much faster than a third-party software application would be. I fully employ both a firewall in my cable modem AND a wifi router before traffic even gets to my Linux box, and then also have iptables running.</p>
<p>In a perfect world, I&#8217;d have a second network card in my Linux machine to provide the Internet connection for my wife&#8217;s Windows box at home, but she&#8217;s smart enough to watch out for spyware and junk.</p>
<blockquote><p>4. <strong>Run an entire operating system for free without pirating software, and without breaking the law</strong>.<br />
Most Window&#8217;s users seem to accept that breaking the law is okay, because it is pretty much required. Either you break the law, or spend countless thousands of dollars on the software you need. You may not think it is a big deal, but if you own a home like I do, you are putting it at risk. While unlikely, the potential is there for software companies to come after you just like the RIAA has come after countless people. With Linux, this isn&#8217;t necessary. You can run the software you need without paying for it, and without breaking the law. I know I sleep better at night.</p></blockquote>
<p>The joy of Open-Source Software (OSS) is that most of of it is free of charge. I&#8217;ve never understood the free-as-in-speech or free-as-in-beer analogies that float around when discussing OSS. Still, this is a very valid point &#8212; Windows software is EXPENSIVE! By the time you buy &#8216;typical&#8217; software for running a home business in web development, Windows Server edition, Adobe tools, MS Office, Quickbooks, Visual Studio, you could easily spend <span style="text-decoration: underline;">thousands</span> of dollars, when everything you need to succeed comes free with Linux, including Apache/PHP/MySQL, .NET tools, Bluefish/Eclipse, OpenOffice, GnuCash, etc. all free of charge, and like point #1 at the start of this article &#8212; all of these software packages update automatically using your distribution&#8217;s installer-of-choice.</p>
<blockquote><p>5. <strong>Take my settings with me where ever I go.</strong><br />
In Linux, all your personal settings are stored in your Home folder, most in folders that begin with a period (like .gaim). So, I can copy all these settings from one computer to another. I can put these settings on a USB drive. When I switched from Gentoo to Ubuntu, I kept all my settings. On Windows, some settings are under your home folder and some are in the registry. So your settings are not portable.</p></blockquote>
<p>Good Lord, I&#8217;ve lost track of how many times I&#8217;ve had to back up the entire C:\Documents and Settings\ folder to have access to bookmarks, settings, etc., or how many hours I&#8217;ve had to spend exporting registry keys for backing up registration codes/serial numbers for software with limited number of installs (also something that doesn&#8217;t generally occur in Linux). The original author&#8217;s idea of backing up his settings in a USB key is nice, sure.</p>
<p>I prefer Subversion, myself, and use Google&#8217;s &#8220;Browser Sync&#8221; and another third-party application for bookmark sync&#8217;ing, to keep a lot of my information available wherever I go. I have Google&#8217;s Browser Sync installed on 5 systems, so any sites I visit are available in my browser history on all 5 systems, and having bookmarks sync&#8217;d, man that&#8217;s just a little piece of heaven right there&#8230;</p>
<p>Windows is <span style="text-decoration: underline;">horrible</span> for a standard location for settings. Some are stored in the application&#8217;s folder under &#8220;Program Files&#8221;, some are stored in your Windows folder, some are in the registry, some are in your &#8220;Documents and Settings&#8221; folder under &#8220;Application Data&#8221; or &#8220;Local Settings&#8221;, some are in your &#8220;My Documents&#8221; folder &#8212; good grief people &#8230; get organized already!</p>
<blockquote><p>6. <strong>Run Internet Explorer 5.0, 5.5, 6.0, and 7.0 on the same desktop. </strong><br />
I have all installed thanks to the wonderful IEs4Linux project. I can even run them side-by-side if I want. For a web developer, that&#8217;s huge. Testing browser compatibility to that level on Windows requires multiple machines or something like VMWare. Further, when I run IE under Linux, I don&#8217;t have to worry about any malware or virus getting onto my system.</p></blockquote>
<p>Having &#8216;wine&#8217; available to emulate Windows for running a lot of software is sure handy. For example, I have Dreamweaver and Fireworks running on my Gentoo box thanks to wine. Granted, I still need to look into the IEs4Linux project as I do have clients who use IE exclusively and I need to make sure all of my development is cross-browser and cross-platform friendly. Now if only I could get a Mac emulator to ensure my pages look right on Safari, I&#8217;d be happy&#8230;</p>
<blockquote><p>7. <strong>Understand everything that is going on in my computer.</strong><br />
Using Windows is like working with a black box. You can see the outside, but you have no idea what is going on inside. If you hit snags, your only option is to hope Microsoft fixes it. Or, perhaps you can submit a bug report to Microsoft, spending your time improving software that a company makes billions from. Under Linux, you can look at the system logs, where you can see most issues. You can search for the log messages on Google, and can usually track the cause and often find a fix. If not, I can even go look at the source code to find the offending problem. Granted, most people aren&#8217;t capable or don&#8217;t have the time to look at the source code. But the fact that tens-of-thousands of geeks do is often very, very helpful. And if you do spend the time filling out a bug report, you are helping other people just like yourself, not contributing your time to a rich software company.</p></blockquote>
<p>Granted, running Linux will propel you into a level of &#8216;geek&#8217; you&#8217;ve never experienced before. Most of my clients don&#8217;t care what their computer is running as long as it&#8217;s fast and isn&#8217;t full of spyware/malware. They don&#8217;t know, they don&#8217;t wanna know. &#8220;Ignorance is Bliss&#8221; seems to be the mantra of many people who simply just want a computer to function the way they need. But again, back to the beauty of open-source software, having tens of thousands of geeks like me rifling through source code to figure out a quirk in a piece of software, then submit a patch/fix, then have that piece of software get updated for pretty much every Linux distribution out there, means that if I&#8217;m running Gentoo and find a bug fix for Apache, that every other distro (Ubuntu, Slackware, Debian, SuSE, etc) running Apache can benefit from my work.</p>
<blockquote><p>8. <strong>Customize every aspect of my desktop.</strong><br />
In Windows, you are more or less stuck with what you are given. Sure, you can install buggy skinning engines, or you can pay Microsoft extra for the ability to put skins on your desktop. But even these aren&#8217;t very adaptive. It&#8217;s just a new coat of paint on the same desktop. Under Linux, I can choose the window manager, the desktop environment, the theme, the GTK engine, the icon theme, the special effects (see Beryl or Compiz), the filesystem browser, and so on. Nearly every aspect of the system has competitive options. If you look around the internet at screenshots of various Linux desktops, you rarely see two that look the same.</p></blockquote>
<p>At the nuts-and-bolts level, &#8220;Linux&#8221; is really just the kernel that makes everything run. Building everything around it is your &#8220;distribution&#8221; or &#8220;distro&#8221;, and each distro tends to favor various windowed environments such as Gnome, KDE, xfce and such, and then even within those you can have different theme engines running which affect your user experience. On Windows, you get your &#8216;kernel&#8217;, and a single window manager (&#8220;Windows&#8221;), and while you can install third-party theme packs like WindowBlinds, they just add a layer to the already-too-bulky graphical interface that makes up Windows. Even with the &#8220;Plus&#8221; packages that Microsoft sells for extra themes, there isn&#8217;t <span style="text-decoration: underline;">that</span> much of a difference in how they operate because they all just run on the same .NET framework.</p>
<blockquote><p>9. <strong>Benefit from competition between projects for each system on my computer</strong>.<br />
As I mention in point 8, there are options for every aspect of the Linux desktop. Not only is it fun to try the various options, but it leads to better software as multiple projects compete against each other to be the best. Can you imagine competing printing backends, competing desktop environments, or competing USB mounting systems on Windows? I&#8217;ve been a Linux user for 3 years now, and I&#8217;ve seen remarkable changes in systems used on the Linux desktop, from critical systems (XFree86 switched to X.Org, auto-mounting systems) to non-critical (my CD-Rom eject button works!).</p></blockquote>
<p>A good point is made here &#8212; imagine multiple vendors trying to compete for how your USB peripherals connect. Egad&#8230; the humanity. I&#8217;ve seen similar Linux projects merge over the years, and I&#8217;ve seen common software branch into multiple distinct branches of software to cater to different groups. At the end of the day, our common goal is to make your end-user Linux experience a pleasant one.</p>
<blockquote><p>10. <strong>Run thousands of great pieces of software that only run on Linux</strong>.<br />
Just like Windows, Linux has software that doesn&#8217;t run on Windows. Great pieces of software like Amarok, Bluefish, Neverball, Gnumeric, K3B, Beryl, gdesklets, and MythTV. I know this is a chicken-and-egg point, where Windows has the exact same situation. Too often I hear &#8220;I can&#8217;t switch to Linux because it doesn&#8217;t run [insert Windows software]&#8220;. My reason for pointing it out is just to make it clear that this is a two-way street.</p></blockquote>
<p>Yes, there are certainly lots of Linux-only software projects that get plagued with comments like &#8220;When are you going to port Amarok to Windows&#8221; to get replies of &#8220;Uh, never?&#8221; Granted, there are likely thousands of Windows-only applications for every Linux-only application, but when you keep in mind the open-source mentality of tens of thousands of geeks like me hacking away at the code to make that one application better than the thousands of Windows applications that do almost the same thing, we win out in the end.</p>
<blockquote><p>11. <strong>Learn about, support, and appreciate the value of free software</strong>.<br />
I believe free software is important to us all. Even if you use non-free software, the free software movement ensures checks and balances on non-free software by offering an alternative. By running a free operating system and becoming involved in the community, I&#8217;ve contributed to free software, even if only in a small way.</p></blockquote>
<p>The biggest concern for people about switching to Linux is lack of customer support. If you get the OS for free, who can you call to get help? Truth is, you only get one free phone call to Microsoft anyway, if you get stuck, and then you pay up the wahzoo for any additional help. With Linux there are literally thousands of support forums and Email-based mailing lists that offer help to new people switching to Linux. You&#8217;d be surprised at how many people will greet you warmly and offer all the free support you can handle just by starting a message with &#8220;I used to use Windows, but now I use Linux full time, and I need help with &#8230;&#8221; I&#8217;m one of those people. I try very hard to convince my clients to switch from Windows to Linux and have met a lot of resistance. My best comeback is &#8220;I can support you better if you were on Linux&#8230;&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://iandouglas.com/2007/05/07/11-reasons-linux-is-better-than-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
