<?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>Adam Caudill&#039;s Blog &#187; Software</title>
	<atom:link href="http://adamcaudill.com/category/technology/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://adamcaudill.com</link>
	<description>Adam&#039;s view on technology, software development, and world domination.</description>
	<lastBuildDate>Sat, 04 Feb 2012 19:01:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>IIN (BIN) Database</title>
		<link>http://adamcaudill.com/2012/01/26/iin-bin-database/</link>
		<comments>http://adamcaudill.com/2012/01/26/iin-bin-database/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 17:58:28 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=1087</guid>
		<description><![CDATA[<p>An <a href="http://en.wikipedia.org/wiki/ISO/IEC_7812">Issuer Identification Number</a> (IIN, more commonly called a BIN) is the first 6 digits of a credit or debit card, and it identifies the bank that issued it &#8211; and if you want to know if a number is a real credit card or just a bunch or random digits, it&#8217;s a huge help. While [...]]]></description>
			<content:encoded><![CDATA[<p>An <a href="http://en.wikipedia.org/wiki/ISO/IEC_7812">Issuer Identification Number</a> (IIN, more commonly called a BIN) is the first 6 digits of a credit or debit card, and it identifies the bank that issued it &#8211; and if you want to know if a number is a real credit card or just a bunch or random digits, it&#8217;s a huge help. While credit card numbers do use the <a href="http://en.wikipedia.org/wiki/Luhn_algorithm">Luhn algorithm</a> (mod 10 check) to see if the number is valid, it still produces a huge false-positive rate.</p>
<p>For an application like <a href="https://github.com/adamcaudill/ccsrch">ccsrch</a>, having this data available would be very handy to reduce false positives when scanning a large file system (scanning a large server produces a huge number of possible hits), but for what I would call fairly misguided reasons, the official registrar of these numbers (the <a href="http://www.aba.com/default.htm">ABA</a>) doesn&#8217;t make this data publicly available. As a result many people have pulled together what data they could find and made it freely available.</p>
<p>So I&#8217;ll add my name to that list.</p>
<p>I&#8217;ve pulled data from many public sources (sorry, I didn&#8217;t keep very good notes as to the sources) and cleaned it up to a reasonable point. All told, I&#8217;ve probably spent 40 hours or more cleaning this data up and getting it to a usable state. It contains over 60,000 entries, including major credit cards (Visa, MasterCard, Amex, Discover) as well as a few merchant entries.</p>
<p>Each record contains the following:</p>
<ul>
<li>IIN</li>
<li>Type (Mastercard, Visa, Visa Credit, etc.)</li>
<li>Name (Issuer name)</li>
<li>Length</li>
</ul>
<p><strong>Data Quality</strong></p>
<p>It&#8217;s not perfect. It&#8217;s from public sources so there may be errors, and there are some duplicates from cases where I wasn&#8217;t able to determine who the IIN actually belongs to. I&#8217;ve also updated for name changes and mergers where possible, but I&#8217;m sure I&#8217;ve missed a few and there are some where the assets where split, so I don&#8217;t know who the correct owner actually is (Washing Mutual being the leading example of this).</p>
<p>In general, I leaned to the side of caution &#8211; so if I didn&#8217;t know for sure, I left the duplicate in.</p>
<p>If you need absolutely correct data &#8211; contact the ABA, they are the only source that can give you the completely accurate listing. If you need to have a decent idea if a number is valid for most cases &#8211; I would say that this data is good enough.</p>
<p><strong>Warranty</strong></p>
<p>Just to make it really, really, really clear: There is no guarantee that this data is accurate, that it won&#8217;t cause to lose your job, cause your house to burn down, or cause Rebecca Black&#8217;s <a href="http://www.youtube.com/watch?v=kfVsfOSbJY0">Friday</a> to get stuck in your head (yup, you&#8217;re welcome <img src='http://adamcaudill.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p><strong>Copyright</strong></p>
<p>Based on my understanding of US copyright law, it is my understanding that this data is not subject to copyright as it is a compilation of facts and doesn&#8217;t constitute an original expression. Thus, to the best of my knowledge, this data is in the public domain.</p>
<p><strong>Download</strong></p>
<p><a href="http://adamcaudill.com/files/2012/01/IIN.zip">Here</a> (zipped CSV)</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2012/01/26/iin-bin-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Cringely is wrong about Java</title>
		<link>http://adamcaudill.com/2011/10/15/why-cringely-is-wrong-about-java/</link>
		<comments>http://adamcaudill.com/2011/10/15/why-cringely-is-wrong-about-java/#comments</comments>
		<pubDate>Sat, 15 Oct 2011 19:47:52 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Business of Software]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=996</guid>
		<description><![CDATA[<p>A couple of days ago I was sent a link to Robert Cringely&#8217;s latest treatise:  <a href="http://www.cringely.com/2011/10/the-second-coming-of-java/">The second coming of Java</a> &#8211; and to say I disagreed was a bit of an understatement. To me, it represents a fundamental flaw in his perception of developers, and more importantly the economics of software development.</p> <p>The key to Cringely&#8217;s argument [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago I was sent a link to Robert Cringely&#8217;s latest treatise:  <span style="direction: ltr;"><em><a href="http://www.cringely.com/2011/10/the-second-coming-of-java/">The second coming of Java</a></em> &#8211; and to say I disagreed was a bit of an understatement. To me, it represents a fundamental flaw in his perception of developers, and more importantly the economics of software development.</span></p>
<p>The key to Cringely&#8217;s argument comes down to this:</p>
<p style="padding-left: 30px;">When SSDs gain enough capacity there will be a shift from the Ruby world back to the Java world. Not for prototyping, because, well, it’s prototyping. But simply because the statement “<strong>Ruby is <em>incredibly</em> slow but I don’t care because my database is slower</strong>” will no longer be true.</p>
<p><!--EndFra-->What he&#8217;s missing here is the real reason people use frameworks like Rails; it&#8217;s not about it being Ruby, or being the latest cool thing &#8211; it&#8217;s about developer productivity. That&#8217;s it, and that&#8217;s all there is to it &#8211; Rails allows a developer to do more in less time. That&#8217;s one of the key reasons so many Java web developers jumped ship (though I can think of a few others), and what pushed Microsoft to invest so heavily in their <a href="http://www.asp.net/mvc">MVC framework</a>.</p>
<p>I could fully rehash the argument, but in what I consider to be one of Jeff Atwood&#8217;s best articles,  <span style="direction: ltr;"><em><a href="http://www.codinghorror.com/blog/2008/12/hardware-is-cheap-programmers-are-expensive.html">Hardware is Cheap, Programmers are Expensive</a></em>, he covers a key point to my argument &#8211; developer time is vastly more expensive than hardware. Atwood&#8217;s take on the issue is clear:</span></p>
<p style="padding-left: 30px;">Clearly, <strong>hardware is cheap, and programmers are expensive</strong>. Whenever you&#8217;re provided an opportunity to leverage that imbalance, it would be incredibly foolish not to.</p>
<p>When there&#8217;s a choice between developer productivity, and spending money on hardware &#8211; the conclusion should be the same. It&#8217;s much cheaper to throw more hardware at a slower framework than it is to invest more developer time in a faster framework. For any non-trivial application, throwing more front-end servers at it will always be cheaper than slowing the development process down with a non-productivity-centric toolkit.</p>
<p>It&#8217;s simple economics; server hardware is getting faster and cheaper, developer time is only getting more expensive.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/10/15/why-cringely-is-wrong-about-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bbPress 2.0 (beta-1) released!</title>
		<link>http://adamcaudill.com/2011/05/21/bbpress-2-0-beta-1-released/</link>
		<comments>http://adamcaudill.com/2011/05/21/bbpress-2-0-beta-1-released/#comments</comments>
		<pubDate>Sat, 21 May 2011 18:25:18 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[bbPress]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=833</guid>
		<description><![CDATA[<p>This morning, the latest version of my favorite forum software, bbPress, was <a href="http://bbpress.org/blog/2011/05/bbpress-2-0-beta-1/">released</a>. While this is a beta and not a final release, it&#8217;s still a major event for the project: this release is in the form of a WordPress plugin, instead of a stand-alone application as it&#8217;s been in the past. In December [...]]]></description>
			<content:encoded><![CDATA[<p>This morning, the latest version of my favorite forum software, bbPress, was <a href="http://bbpress.org/blog/2011/05/bbpress-2-0-beta-1/">released</a>. While this is a beta and not a final release, it&#8217;s still a major event for the project: this release is in the form of a WordPress plugin, instead of a stand-alone application as it&#8217;s been in the past. In December 2009 <a href="http://adamcaudill.com/2009/12/16/bbpress-is-the-end-near/">I wrote about this decision</a> &#8211; and at the time I was rather disappointed with the change in direction; but now my views have changed. I&#8217;m also excited to see that <a href="http://ma.tt/">Matt</a> and his company, <a href="http://automattic.com/">Automattic</a> have decided to invest the time and money needed to make this happen; there for a while it looked like bbPress really was dying.</p>
<p>Thanks to services like <a href="http://stackexchange.com/">StackExchange</a> and its numerous clones, it seems the days of standalone forums are numbered; when combined with the increasing strength of WordPress as a full-blown CMS, this move actually makes a lot of sense.</p>
<p>I&#8217;m excited both as a user and developer &#8211; this opens many new doors from both perspectives, and will certainly increase adoption of the software, as integration with the current version is <a href="http://adamcaudill.com/2011/03/06/bbpress-wordpress-3-1-registration-issues/">a bit tricky</a>.</p>
<p>Congratulations to the entire team on this release; it really is a major milestone for the project!</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/05/21/bbpress-2-0-beta-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VB6: Not so open source</title>
		<link>http://adamcaudill.com/2011/05/20/vb6-not-so-open-source/</link>
		<comments>http://adamcaudill.com/2011/05/20/vb6-not-so-open-source/#comments</comments>
		<pubDate>Fri, 20 May 2011 06:33:23 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=817</guid>
		<description><![CDATA[<p>Earlier today, a rather surprising tweet hit, being retweeted at least 80 times, including by a few rather influential people in the .NET world:</p> <p> #embedly_twitter_14054401{background:url(http://a2.twimg.com/profile_background_images/71955358/DSCF0658.jpg) #C0DEED; padding:20px;} #embedly_twitter_14054401 p{background:#fff;padding:10px 12px 0px 12px;margin:0;min-height:48px;color:#000;font-size:18px;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_14054401 .embedly_tweet_content{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_14054401 p span.metadata{display:block;width:100%;clear:both;margin-top:0px;height:40px; padding-bottom: 12px;} #embedly_twitter_14054401 p span.metadata span.author{line-height:15px;color:#999;font-size:14px} #embedly_twitter_14054401 p span.metadata span.author a{line-height:15px;font-size:20px;vertical-align:middle} #embedly_twitter_14054401 p [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier today, a rather surprising tweet hit, being retweeted at least 80 times, including by a few rather influential people in the .NET world:</p>
<p><!-- http://twitter.com/RoyOsherove/status/71287262842859520 -->
<div id='embedly_twitter_14054401' class='embedly_twitter'>
<style type='text/css'> #embedly_twitter_14054401{background:url(http://a2.twimg.com/profile_background_images/71955358/DSCF0658.jpg) #C0DEED; padding:20px;} #embedly_twitter_14054401 p{background:#fff;padding:10px 12px 0px 12px;margin:0;min-height:48px;color:#000;font-size:18px;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_14054401 .embedly_tweet_content{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_14054401 p span.metadata{display:block;width:100%;clear:both;margin-top:0px;height:40px; padding-bottom: 12px;} #embedly_twitter_14054401 p span.metadata span.author{line-height:15px;color:#999;font-size:14px} #embedly_twitter_14054401 p span.metadata span.author a{line-height:15px;font-size:20px;vertical-align:middle} #embedly_twitter_14054401 p span.metadata span.author img{float:left;margin:0 10px 0 0px;width:48px;height:48px} #embedly_twitter_14054401 p a {color: #0084B4; text-decoration:none;} #embedly_twitter_14054401 p a:hover{text-decoration:underline} #embedly_twitter_14054401 .embedly_timestamp{font-size:13px;display:inline-block;margin-top: 5px;} #embedly_twitter_14054401 .components-above span.embedly_timestamp{font-size:10px;margin-top: 1px;line-height:12px} #embedly_twitter_14054401 a {color: #0084B4; text-decoration:none;} #embedly_twitter_14054401 a:hover{text-decoration:underline} #embedly_twitter_14054401 .tweet-screen-name {font-size: 14px; font-weight: bold;} #embedly_twitter_14054401 .tweet-full-name {padding-left: 4px; color: #999; font-size: 12px;} #embedly_twitter_14054401 .tweet-actions{margin-left: 10px;font-size:13px;display:inline-block;width:250px} #embedly_twitter_14054401 .components-above span.tweet-actions{font-size:10px} #embedly_twitter_14054401 .controls{line-height:12px!important} #embedly_twitter_14054401 .tweet-actions a {margin-left:5px} #embedly_twitter_14054401 .tweet-actions a b{font-weight:normal} #embedly_twitter_14054401 .components-above span.tweet-actions a b{vertical-align:baseline;line-height:12px} #embedly_twitter_14054401 .components-above .tweet-text{font-size:13px;vertical-align:baseline} #embedly_twitter_14054401 .tweet-image {float: left; width: 40px;} #embedly_twitter_14054401 .tweet-user-block-image {float: left; width: 48px; height: 48px} #embedly_twitter_14054401 .tweet-row {margin-left: 40px; margin-top: 3px;line-height: 17px;} #embedly_twitter_14054401 .tweet-user-block {margin-left: -40px;} #embedly_twitter_14054401 .stream-item {padding-bottom: 0px; margin-left: 12px;} #embedly_twitter_14054401 .simple-tweet-image img {margin-top: 4px;} #embedly_twitter_14054401 .simple-tweet-content {margin: 0 0 13px 0px; font-size: 14px; min-height:48px;} #embedly_twitter_14054401 .in-reply-to-border {border-color: #EBEBEB; border-style: solid; border-width: 1px 0 0;} #embedly_twitter_14054401 .in-reply-to-text {margin-left: 4px; padding-left: 8px; padding-right: 10px; color: #999; font-size: 12px;} #embedly_twitter_14054401 .tweet-actions i {background: transparent url(http://a2.twimg.com/a/1306889658/phoenix/img/sprite-icons.png) no-repeat;width:15px;height:15px;margin:0 4px -3px 3px;outline: none; text-indent:-99999px;vertical-align:baseline;display:inline-block;position:relative;} #embedly_twitter_14054401 .tweet-actions a.retweet-action i {background-position:-192px 0;} #embedly_twitter_14054401 .tweet-actions a.reply-action i {background-position:0 0;} #embedly_twitter_14054401 .tweet-actions a.favorite-action i {background-position:-32px 0;} </style>
<div class="embedly_tweet_content">
<div class="components-middle">
<p><span class='metadata'><span class='author'><a href='http://twitter.com/RoyOsherove'><img src='http://a0.twimg.com/profile_images/1416811497/Self_organizing_normal.jpg' /></a><strong><a href='http://twitter.com/RoyOsherove'>@RoyOsherove</a></strong><br/>Roy Osherove</span></span>Microsoft announces to mvps at <a href="http://search.twitter.com/search?q=msteched" title="#msteched search Twitter">#msteched</a> that VB6 will be released as open source on codeplex end of june! w00t<br/><span class='embedly_timestamp'><a title='Thu May 19 18:53:02 +0000 2011' href='http://twitter.com/RoyOsherove/status/71287262842859520'>May 19</a> via <a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a></span><span class="tweet-actions"><a href="https://twitter.com/intent/favorite?tweet_id=71287262842859520" class="favorite-action" title="Favorite"><span><i></i><b>Favorite</b></span></a><a href="https://twitter.com/intent/retweet?tweet_id=71287262842859520" class="retweet-action" title="Retweet"><span><i></i><b>Retweet</b></span></a><a href="https://twitter.com/intent/tweet?in_reply_to=71287262842859520" class="reply-action" title="Reply"><span><i></i><b>Reply</b></span></a></span></p>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>Needless to say, that&#8217;s not an announcement that anybody was expecting, but given the talk going on at the time &#8211; and the high-profile people talking about it, there wasn&#8217;t much reason to doubt. Announcing a product that has been dead for years is going open source would certainly be a strategy shift for Microsoft, but does it make any sense? <a href="http://twitter.com/#!/kevindente">Kevin Dente</a> of <a href="http://herdingcode.com/">Herding Code</a> fame certainly thought that Microsoft had better things to release:</p>
<p><!-- http://twitter.com/kevindente/status/71292995185553408 -->
<div id='embedly_twitter_38876430' class='embedly_twitter'>
<style type='text/css'> #embedly_twitter_38876430{background:url(http://a0.twimg.com/images/themes/theme1/bg.png) #9ae4e8; padding:20px;} #embedly_twitter_38876430 p{background:#fff;padding:10px 12px 0px 12px;margin:0;min-height:48px;color:#000;font-size:18px;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_38876430 .embedly_tweet_content{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_38876430 p span.metadata{display:block;width:100%;clear:both;margin-top:0px;height:40px; padding-bottom: 12px;} #embedly_twitter_38876430 p span.metadata span.author{line-height:15px;color:#999;font-size:14px} #embedly_twitter_38876430 p span.metadata span.author a{line-height:15px;font-size:20px;vertical-align:middle} #embedly_twitter_38876430 p span.metadata span.author img{float:left;margin:0 10px 0 0px;width:48px;height:48px} #embedly_twitter_38876430 p a {color: #0000ff; text-decoration:none;} #embedly_twitter_38876430 p a:hover{text-decoration:underline} #embedly_twitter_38876430 .embedly_timestamp{font-size:13px;display:inline-block;margin-top: 5px;} #embedly_twitter_38876430 .components-above span.embedly_timestamp{font-size:10px;margin-top: 1px;line-height:12px} #embedly_twitter_38876430 a {color: #0000ff; text-decoration:none;} #embedly_twitter_38876430 a:hover{text-decoration:underline} #embedly_twitter_38876430 .tweet-screen-name {font-size: 14px; font-weight: bold;} #embedly_twitter_38876430 .tweet-full-name {padding-left: 4px; color: #999; font-size: 12px;} #embedly_twitter_38876430 .tweet-actions{margin-left: 10px;font-size:13px;display:inline-block;width:250px} #embedly_twitter_38876430 .components-above span.tweet-actions{font-size:10px} #embedly_twitter_38876430 .controls{line-height:12px!important} #embedly_twitter_38876430 .tweet-actions a {margin-left:5px} #embedly_twitter_38876430 .tweet-actions a b{font-weight:normal} #embedly_twitter_38876430 .components-above span.tweet-actions a b{vertical-align:baseline;line-height:12px} #embedly_twitter_38876430 .components-above .tweet-text{font-size:13px;vertical-align:baseline} #embedly_twitter_38876430 .tweet-image {float: left; width: 40px;} #embedly_twitter_38876430 .tweet-user-block-image {float: left; width: 48px; height: 48px} #embedly_twitter_38876430 .tweet-row {margin-left: 40px; margin-top: 3px;line-height: 17px;} #embedly_twitter_38876430 .tweet-user-block {margin-left: -40px;} #embedly_twitter_38876430 .stream-item {padding-bottom: 0px; margin-left: 12px;} #embedly_twitter_38876430 .simple-tweet-image img {margin-top: 4px;} #embedly_twitter_38876430 .simple-tweet-content {margin: 0 0 13px 0px; font-size: 14px; min-height:48px;} #embedly_twitter_38876430 .in-reply-to-border {border-color: #EBEBEB; border-style: solid; border-width: 1px 0 0;} #embedly_twitter_38876430 .in-reply-to-text {margin-left: 4px; padding-left: 8px; padding-right: 10px; color: #999; font-size: 12px;} #embedly_twitter_38876430 .tweet-actions i {background: transparent url(http://a2.twimg.com/a/1306889658/phoenix/img/sprite-icons.png) no-repeat;width:15px;height:15px;margin:0 4px -3px 3px;outline: none; text-indent:-99999px;vertical-align:baseline;display:inline-block;position:relative;} #embedly_twitter_38876430 .tweet-actions a.retweet-action i {background-position:-192px 0;} #embedly_twitter_38876430 .tweet-actions a.reply-action i {background-position:0 0;} #embedly_twitter_38876430 .tweet-actions a.favorite-action i {background-position:-32px 0;} </style>
<div class="embedly_tweet_content">
<div class="components-middle">
<p><span class='metadata'><span class='author'><a href='http://twitter.com/kevindente'><img src='http://a2.twimg.com/profile_images/23970552/Avatar_normal.png' /></a><strong><a href='http://twitter.com/kevindente'>@kevindente</a></strong><br/>Kevin Dente</span></span>Instead of VB6 I&#8217;d rather see MS open source IE6. Then at least we could build a standalone version of it.<br/><span class='embedly_timestamp'><a title='Thu May 19 19:15:49 +0000 2011' href='http://twitter.com/kevindente/status/71292995185553408'>May 19</a> via <a href="http://madprops.org/halfwit" rel="nofollow">Halfwit</a></span><span class="tweet-actions"><a href="https://twitter.com/intent/favorite?tweet_id=71292995185553408" class="favorite-action" title="Favorite"><span><i></i><b>Favorite</b></span></a><a href="https://twitter.com/intent/retweet?tweet_id=71292995185553408" class="retweet-action" title="Retweet"><span><i></i><b>Retweet</b></span></a><a href="https://twitter.com/intent/tweet?in_reply_to=71292995185553408" class="reply-action" title="Reply"><span><i></i><b>Reply</b></span></a></span></p>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>Shortly after the initial tweet, <a href="http://www.dougseven.com/">Doug Seven</a>, the Director of Product Management, Visual Studio Tools &amp; Languages, <a href="http://twitter.com/#!/dseven/status/71316722854002688">replied</a> asking Roy Osherove (the original poster) to email him. Hmm, it&#8217;s starting to smell like something odd is going on. A couple of hours later, Doug set the story straight:</p>
<p><!-- http://twitter.com/dseven/status/71352709785198592 -->
<div id='embedly_twitter_11350242' class='embedly_twitter'>
<style type='text/css'> #embedly_twitter_11350242{background:url(http://a0.twimg.com/images/themes/theme1/bg.png) #9ae4e8; padding:20px;} #embedly_twitter_11350242 p{background:#fff;padding:10px 12px 0px 12px;margin:0;min-height:48px;color:#000;font-size:18px;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_11350242 .embedly_tweet_content{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_11350242 p span.metadata{display:block;width:100%;clear:both;margin-top:0px;height:40px; padding-bottom: 12px;} #embedly_twitter_11350242 p span.metadata span.author{line-height:15px;color:#999;font-size:14px} #embedly_twitter_11350242 p span.metadata span.author a{line-height:15px;font-size:20px;vertical-align:middle} #embedly_twitter_11350242 p span.metadata span.author img{float:left;margin:0 10px 0 0px;width:48px;height:48px} #embedly_twitter_11350242 p a {color: #0000ff; text-decoration:none;} #embedly_twitter_11350242 p a:hover{text-decoration:underline} #embedly_twitter_11350242 .embedly_timestamp{font-size:13px;display:inline-block;margin-top: 5px;} #embedly_twitter_11350242 .components-above span.embedly_timestamp{font-size:10px;margin-top: 1px;line-height:12px} #embedly_twitter_11350242 a {color: #0000ff; text-decoration:none;} #embedly_twitter_11350242 a:hover{text-decoration:underline} #embedly_twitter_11350242 .tweet-screen-name {font-size: 14px; font-weight: bold;} #embedly_twitter_11350242 .tweet-full-name {padding-left: 4px; color: #999; font-size: 12px;} #embedly_twitter_11350242 .tweet-actions{margin-left: 10px;font-size:13px;display:inline-block;width:250px} #embedly_twitter_11350242 .components-above span.tweet-actions{font-size:10px} #embedly_twitter_11350242 .controls{line-height:12px!important} #embedly_twitter_11350242 .tweet-actions a {margin-left:5px} #embedly_twitter_11350242 .tweet-actions a b{font-weight:normal} #embedly_twitter_11350242 .components-above span.tweet-actions a b{vertical-align:baseline;line-height:12px} #embedly_twitter_11350242 .components-above .tweet-text{font-size:13px;vertical-align:baseline} #embedly_twitter_11350242 .tweet-image {float: left; width: 40px;} #embedly_twitter_11350242 .tweet-user-block-image {float: left; width: 48px; height: 48px} #embedly_twitter_11350242 .tweet-row {margin-left: 40px; margin-top: 3px;line-height: 17px;} #embedly_twitter_11350242 .tweet-user-block {margin-left: -40px;} #embedly_twitter_11350242 .stream-item {padding-bottom: 0px; margin-left: 12px;} #embedly_twitter_11350242 .simple-tweet-image img {margin-top: 4px;} #embedly_twitter_11350242 .simple-tweet-content {margin: 0 0 13px 0px; font-size: 14px; min-height:48px;} #embedly_twitter_11350242 .in-reply-to-border {border-color: #EBEBEB; border-style: solid; border-width: 1px 0 0;} #embedly_twitter_11350242 .in-reply-to-text {margin-left: 4px; padding-left: 8px; padding-right: 10px; color: #999; font-size: 12px;} #embedly_twitter_11350242 .tweet-actions i {background: transparent url(http://a2.twimg.com/a/1306889658/phoenix/img/sprite-icons.png) no-repeat;width:15px;height:15px;margin:0 4px -3px 3px;outline: none; text-indent:-99999px;vertical-align:baseline;display:inline-block;position:relative;} #embedly_twitter_11350242 .tweet-actions a.retweet-action i {background-position:-192px 0;} #embedly_twitter_11350242 .tweet-actions a.reply-action i {background-position:0 0;} #embedly_twitter_11350242 .tweet-actions a.favorite-action i {background-position:-32px 0;} </style>
<div class="embedly_tweet_content">
<div class="components-middle">
<p><span class='metadata'><span class='author'><a href='http://twitter.com/dseven'><img src='http://a0.twimg.com/profile_images/56993778/dougseven01_normal.jpg' /></a><strong><a href='http://twitter.com/dseven'>@dseven</a></strong><br/>dseven</span></span>The rumors of VB6 going open source are simply not true. <a href="http://search.twitter.com/search?q=msteched" title="#msteched search Twitter">#msteched</a><a href="http://search.twitter.com/search?q=vb" title="#vb search Twitter">#vb</a>6rumor <a href="http://search.twitter.com/search?q=vb" title="#vb search Twitter">#vb</a>6<br/><span class='embedly_timestamp'><a title='Thu May 19 23:13:06 +0000 2011' href='http://twitter.com/dseven/status/71352709785198592'>May 19</a> via web</span><span class="tweet-actions"><a href="https://twitter.com/intent/favorite?tweet_id=71352709785198592" class="favorite-action" title="Favorite"><span><i></i><b>Favorite</b></span></a><a href="https://twitter.com/intent/retweet?tweet_id=71352709785198592" class="retweet-action" title="Retweet"><span><i></i><b>Retweet</b></span></a><a href="https://twitter.com/intent/tweet?in_reply_to=71352709785198592" class="reply-action" title="Reply"><span><i></i><b>Reply</b></span></a></span></p>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>To which, Roy then tried to unset:</p>
<p><!-- http://twitter.com/RoyOsherove/status/71355603611680769 -->
<div id='embedly_twitter_57121698' class='embedly_twitter'>
<style type='text/css'> #embedly_twitter_57121698{background:url(http://a2.twimg.com/profile_background_images/71955358/DSCF0658.jpg) #C0DEED; padding:20px;} #embedly_twitter_57121698 p{background:#fff;padding:10px 12px 0px 12px;margin:0;min-height:48px;color:#000;font-size:18px;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_57121698 .embedly_tweet_content{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} #embedly_twitter_57121698 p span.metadata{display:block;width:100%;clear:both;margin-top:0px;height:40px; padding-bottom: 12px;} #embedly_twitter_57121698 p span.metadata span.author{line-height:15px;color:#999;font-size:14px} #embedly_twitter_57121698 p span.metadata span.author a{line-height:15px;font-size:20px;vertical-align:middle} #embedly_twitter_57121698 p span.metadata span.author img{float:left;margin:0 10px 0 0px;width:48px;height:48px} #embedly_twitter_57121698 p a {color: #0084B4; text-decoration:none;} #embedly_twitter_57121698 p a:hover{text-decoration:underline} #embedly_twitter_57121698 .embedly_timestamp{font-size:13px;display:inline-block;margin-top: 5px;} #embedly_twitter_57121698 .components-above span.embedly_timestamp{font-size:10px;margin-top: 1px;line-height:12px} #embedly_twitter_57121698 a {color: #0084B4; text-decoration:none;} #embedly_twitter_57121698 a:hover{text-decoration:underline} #embedly_twitter_57121698 .tweet-screen-name {font-size: 14px; font-weight: bold;} #embedly_twitter_57121698 .tweet-full-name {padding-left: 4px; color: #999; font-size: 12px;} #embedly_twitter_57121698 .tweet-actions{margin-left: 10px;font-size:13px;display:inline-block;width:250px} #embedly_twitter_57121698 .components-above span.tweet-actions{font-size:10px} #embedly_twitter_57121698 .controls{line-height:12px!important} #embedly_twitter_57121698 .tweet-actions a {margin-left:5px} #embedly_twitter_57121698 .tweet-actions a b{font-weight:normal} #embedly_twitter_57121698 .components-above span.tweet-actions a b{vertical-align:baseline;line-height:12px} #embedly_twitter_57121698 .components-above .tweet-text{font-size:13px;vertical-align:baseline} #embedly_twitter_57121698 .tweet-image {float: left; width: 40px;} #embedly_twitter_57121698 .tweet-user-block-image {float: left; width: 48px; height: 48px} #embedly_twitter_57121698 .tweet-row {margin-left: 40px; margin-top: 3px;line-height: 17px;} #embedly_twitter_57121698 .tweet-user-block {margin-left: -40px;} #embedly_twitter_57121698 .stream-item {padding-bottom: 0px; margin-left: 12px;} #embedly_twitter_57121698 .simple-tweet-image img {margin-top: 4px;} #embedly_twitter_57121698 .simple-tweet-content {margin: 0 0 13px 0px; font-size: 14px; min-height:48px;} #embedly_twitter_57121698 .in-reply-to-border {border-color: #EBEBEB; border-style: solid; border-width: 1px 0 0;} #embedly_twitter_57121698 .in-reply-to-text {margin-left: 4px; padding-left: 8px; padding-right: 10px; color: #999; font-size: 12px;} #embedly_twitter_57121698 .tweet-actions i {background: transparent url(http://a2.twimg.com/a/1306889658/phoenix/img/sprite-icons.png) no-repeat;width:15px;height:15px;margin:0 4px -3px 3px;outline: none; text-indent:-99999px;vertical-align:baseline;display:inline-block;position:relative;} #embedly_twitter_57121698 .tweet-actions a.retweet-action i {background-position:-192px 0;} #embedly_twitter_57121698 .tweet-actions a.reply-action i {background-position:0 0;} #embedly_twitter_57121698 .tweet-actions a.favorite-action i {background-position:-32px 0;} </style>
<div class="embedly_tweet_content">
<div class="components-middle">
<p><span class='metadata'><span class='author'><a href='http://twitter.com/RoyOsherove'><img src='http://a0.twimg.com/profile_images/1416811497/Self_organizing_normal.jpg' /></a><strong><a href='http://twitter.com/RoyOsherove'>@RoyOsherove</a></strong><br/>Roy Osherove</span></span>RT @<a  href="http://twitter.com/dseven" title="dseven on Twitter">dseven</a>: The rumors of VB6 going open source are true. <a href="http://search.twitter.com/search?q=msteched" title="#msteched search Twitter">#msteched</a><a href="http://search.twitter.com/search?q=vb" title="#vb search Twitter">#vb</a>6rumor <a href="http://search.twitter.com/search?q=vb" title="#vb search Twitter">#vb</a>6<br/><span class='embedly_timestamp'><a title='Thu May 19 23:24:36 +0000 2011' href='http://twitter.com/RoyOsherove/status/71355603611680769'>May 19</a> via <a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a></span><span class="tweet-actions"><a href="https://twitter.com/intent/favorite?tweet_id=71355603611680769" class="favorite-action" title="Favorite"><span><i></i><b>Favorite</b></span></a><a href="https://twitter.com/intent/retweet?tweet_id=71355603611680769" class="retweet-action" title="Retweet"><span><i></i><b>Retweet</b></span></a><a href="https://twitter.com/intent/tweet?in_reply_to=71355603611680769" class="reply-action" title="Reply"><span><i></i><b>Reply</b></span></a></span></p>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>It&#8217;s worth pointing out that Roy Osherove currently has a full ten-times the followers that Doug Seven has, meaning his altered retweet was seen by more people (at least initially). For several hours word was going around, and accepted by a number of people who thought Microsoft was actually going to open the code to VB6 (including journalists who were too busy writing articles to do any fact checking) &#8211; all based on one person who made it all up.</p>
<p>Lesson here: be careful about what you re-tweet, it&#8217;s easy to endorse a lie as several people unwittingly did today (<a href="http://twitter.com/#!/blowdart">@blowdart</a> summed it <a href="http://twitter.com/#!/blowdart/status/71370740934524928">rather well</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/05/20/vb6-not-so-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Errors on &#8216;gem install mysql2&#8242;</title>
		<link>http://adamcaudill.com/2011/05/16/errors-on-gem-install-mysql2/</link>
		<comments>http://adamcaudill.com/2011/05/16/errors-on-gem-install-mysql2/#comments</comments>
		<pubDate>Mon, 16 May 2011 05:29:19 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=808</guid>
		<description><![CDATA[<p>On my fresh Ubuntu 11.04 box running Ruby 1.9.2 instead of the standard Ruby 1.8, I ran into some undocumented errors while installing the mysql2 gem. Here&#8217;s what I was seeing:</p> <p>This obviously isn&#8217;t all that helpful, nor did I find anything all that useful on Google &#8211; thankfully the issue is easy to solve. [...]]]></description>
			<content:encoded><![CDATA[<p>On my fresh Ubuntu 11.04 box running Ruby 1.9.2 instead of the standard Ruby 1.8, I ran into some undocumented errors while installing the <code>mysql2</code> gem. Here&#8217;s what I was seeing:</p>
<pre class="brush: plain; title: ; notranslate">$ gem install mysql2
Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
	ERROR: Failed to build gem native extension.

        /usr/bin/ruby1.9.1 extconf.rb
          &lt;internal:lib/rubygems/custom_require&gt;:29:in `require':
          no such file to load -- mkmf (LoadError)
	from &lt;internal:lib/rubygems/custom_require&gt;:29:in `require'
	from extconf.rb:2:in `&lt;main&gt;'

Gem files will remain installed in
  /usr/lib/ruby/gems/1.9.1/gems/mysql2-0.3.2 for inspection.
Results logged to
  /usr/lib/ruby/gems/1.9.1/gems/mysql2-0.3.2/ext/mysql2/gem_make.out</pre>
<p>This obviously isn&#8217;t all that helpful, nor did I find anything all that useful on Google &#8211; thankfully the issue is easy to solve. All that&#8217;s needed is to ensure that the following packages are installed:</p>
<pre class="brush: plain; title: ; notranslate">sudo apt-get install libmysqlclient-dev libmysql-ruby1.9 ruby1.9.1-dev</pre>
<p>Then you can try installing the gem, it should work, hopefully</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/05/16/errors-on-gem-install-mysql2/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>&#8230;and thanks for the fish (Twitter v. Developers)</title>
		<link>http://adamcaudill.com/2011/03/12/and-thanks-for-the-fish-twitter-v-developers/</link>
		<comments>http://adamcaudill.com/2011/03/12/and-thanks-for-the-fish-twitter-v-developers/#comments</comments>
		<pubDate>Sat, 12 Mar 2011 05:20:59 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Business of Software]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[ISV]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=737</guid>
		<description><![CDATA[<p>On March 11, 2011, Twitter said goodbye to some of it&#8217;s most loyal and passionate users.</p> <p>In a message on their <a href="http://groups.google.com/group/twitter-development-talk">Development Talk</a> group entitled &#8220;<a href="http://groups.google.com/group/twitter-development-talk/browse_thread/thread/c82cd59c7a87216a#">consistency and ecosystem opportunities</a>&#8221; &#8211; they make their position clear: we no longer need you. To demonstrate this, let me point out a couple quotes that deserve attention:</p> [...]]]></description>
			<content:encoded><![CDATA[<p>On March 11, 2011, Twitter said goodbye to some of it&#8217;s most loyal and passionate users.</p>
<p>In a message on their <a href="http://groups.google.com/group/twitter-development-talk">Development Talk</a> group entitled &#8220;<a href="http://groups.google.com/group/twitter-development-talk/browse_thread/thread/c82cd59c7a87216a#">consistency and ecosystem opportunities</a>&#8221; &#8211; they make their position clear: we no longer need you. To demonstrate this, let me point out a couple quotes that deserve attention:</p>
<p style="padding-left: 30px;"><em>Twitter will provide the primary mainstream consumer client experience on phones, computers, and other devices by which millions of people access Twitter content (tweets, trends, profiles, etc.), and send tweets.<br />
</em></p>
<p>and this gem:</p>
<p style="padding-left: 30px;"><em>More specifically, developers ask us if they should build client apps that mimic or reproduce the mainstream Twitter consumer client experience.  <strong>The answer is no.</strong></em></p>
<p>Independent, 3rd-party developers have driven the progression of Twitter from an extremely simplistic <a href="http://techcrunch.com/2006/07/15/is-twttr-interesting/">group SMS</a> service, to a massive and near ubiquitous communications system used by millions of people.  As Twitter fought whales and struggled to keep servers running, outside developers were busy building new and better ways of using the service; now that Twitter has gone mainstream and is doubtlessly looking at revenue options, they&#8217;ve told these passionate users that they are no longer needed. The users that evangelized the service, and promoted it in countless ways, suffering through long stretches of downtime remained loyal and energized, pushing the service to become ever more. Twitter, it seems, has no such loyalty to these champions and flag bearers of the service.</p>
<p>If you want to build an application in the Twitter ecosystem now, you are pushed to the outskirts; building integration as a feature of a separate system (such as <a href="http://instagr.am/">instagram</a>), or building for vertical markets which by definition have a far more limited market potential. This is a dangerous time to be invested in an application that relies too much on Twitter; there&#8217;s no telling what or who they will ban next.</p>
<p>Twitter did make it fairly clear that existing applications can &#8220;continue to serve your user base&#8221; - there was an air of a threat in the statement, and given their willingness to <a href="http://techcrunch.com/2011/02/18/twitter-suspends-ubermedia-clients-ubertwitter-and-twidroyd-for-violating-policies/">ban a major player</a>, I can&#8217;t help but think that they will be looking for chances to kill off other clients, to further solidify their control of what users see.</p>
<p style="padding-left: 30px;"><em>If you are an existing developer of client apps, you can continue to serve your user base, but we will be holding you to high standards to ensure you do not violate users’ privacy, that you provide consistency in the user experience, and that you rigorously adhere to all areas of our Terms of Service.</em></p>
<p>At best Twitter has alienated passionate users, at worst they have inspired new competition with the goal of being what many of these users wanted Twitter to become, before they shifted their strategy away from the core service, to controlling and enforcing a sub-par user experience.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/03/12/and-thanks-for-the-fish-twitter-v-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bbPress &amp; WordPress 3.1 (Registration Issues)</title>
		<link>http://adamcaudill.com/2011/03/06/bbpress-wordpress-3-1-registration-issues/</link>
		<comments>http://adamcaudill.com/2011/03/06/bbpress-wordpress-3-1-registration-issues/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 08:39:49 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[bbPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=733</guid>
		<description><![CDATA[<p>While building a new website for a small ISV, I was asked to integrate a forum &#8211; should be simple I thought, I&#8217;ll just use WordPress as a CMS and <a href="http://bbpress.org/">bbPress</a>. Simple? Not quite.</p> <p>To make things easier, I used <a href="http://www.pagelines.com/themes/platformpro/">Platform Pro</a> by Pagelines (a great platform IMHO) and so used their &#8220;deep [...]]]></description>
			<content:encoded><![CDATA[<p>While building a new website for a small ISV, I was asked to integrate a forum &#8211; should be simple I thought, I&#8217;ll just use WordPress as a CMS and <a href="http://bbpress.org/">bbPress</a>. Simple? Not quite.</p>
<p>To make things easier, I used <a href="http://www.pagelines.com/themes/platformpro/">Platform Pro</a> by Pagelines (a great platform IMHO) and so used their &#8220;deep integration&#8221; <a href="http://www.pagelines.com/docs/bbpress-forums">instructions</a> (while they are intended for Platform Pro users, the steps are virtually identical for all other setups). While the setup went quite smoothly, it wasn&#8217;t until it came time to test user registrations that the issue came up: when a new user tried to register they would receive an error stating that &#8220;email is required,&#8221; even if they had entered a valid email address. This effectively made it impossible for users to register, and thus made the forum useless.</p>
<p>After a bit of research, it looks like there is a conflict between newer versions of WordPress (3.0+) and bbPress 1.0.2 (I&#8217;m not sure if older versions have the same issue, but I would assume so). The fix for this is actually quite simple: install a <a href="http://bbpress.org/plugins/topic/zaerl-wordpress-3-integration/">plugin</a>. The plugin itself is quite simple &#8211; containing only around a half-dozen executable lines of code, and works around the issue with a simple hack.</p>
<p>Unfortunately, the plugin description is rather vague and required a fair bit of research to identify as the fix, and the official documentation makes no reference to the issue or that this plugin can be used as a workaround.</p>
<p>Overall, a simple workaround but a major issue if you don&#8217;t notice that it&#8217;s broke (as is quite easy to do).</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/03/06/bbpress-wordpress-3-1-registration-issues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails 3 &amp; Dreamhost PS</title>
		<link>http://adamcaudill.com/2011/01/28/rails-3-dreamhost-ps/</link>
		<comments>http://adamcaudill.com/2011/01/28/rails-3-dreamhost-ps/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 07:47:01 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[DreamHost]]></category>
		<category><![CDATA[Hosting]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=717</guid>
		<description><![CDATA[<p>I recently had an idea for a small web application, and seeing as I&#8217;ve not spent as much time as I&#8217;ve wanted to using <a href="http://rubyonrails.org/">Rails</a> &#8211; I opted to build it the latest version of Rails. A decision that caused far more grief than I expected.</p> <p>If you are using <a href="http://www.dreamhost.com/r.cgi?485850">Dreamhost&#8217;s</a> PS offering (a managed [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had an idea for a small web application, and seeing as I&#8217;ve not spent as much time as I&#8217;ve wanted to using <a href="http://rubyonrails.org/">Rails</a> &#8211; I opted to build it the latest version of Rails. A decision that caused far more grief than I expected.</p>
<p>If you are using <a href="http://www.dreamhost.com/r.cgi?485850">Dreamhost&#8217;s</a> PS offering (a managed VPS for those that don&#8217;t know), the seemingly simple task of getting a Rails 3 application up and running is actually quite complex. The root cause of this is that Dreamhost&#8217;s OS image is based on Debian <a href="http://www.debian.org/releases/etch/">etch</a>, which was released in April 2009 and has since been replaced; which means etch has become fairly outdated.</p>
<p>Here&#8217;s the process I used, and so far it seems to be working quite well:</p>
<p><strong>Domain Setup:</strong></p>
<p>When adding your domain to the Dreamhost panel, you&#8217;ll want to enable <a href="http://wiki.dreamhost.com/Passenger">Passenger</a>.</p>
<p><img src="http://adamcaudill.com/files/2011-01-28_0048.png" alt="" width="409" height="217" /></p>
<p>Once your application is uploaded to the server, you&#8217;ll be greeted with a particularly unhelpful error message (something like &#8220;<code>uninitialized constant Bundler</code>&#8220;) from Passenger (or perhaps just a 500 error page).</p>
<p><strong>Server Updates:</strong></p>
<p>This is where the work starts, and gets somewhat ugly. As a warning, it&#8217;s quite possible that you could damage your configuration doing this; though thankfully you can <a href="https://panel.dreamhost.com/index.cgi?tree=vserver.reboot&amp;">restore</a> your server to a working state within a few minutes from the Dreamhost panel should something go wrong. You&#8217;ll also need to have an &#8220;<a href="https://panel.dreamhost.com/index.cgi?tree=vserver.adminusers&amp;">admin user</a>&#8221; for this task, as much of what needs to be done has to be done as root.</p>
<p>First step: Get your PS up to date; even after performing a restore on my server, there were a number of updates that are available to be installed. So let&#8217;s start off by getting those out of the way.</p>
<pre class="brush: plain; title: ; notranslate">sudo apt-get update
sudo apt-get upgrade
sudo apt-get -f install</pre>
<p>Once you get past those three commands, the next step is to update SQLite to the latest version, as the version Dreamhost uses is quite old and won&#8217;t work with Rails 3.0 (well, to be accurate it won&#8217;t work with the latest version of sqlite3-ruby, which is the default database provider for Rails 3).</p>
<pre class="brush: plain; title: ; notranslate">wget http://www.sqlite.org/sqlite-autoconf-3070400.tar.gz
tar zxvf sqlite-autoconf-3070400.tar.gz
cd sqlite-autoconf-3070400
sudo ./configure --bindir=/usr/bin --libdir=/usr/lib
sudo make
sudo make install</pre>
<p>If you don&#8217;t update SQLite you&#8217;ll get an error like this:</p>
<pre class="brush: plain; title: ; notranslate">sudo gem install sqlite3
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3:
	ERROR: Failed to build gem native extension.

/usr/bin/ruby1.8 extconf.rb
checking for sqlite3.h... yes
checking for sqlite3_libversion_number() in -lsqlite3... yes
checking for rb_proc_arity()... no
checking for sqlite3_initialize()... no
sqlite3-ruby only supports sqlite3 versions 3.6.16+, please upgrade!
*** extconf.rb failed ***</pre>
<p>or if you install the updated version, but don&#8217;t force it to <code>/usr/lib</code> you&#8217;ll get an error like this:</p>
<pre class="brush: plain; title: ; notranslate">sudo gem install sqlite3
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3:
	ERROR: Failed to build gem native extension.

/usr/bin/ruby1.8 extconf.rb
checking for sqlite3.h... yes
checking for sqlite3_libversion_number() in -lsqlite3... no
sqlite3 is missing. Try 'port install sqlite3 +universal' or 'yum
install sqlite3-devel'
*** extconf.rb failed *** </pre>
<p>Once that is taken care of SQLite, the rest is easy.</p>
<pre class="brush: plain; title: ; notranslate">sudo gem update</pre>
<p>At this point if you visit your new Rails site, it <em>should</em> be working!</p>
<p>Notes:</p>
<ol>
<li>I&#8217;ve not tested this extensively, and I&#8217;ve no idea if this breaks anything. All I can say for certain, if that all of <em>my</em> sites still work, but your mileage may vary. &lt;Disclaimer /&gt;</li>
<li>I was a fairly early Dreamhost PS adopter, and part way through this process I reset my server to get it back to a clean state. After resetting, I noticed some differences with the behavior of <code>apt-get</code> (404s on <code>update</code> and <code>upgrade</code> are gone), so for other early adopters it may be necessary to perform a reset to get your servers configuration in-sync with the latest official setup.</li>
<li>I can&#8217;t say for a fact that this is completely necessary, though you&#8217;ll likely need to selectively update a few packages if you skip this step. Also, for me, <code>gem</code> was broken until I ran <code>sudo apt-get -f install</code>.</li>
<li>Special thanks to <a href="http://matthewjlittle.com/">Matt</a> for helping me get this working; troubleshooting the SQLite install was more than a little time consuming.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/01/28/rails-3-dreamhost-ps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading Windows 7 Pro VL</title>
		<link>http://adamcaudill.com/2010/06/18/upgrading-windows-7-pro-vl/</link>
		<comments>http://adamcaudill.com/2010/06/18/upgrading-windows-7-pro-vl/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 03:42:05 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MSDN]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=600</guid>
		<description><![CDATA[<p>While performing some testing on a Windows 7 Professional workstation running a VL build from MSDN found that a feature I needed was missing &#8211; the new <a href="http://blogs.msdn.com/b/rds/archive/2009/07/01/using-multiple-monitors-in-remote-desktop-session.aspx">Multi-Monitor RDP</a> support. After a little <a href="http://windows.microsoft.com/en-us/windows7/Remote-Desktop-Connection-frequently-asked-questions#">research</a> I found that only the Ultimate and Enterprise editions support this feature; which thanks to Windows 7&#8242;s <a href="http://en.wikipedia.org/wiki/Windows_Anytime_Upgrade">Anytime Upgrade</a> [...]]]></description>
			<content:encoded><![CDATA[<p>While performing some testing on a Windows 7 Professional workstation running a VL build from MSDN found that a feature I needed was missing &#8211; the new <a href="http://blogs.msdn.com/b/rds/archive/2009/07/01/using-multiple-monitors-in-remote-desktop-session.aspx">Multi-Monitor RDP</a> support. After a little <a href="http://windows.microsoft.com/en-us/windows7/Remote-Desktop-Connection-frequently-asked-questions#">research</a> I found that only the Ultimate and Enterprise editions support this feature; which thanks to Windows 7&#8242;s <a href="http://en.wikipedia.org/wiki/Windows_Anytime_Upgrade">Anytime Upgrade</a> feature I assumed this would be no issue.</p>
<p>But, it was an issue.</p>
<p>It turns out that the build of Windows 7 I was using was missing <code>WindowsAnytimeUpgradeUI.exe</code> and the other related files needed to make the Anytime Upgrade work &#8211; and copying the files from another box doesn&#8217;t work. It seems this build simply can&#8217;t be upgraded in this fashion. So I tried a few other tricks, hoping to find something that would work:</p>
<ul>
<li>Reactivate Windows with an Ultimate key; fails with an error indicating that a Professional key is required.</li>
<li>Run Ultimate edition installer from Windows; fails with <a href="http://adamcaudill.com/files/2010-06-18_0332.png" rel="lightbox">this error</a> indicating that you can&#8217;t perform edition upgrades.</li>
</ul>
<p>So being stubborn and determined not to re-install Windows to make this feature work, I started looking for other options. Thanks to a hack for <a href="http://www.gmtaz.com/how-to-upgrade-windows-7-rc-ultimate-to-rtm-enterprise/comment-page-1/">upgrading the RC builds to Final</a>, I found what I needed.</p>
<p>I edited the <code>EditionID</code> and <code>ProductName</code> to reflect Ultimate instead of Professional, rebooted, and then ran the Ultimate installer from within Windows. This time the installer ran without issue and after an hour and a couple reboots it was done. This in-place upgrade/repair procedure allows you to jump to a different edition with fairly little pain. A couple of Windows settings needed to be corrected (primarily display related) and Visual Studio 2010 had to be re-installed, though otherwise everything worked just as it did before.</p>
<p>This is the only method for upgrading these Windows 7 builds that I&#8217;ve found, the only other option is to re-install Windows from scratch.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2010/06/18/upgrading-windows-7-pro-vl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android &amp; Windows 7 64bit</title>
		<link>http://adamcaudill.com/2010/04/19/android-windows-7-64bit/</link>
		<comments>http://adamcaudill.com/2010/04/19/android-windows-7-64bit/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 05:13:56 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=572</guid>
		<description><![CDATA[<p>Setting up the Android SDK on Windows 7 64bit, with a 64bit JDK / JRE is a bit less straightforward than one would expect, thankfully though the solution is quite simple. There are two settings that need to be adjusted to make this work &#8211; otherwise you&#8217;ll get an error indicating that Java can&#8217;t be [...]]]></description>
			<content:encoded><![CDATA[<p>Setting up the Android SDK on Windows 7 64bit, with a 64bit JDK / JRE is a bit less straightforward than one would expect, thankfully though the solution is quite simple. There are two settings that need to be adjusted to make this work &#8211; otherwise you&#8217;ll get an error indicating that Java can&#8217;t be found.</p>
<p>Step 1: Modify your <code>PATH</code> to include the <code>bin</code> folder of the JRE. Mine looks like this:</p>
<p style="padding-left: 30px;"><code>C:\Program Files\Java\jre6\bin</code></p>
<p>Step 2: Set the <code>ANDROID_SWT</code> variable (you&#8217;ll probably need to add it) to the <code>\tools\lib\x86_64</code> folder of the Android SDK. Mine looks like this:</p>
<p style="padding-left: 30px;"><code>C:\Android\SDK\tools\lib\x86_64</code></p>
<p>With these two changes, everything seems to work as expected. Why this is required on 64bit but not 32bit I&#8217;m not sure, but this does seem to solve the problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2010/04/19/android-windows-7-64bit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

