<?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 Development</title>
	<atom:link href="http://adamcaudill.com/tag/software-development/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>Masking Credit Cards for PCI</title>
		<link>http://adamcaudill.com/2011/10/20/masking-credit-cards-for-pci/</link>
		<comments>http://adamcaudill.com/2011/10/20/masking-credit-cards-for-pci/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 20:14:40 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Code Samples]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[PCI]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tips and Tricks]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=1004</guid>
		<description><![CDATA[<p>PCI DSS, the security standard for companies that handle credit cards, defines a number of <a href="https://www.pcisecuritystandards.org/pdfs/pci_audit_procedures_v1-1.pdf">rules</a> as to how credit cards are handled. One of those rules, 3.3, is defined as follows:</p> <p style="padding-left: 30px;">Mask PAN when displayed (the first six and last four digits are the maximum number of digits to be displayed)</p> [...]]]></description>
			<content:encoded><![CDATA[<p>PCI DSS, the security standard for companies that handle credit cards, defines a number of <a href="https://www.pcisecuritystandards.org/pdfs/pci_audit_procedures_v1-1.pdf">rules</a> as to how credit cards are handled. One of those rules, 3.3, is defined as follows:</p>
<p style="padding-left: 30px;"><em>Mask PAN when displayed (the first six and last four digits are the maximum number of digits to be displayed)</em></p>
<p>So based on this requirement I assumed that the code to do this would be common and widely available; much to my surprise there are rather few samples that do this, and of those I found they only showed the last four (which when you are handling a lot of credit cards, searching for an account by the last four isn&#8217;t all that helpful) and were often rather fragile.</p>
<p>So I whipped this up, hopefully it&#8217;ll be useful to others.</p>
<div id="gist-1674453" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">public</span> <span class="k">static</span> <span class="kt">string</span> <span class="nf">MaskCreditCard</span><span class="p">(</span><span class="kt">string</span> <span class="k">value</span><span class="p">)</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;<span class="k">const</span> <span class="kt">string</span> <span class="n">PATTERN</span> <span class="p">=</span> <span class="s">@&quot;\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|&quot;</span> <span class="p">+</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="s">@&quot;6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|&quot;</span> <span class="p">+</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="s">@&quot;[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})\b&quot;</span><span class="p">;</span></div><div class='line' id='LC6'>&nbsp;</div><div class='line' id='LC7'>&nbsp;&nbsp;<span class="n">var</span> <span class="n">replace</span> <span class="p">=</span> <span class="n">Regex</span><span class="p">.</span><span class="n">Replace</span><span class="p">(</span><span class="k">value</span><span class="p">,</span> <span class="n">PATTERN</span><span class="p">,</span> <span class="k">new</span> <span class="n">MatchEvaluator</span><span class="p">(</span><span class="n">match</span> <span class="p">=&gt;</span></div><div class='line' id='LC8'>&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">var</span> <span class="n">num</span> <span class="p">=</span> <span class="n">match</span><span class="p">.</span><span class="n">ToString</span><span class="p">();</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="n">num</span><span class="p">.</span><span class="n">Substring</span><span class="p">(</span><span class="m">0</span><span class="p">,</span> <span class="m">6</span><span class="p">)</span> <span class="p">+</span> <span class="k">new</span> <span class="kt">string</span><span class="p">(</span><span class="sc">&#39;*&#39;</span><span class="p">,</span> <span class="n">num</span><span class="p">.</span><span class="n">Length</span> <span class="p">-</span> <span class="m">10</span><span class="p">)</span> <span class="p">+</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">num</span><span class="p">.</span><span class="n">Substring</span><span class="p">(</span><span class="n">num</span><span class="p">.</span><span class="n">Length</span> <span class="p">-</span> <span class="m">4</span><span class="p">);</span></div><div class='line' id='LC12'>&nbsp;&nbsp;<span class="p">}));</span></div><div class='line' id='LC13'>&nbsp;</div><div class='line' id='LC14'>&nbsp;&nbsp;<span class="k">return</span> <span class="n">replace</span><span class="p">;</span></div><div class='line' id='LC15'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/1674453/570a38b70ef4441988a12fe282a64b81bde8be35/gistfile1.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/1674453#file_gistfile1.cs" style="float:right;margin-right:10px;color:#666">gistfile1.cs</a>
            <a href="https://gist.github.com/1674453">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<p>The regex pattern is from <a href="http://www.regular-expressions.info/creditcard.html">Regular-Expressions.info</a> and should detect most major cards.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/10/20/masking-credit-cards-for-pci/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy 20th birthday Visual Basic!</title>
		<link>http://adamcaudill.com/2011/05/21/happy-20th-birthday-visual-basic/</link>
		<comments>http://adamcaudill.com/2011/05/21/happy-20th-birthday-visual-basic/#comments</comments>
		<pubDate>Sat, 21 May 2011 05:50:19 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=826</guid>
		<description><![CDATA[<p>Today I saw a post on Facebook by a friend of mine, <a href="http://inotifythoughtschanging.net/blog/">Anthony Green</a>, about writing his first blog post as a Microsoft employee (he has a personal blog as well, unfortunately he&#8217;s not written anything since 2008) &#8211; when I saw the title, I couldn&#8217;t believe it was 20 years already &#8211; seems just yesterday [...]]]></description>
			<content:encoded><![CDATA[<p>Today I saw a post on Facebook by a friend of mine, <a href="http://inotifythoughtschanging.net/blog/">Anthony Green</a>, about writing his first blog post as a Microsoft employee (he has a personal blog as well, unfortunately he&#8217;s not written anything since 2008) &#8211; when I saw the title, I couldn&#8217;t believe it was 20 years already &#8211; seems just yesterday that I wrote about its <a href="http://adamcaudill.com/2006/05/27/happy-belated-birthday-vb/">15th birthday</a>:</p>
<p><a href="http://blogs.msdn.com/b/vbteam/archive/2011/05/20/happy-20th-birthday-visual-basic.aspx">Happy 20th Birthday Visual Basic!</a></p>
<p>My, what a journey it&#8217;s been. Almost fifteen years ago I randomly bought a copy of &#8220;Visual Basic 5: Deluxe Learning Edition&#8221; &#8211; I was just 15 at the time and wanted a new hobby, and writing software seemed like it would be fun. In those early days, I had no idea what career I would choose, and really didn&#8217;t intend for software development to become the dominant force in my life &#8211; I just wanted a better, more productive way to spend my time during the summer.</p>
<p>In the years that have went by, I became passionate about the field, and all it encompasses (possible obsessed, if you believe my wife) &#8211; it&#8217;s been the driving force in my life. Today, I manage a team of 6 developers, and have a fun start-up with some friends (that someday won&#8217;t cost me money every month) &#8211; and all because I bought that book. Overall, I have a lot to thank VB for, it really did get me started in this field.</p>
<p>Today though, my language of choice has moved on to newer options &#8211; I prefer bleeding technologies when I can use them &#8211; but VB will always have a place in my heart, and I&#8217;ll always follow its progress as it continues to transform and adapt to an ever-changing world. As the most popular .NET language (contrary to what many of the C# developers think), it plays a vital role in the development of the framework and the ecosystem.</p>
<p>In the conversations I&#8217;ve had with Anthony about the future of the language, I greatly look forward to writing about its 25th birthday; I expect those will be exciting times for the language and the entire .NET ecosystem.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/05/21/happy-20th-birthday-visual-basic/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>You can&#8217;t fix stupid&#8230;</title>
		<link>http://adamcaudill.com/2011/05/10/you-cant-fix-stupid/</link>
		<comments>http://adamcaudill.com/2011/05/10/you-cant-fix-stupid/#comments</comments>
		<pubDate>Tue, 10 May 2011 06:06:05 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Business of Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=760</guid>
		<description><![CDATA[<p>For those outside of the IT field, developers are looked at as miracle workers &#8211; through us, business leaders think anything is possible (and they often see no reason why we can&#8217;t work our latest miracle by the next morning). In reality though, we do work miracles; we save companies vast amounts of money every [...]]]></description>
			<content:encoded><![CDATA[<p>For those outside of the IT field, developers are looked at as miracle workers &#8211; through us, business leaders think anything is possible (and they often see no reason why we can&#8217;t work our latest miracle by the next morning). In reality though, we do work miracles; we save companies vast amounts of money every year through increased worker efficiency and automation, we enable new lines of business that wouldn&#8217;t be possible otherwise, and reduce energy costs because we keep the office lights turned off. Well, that&#8217;s more or less how they see us.</p>
<p>But for all of the wonders we are responsible for, there is one thing we can&#8217;t do (no matter what amazing powers some executives <em>think</em> we have to make them look better or earn them more bonuses):</p>
<p><strong>You can&#8217;t fix stupid.</strong></p>
<p>I&#8217;ve often described development as being a professional problem solver, and we are often tasked with rather challenging problems to solve. Sometimes the problems are purely technical &#8211; making something new possible that previously was impracticable or even impossible, sometimes it&#8217;s all about efficiency, other times it&#8217;s about image and controlling how people see a company. When the problem is the user though, you know you&#8217;re in for a rough day.</p>
<p>I was recently given such a task &#8211; the users weren&#8217;t listening to their supervisors and they wanted the software to force these users to do whatever it was that management told them they should be doing. I was given less than a week to find ways to make people that don&#8217;t want to work, work.</p>
<p>Basically, users fall into three simple categories:</p>
<ul>
<li>Power Users &#8211; these users understand software, and require little, if any instruction &#8211; more than anything, you give these users a tool and stay out of their way.</li>
<li>Average Users &#8211; odds are, your mother or father falls into this category. They understand enough to get by, and with a little instruction they should have no trouble.</li>
<li>Idiots* &#8211; odds are, you work with one of these users. You lead them by they hand, and show them exactly what to do &#8211; just in time for the boss to walk by and praise them for doing a good job (and 10 minutes later you find them playing in traffic, somehow defying <a href="http://en.wikipedia.org/wiki/Survival_of_the_fittest">Darwin</a> in the process).</li>
</ul>
<p>For users of the last category, there&#8217;s just not much you can do.</p>
<p>I always do my due diligence while building software; doing all I can to make it simple to use, flexible, and forgiving of user error. I always use extensive data validation, carefully worded instructions and dialogs, and do my best to follow the various best-practice guides for UI and UX; yet for all this effort and design &#8211; I can&#8217;t write software that thinks for people or makes judgement calls based on business rules that only they know (probably because they make it up as they go).</p>
<p>No matter how helpful or intelligent an application is, or how idiot-proof you think you&#8217;ve made it, reality is that you simply can&#8217;t fix stupid &#8211; you can&#8217;t take an incompetent person that refuses to think for themselves and turn them to into a great, productive asset. After years in this industry (which has made me just a little cynical [in the way that <a href="http://en.wikipedia.org/wiki/Sun">Sol</a> only seems little when compared to <a href="http://en.wikipedia.org/wiki/Betelgeuse">Betelgeuse</a>]), I&#8217;ve come to understand something rather disturbing: idiots keep getting better.</p>
<p style="padding-left: 30px;"><em>Somewhere, right now, idiots are working to build even better idiots &#8211; and that&#8217;s a really scary thought.</em></p>
<p>We can make a user more efficient by automating tasks, providing better information, or helping to manage their workload &#8211; what we can&#8217;t do is make them smarter, make them think through their actions, or force them to do what their managers tell them. Yet we are, at least on occasion, asked to fix this problem. <span style="font-family: 'Times New Roman'; line-height: normal; font-size: medium;"> </span></p>
<p style="display: inline !important;">Despite our best efforts as professionals and passionate developers; if a user won&#8217;t think &#8211; we just can&#8217;t fix it.</p>
<p>&nbsp;</p>
<p><span style="font-size: x-small;">* &#8211; I define an idiot about the same way I do someone that&#8217;s lazy; they have no medical issues or legitimate handicap. They just don&#8217;t want to think or work (probably both). Those that are handicap or have learning or medical issues are a very different story and not the target of this article; I donated time and services to charities that served the disabled for a number of years, I highly recommend that all developers do it &#8211; it&#8217;s a very rewarding experience to see your work make somebody&#8217;s life better and it teaches you quite a bit about how people interact with technology.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2011/05/10/you-cant-fix-stupid/feed/</wfw:commentRss>
		<slash:comments>1</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>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>
		<item>
		<title>What&#8217;s your Code Legacy?</title>
		<link>http://adamcaudill.com/2009/12/20/whats-your-code-legacy/</link>
		<comments>http://adamcaudill.com/2009/12/20/whats-your-code-legacy/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 03:42:59 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=526</guid>
		<description><![CDATA[<p>When you move on to your next challenge how will those that inherit your code think of you? Noble or notorious, innovator or insane? This is a question that all developers should ask themselves frequently; though too few ever do. You should always write with the assumption that someday a new developer will take over [...]]]></description>
			<content:encoded><![CDATA[<p>When you move on to your next challenge how will those that inherit your code think of you? Noble or notorious, innovator or insane? This is a question that all developers should ask themselves frequently; though too few ever do. You should always write with the assumption that someday a new developer will take over your code, and they will question every decision and assumption you&#8217;ve made. When this happens, what will they think of you?</p>
<p>Perhaps I&#8217;m more aware of this because I maintain an internally developed shared library that my company uses in every application; but regardless of the scope of the project you should always assume that someday you will hand the project off. Many developers think little about what happens to their code after it passes on to another; what other developers will have to deal with, or how their efforts will be perceived.</p>
<p>When I&#8217;m training a new developer there are a few points I try to reinforce as much as possible:</p>
<ol>
<li>Code is only good if other developers can work on it without extensive training. If it takes days or weeks of introduction to get a new developer up to speed, then you&#8217;ve done something wrong<sup>1</sup>.</li>
<li>Clever solutions are no better than an ugly hack if it&#8217;s not clear what you are doing. If the code isn&#8217;t clear then it&#8217;s not maintainable, if it&#8217;s not maintainable then it&#8217;s junk.</li>
<li>Assume you&#8217;ll be hit by a bus. Always write code with the assumption that you won&#8217;t have the opportunity to cleanly pass the code off to a new maintainer. Never assume that you&#8217;ll have time to come back and clean things up later.</li>
<li>Always perform design reviews, no matter the size of the project<sup>2</sup>. Once you have a design in mind, talk it through with a at least two other developers. Just because you think it&#8217;s clean and clear doesn&#8217;t mean that others will see it that way as well.</li>
<li>Be consistent, always. I&#8217;ve seen more projects ruined by people doing things &#8220;their way&#8221; than anything else. Match style and design when working on an existing project. Be careful when adding new techniques, technologies, or methodologies to an existing project; unless you are willing to update the entire code-base, you can easily create a minefield without realizing it.</li>
</ol>
<p>If you want your work to be seen positively after you move on, start thinking about your heirs today. The opinion they have of you will be almost entirely based on what they see in your code &#8211; not the stories or memories left behind.</p>
<p><sup>1</sup> &#8211; There are always exceptions; these are generalized guidelines, not hard and fast rules.<br />
<sup>2</sup> &#8211; This includes &#8220;throw away&#8221; projects, many projects that are intended to have a short life end up living far longer than intended. This is the most likely place that your heirs will find code that makes them question the quality of your work.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2009/12/20/whats-your-code-legacy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bbPress: Is the end near?</title>
		<link>http://adamcaudill.com/2009/12/16/bbpress-is-the-end-near/</link>
		<comments>http://adamcaudill.com/2009/12/16/bbpress-is-the-end-near/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 21:39:03 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[bbPress]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=530</guid>
		<description><![CDATA[<p>I&#8217;ve been a fan of bbPress for quite some time; I&#8217;ve even contributed code to the project. For those that aren&#8217;t familiar with it, bbPress is an open-source forum system written in PHP. It&#8217;s fast, lightweight, easy to install and even easier to use. It also scales, quite well.</p> <p>bbPress was originally written to power the support [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a fan of bbPress for quite some time; I&#8217;ve even contributed code to the project. For those that aren&#8217;t familiar with it, bbPress is an open-source forum system written in PHP. It&#8217;s fast, lightweight, easy to install and even easier to use. It also scales, quite well.</p>
<p>bbPress was originally written to power the support forums WordPress.org, which get quite a bit of traffic. Later, it was released as a separate project. While it doesn&#8217;t have nearly the feature set found in more popular systems such as vBulletin or phpBB; it makes up for it in simplicity. It&#8217;s designed to be conversation-centered, where the clear focus is on what people are saying, not the bells and whistles provided by the software.</p>
<p>I&#8217;ve used it for a couple sites and couldn&#8217;t be more pleased; though now I fear the end may be near.</p>
<p><a href="http://automattic.com/">Automattic</a>, the company behind WordPress.com (and <a href="http://bbpress.org/blog/2009/04/talkpress-and-bbpress/">ListPress.com</a>) has <a href="http://bbpress.org/forums/topic/future-of-bbpress">committed</a> to supporting the project; though primarily in context to its role in the WordPress world. bbPress as a separate product has so much potential, though it seems Automattic has little interest in this; instead the interest seems to be in making bbPress just another add-on for WordPress.</p>
<p>At one point there was a lot of excitement and interest surrounding bbPress, though for a project like this to succeed you need input from the community, you need an open and fast paced development process. Unfortunately for bbPress, it had no such process. There were people who had the skill, time, and interest to lead the project and make it a success; but they were pushed away and the project was allowed to stagnate.</p>
<p>Today, there is <a href="http://bbpress.org/blog/2009/12/1-1-feature-poll/">some activity</a> going on, and I&#8217;m glad to see that it won&#8217;t fade away completely; though I see little chance that it will live up to what it could have been. I have a lot of respect for <a href="http://ma.tt/">Matt</a> and Automattic; they&#8217;re very successful and build great products; but they could have done so much more.</p>
<p>bbPress will go on I&#8217;m sure; though I believe only as a shadow of what it could have been. Though maybe Matt will prove me wrong, I certainly hope so.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2009/12/16/bbpress-is-the-end-near/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Start-up Tools: Open Atrium</title>
		<link>http://adamcaudill.com/2009/07/18/start-up-tools-open-atrium/</link>
		<comments>http://adamcaudill.com/2009/07/18/start-up-tools-open-atrium/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 18:19:31 +0000</pubDate>
		<dc:creator>Adam Caudill</dc:creator>
				<category><![CDATA[Business of Software]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[ISV]]></category>
		<category><![CDATA[Micro-ISV]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://adamcaudill.com/?p=459</guid>
		<description><![CDATA[<p>When it comes to small business project management, <a href="http://www.basecamphq.com/">Basecamp</a> by <a href="http://www.37signals.com/">37signals</a> has been the king of the hill for some time. Now though, there is an exciting new player in the field: <a href="http://openatrium.com/">Open Atrium</a>. It&#8217;s a <a href="http://drupal.org/">Drupal</a> based open source project management system somewhat like Basecamp, though with many more features.</p> [...]]]></description>
			<content:encoded><![CDATA[<p>When it comes to small business project management, <a href="http://www.basecamphq.com/">Basecamp</a> by <a href="http://www.37signals.com/">37signals</a> has been the king of the hill for some time. Now though, there is an exciting new player in the field: <a href="http://openatrium.com/">Open Atrium</a>. It&#8217;s a <a href="http://drupal.org/">Drupal</a> based open source project management system somewhat like Basecamp, though with many more features.</p>
<p style="text-align: center;"><img class="aligncenter" title="Atrium Logo" src="http://adamcaudill.com/files/2009-07-18_1345.png" alt="" width="139" height="49" /></p>
<p>Open Atrium is new on the scene, with beta 1 being released just 4 days ago &#8211; though it&#8217;s already rather polished and seems to work well. While there are some hiccups with the installer and a disappointing lack of documentation, it&#8217;s still very easy to install and takes only a few minutes to get running.</p>
<p>It has all the major <a href="http://openatrium.com/features">features</a> that you would expect, plus a few extras such as a twitter-like shoutbox system. Here are the highlights:</p>
<ul>
<li>Blogging</li>
<li>Calendar</li>
<li>Dashboard</li>
<li>Document Storage</li>
<li>Task Management</li>
</ul>
<p>Being open source and self-hosted adds some nice benefits; unlimited customization, full control of your data, and my favorite: can be installed on a non-public web server. Having you project management system sit behind a VPN is a great way to avoid <a href="http://www.techcrunch.com/2009/07/14/in-our-inbox-hundreds-of-confidential-twitter-documents/">data leaks and embarrassments</a>.</p>
<p>I&#8217;m still debating which is best, Basecamp or Open Atrium &#8211; but if you want to save some money, Open Atrium is worth looking into.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamcaudill.com/2009/07/18/start-up-tools-open-atrium/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

