<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Coding the Wheel</title>
    <description>Building the collective hamster wheel, one line of code at a time. Programming - Usabilty - Best Practices - Rants and Raves</description>
    <link>http://www.codingthewheel.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <copyright>Copyright (c) 2008 www.HellElmer.com</copyright>
    <language>en-us</language>
    <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
    <item>
      <title>Why Bing Is the Wrong Name</title>
      <link>http://www.codingthewheel.com/archives/bing-they-shouldve-googled-a-better-name</link>
      <guid>http://www.codingthewheel.com/archives/bing-they-shouldve-googled-a-better-name</guid>
      <pubDate>Thu, 02 Jul 2009 09:20:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/bing-they-shouldve-googled-a-better-name#comment</comments>
      <content:encoded><![CDATA[<p>Microsoft is striking terror into the hearts of prescriptive grammarians everywhere by suggesting that millions of people&nbsp;could start using the word <a href="http://www.bing.com/">Bing</a> (the recently unveiled latest-and-greatest search engine from Microsoft) <a href="http://www.nytimes.com/2009/05/29/technology/internet/29bing.html?_r=1&amp;em">as a verb in everyday speech</a>.</p>
<blockquote style="font-style: italic;">And if Bing turns into a verb like, say, Xerox, TiVo or, well, Google, that would be nice too. Steven A. Ballmer, Microsoft&rsquo;s chief executive, said Thursday that he liked Bing&rsquo;s potential to &ldquo;verb up.&rdquo; Plus, he said, &ldquo;it works globally, and doesn&rsquo;t have negative, unusual connotations.&rdquo;</blockquote>
<p>One of the oft-cited reasons for Google's success, other than the fact that it offered a decent ground floor product at a time when the world was full of search engine suckery, is that it had a name which was susceptible to being <strong>immortalized as a household verb</strong>. To Google is to search the web, and to search the web is to Google.</p>
<p>Microsoft desperately wants this for Bing.</p>
<p>And I'm sure they thoroughly focus-grouped and psychology-tested and committee-reviewed the name ad infinitem/absurdum. At this level, the billions of dollars level, you don't draw names out of a hat. So the name went through the review and acceptance process and the experts pulled out their pocket protectors and proclaimed that YES, Bing is a GOOD NAME!<br /><br />The only problem is, the experts were wrong.<br /><br />While I won't go so far as to say that <a href="http://www.inquisitr.com/24550/why-bing-is-a-stupid-ass-name-for-a-search-engine/">Bing is a stupid-ass name for a search engine</a>, I will say that <span style="font-weight: bold;">as a label for a mass-market search product, Bing sucks like a bag of&nbsp;three-day-old cheese puffs</span>. And by the way: <span style="font-style: italic;">I like Microsoft</span>. I've been using Microsoft technologies my entire adult life. That doesn't make the choice of "Bing" as a cultural moniker any less daft.<br /><br />Allow me to explain.</p>
<p><a href="http://www.codingthewheel.com/archives/bing-they-shouldve-googled-a-better-name">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/xiaUZWlPEbc" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Online Poker and the Intelligent Note</title>
      <link>http://www.codingthewheel.com/archives/online-poker-and-the-intelligent-note</link>
      <guid>http://www.codingthewheel.com/archives/online-poker-and-the-intelligent-note</guid>
      <pubDate>Tue, 30 Jun 2009 06:23:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/online-poker-and-the-intelligent-note#comment</comments>
      <content:encoded><![CDATA[<p>The ability to <strong>take notes on your opponents</strong> has been a standard feature of online poker software since approximately the Dark Ages (also known as,&nbsp;the late 1990s/early 2000s.) If you're an online poker player, odds are you've typed up&nbsp;a few of these yourself.</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=full_tilt_notes.png" alt="" /></p>
<p>I've invested heavily in player notes over the years. Even though robust hand history analyzers and real-time HUDs have relaxed the need for hardcore note-taking, I still find that player notes are useful for storing all the "other stuff".</p>
<ul>
<li>Player psychology and personality</li>
<li>Records from Sharkscope, OPR, PTR, and PokerDB</li>
<li>Blogs or websites found by Googling the player's handle</li>
</ul>
<p>Unfortunately, if there's one thing all this squinting at player notes has done, it's convince me&nbsp;that&nbsp;<strong>the online poker note-authoring experience&nbsp;is tedious,&nbsp;uninspiring, and ergonomically broken</strong>.</p>
<p><a href="http://www.codingthewheel.com/archives/online-poker-and-the-intelligent-note">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/H3k7dhI2lGk" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>The Open-Sourcing of Poker and Poker Bots</title>
      <link>http://www.codingthewheel.com/archives/open-source-poker-and-poker-bots</link>
      <guid>http://www.codingthewheel.com/archives/open-source-poker-and-poker-bots</guid>
      <pubDate>Tue, 02 Jun 2009 23:48:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/open-source-poker-and-poker-bots#comment</comments>
      <content:encoded><![CDATA[<p>Online poker botting is hard work. Trust me.</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=windows_via_richter.jpg" alt="" /></p>
<p>Whether you're using a third-party poker bot or implementing one from scratch: be prepared to invest a lot of time. Depending on your needs, creating a mature poker bot can take anywhere from several months (in the simplest possible scenario)&nbsp;to a year or more. You've got to:</p>
<ul>
<li>Get the Input/Output mechanisms working smoothly.</li>
<li>Produce an effective Poker A.I.</li>
<li>Choose a stealthing mechanism.</li>
<li>Set up the poker botting hardware and environment.</li>
<li>Leverage rakeback and promotions.</li>
<li>Handle various other meta-botting aspects.</li>
</ul>
<p>That's a mountain of work, and unless you're dedicated and have a lot of time, you'll probably fail&nbsp;(however, you'll still have all that hard-won programming and poker knowledge, which is&nbsp;valuable in its own right). I've written three or four bots and only one was successful, and&nbsp;it was built with the advantage of a) a backer and b) ample time and c)&nbsp;obsession.</p>
<p>And I have to wonder: <strong>what if we made poker botting a lot easier and more accessible?</strong></p>
<p><a href="http://www.codingthewheel.com/archives/open-source-poker-and-poker-bots">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/k5iIH0BZlAM" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Dartboard-Driven Design</title>
      <link>http://www.codingthewheel.com/archives/dartboard-driven-design</link>
      <guid>http://www.codingthewheel.com/archives/dartboard-driven-design</guid>
      <pubDate>Sat, 30 May 2009 11:16:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/dartboard-driven-design#comment</comments>
      <content:encoded><![CDATA[<p>I swear. Sometimes I think certain&nbsp;software architects must have a dartboard, each segment containing a <a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)">design pattern</a>, you know, Adapter here, Observer there, Factory over there.&nbsp;When it comes time to design something, they throw&nbsp;a dart.</p>
<p>&ldquo;Ooh, Memento!&rdquo;</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=design_patterns_dartboard.jpg" alt="" width="700" height="674" /></p>
<p>Like you, I'm a fan of classic <a href="http://en.wikipedia.org/wiki/Design_Patterns_(book)">Gang of Four</a> design patterns. But all too often it seems like architects pick their design&nbsp;patterns out of a hat. "Hmm, I've never used Visitor before, let's try that." You could call it&nbsp;<strong>dartboard-driven design</strong>.&nbsp;Just pick your pattern and go!</p>
<p><a href="http://www.codingthewheel.com/archives/dartboard-driven-design">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/vYky8Cu_-UU" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>OCR = 0nline P0ken 0pticaL Chanacter Recogrition</title>
      <link>http://www.codingthewheel.com/archives/ocr-online-poker-optical-character-recognition</link>
      <guid>http://www.codingthewheel.com/archives/ocr-online-poker-optical-character-recognition</guid>
      <pubDate>Fri, 29 May 2009 12:05:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/ocr-online-poker-optical-character-recognition#comment</comments>
      <content:encoded><![CDATA[<p>Online poker, meet optical character recognition. Optical character recognition, meet online poker. I'm sure the two of you will get along just fine.</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=what_you_see.gif" alt="" /></p>
<p><a href="http://en.wikipedia.org/wiki/Optical_character_recognition">Optical character recognition</a> or OCR is one of those cool technologies which occupies a boring space. Document scanning is nifty and all, very useful from an office productivity standpoint, but it's not&nbsp;sexy.&nbsp;But take that same OCR component and embed it as a cog in the gearworks of an intricate real-time online poker botting rig...</p>
<p><a href="http://www.codingthewheel.com/archives/ocr-online-poker-optical-character-recognition">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/NvXt4BO0-7c" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Matt Aimonetti and the Ceremony of Political Correctness</title>
      <link>http://www.codingthewheel.com/archives/matt-aimonetti-and-the-ceremony-of-political-correctness</link>
      <guid>http://www.codingthewheel.com/archives/matt-aimonetti-and-the-ceremony-of-political-correctness</guid>
      <pubDate>Wed, 13 May 2009 09:48:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/matt-aimonetti-and-the-ceremony-of-political-correctness#comment</comments>
      <content:encoded><![CDATA[<p>A long time ago, in a galaxy far, far away, at a technology conference which most software developers had never heard of, for a language which most software developers have only just heard of, a guy whose name is unimportant gave a presentation entitled <a href="http://www.slideshare.net/mattetti/couchdb-perform-like-a-pr0n-star">CouchDB + Ruby: Perform like a pr0n star</a>.</p>
<div id="__ss_1310834" style="width:425px;text-align:left">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always" />
<param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gogaruco-couchdb-090418194027-phpapp02&amp;stripped_title=couchdb-perform-like-a-pr0n-star" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gogaruco-couchdb-090418194027-phpapp02&amp;stripped_title=couchdb-perform-like-a-pr0n-star" allowscriptaccess="always" allowfullscreen="true"></embed>
</object>
</div>
<p>The presentation caused a splash, in a not-entirely-good way. Any publicity is good publicity they say, but the presenter in this case committed an unforgivable sin: <strong>he did something that made, or could have made, someone feel uncomfortable</strong>.</p>
<p>You see, this dastardly individual spliced 14 slides of suggestive imagery (read: scantily-clad but non-nude women) into a 79-slide Powerpoint presentation in order to get his point across: that applications built on Ruby and CouchDB "perform like porn stars". He didn't actually take a page out of Tyler Durden's book and use <em>hardcore pornographic images</em>. The images didn't even contain nudity, let alone porn, unless you have an extremely&nbsp;puritanical&nbsp;idea of what porn, in this day and age, actually is.</p>
<p><a href="http://www.codingthewheel.com/archives/matt-aimonetti-and-the-ceremony-of-political-correctness">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/-KS9YrWkLRA" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Does Your Blog Have a Soundtrack?</title>
      <link>http://www.codingthewheel.com/archives/does-your-blog-have-a-music-soundtrack</link>
      <guid>http://www.codingthewheel.com/archives/does-your-blog-have-a-music-soundtrack</guid>
      <pubDate>Thu, 07 May 2009 05:40:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/does-your-blog-have-a-music-soundtrack#comment</comments>
      <content:encoded><![CDATA[<p>Dumbledore said it best.</p>
<blockquote>Ah, music. A magic beyond all we do here!</blockquote>
<p>If you've ever watched a movie without music (perhaps in the "deleted scenes" of your favorite DVD) then you know: <strong>a movie without music is like a bowl of cereal without milk</strong>. Subtract the music, what's left? A bunch of dry exposition without emotional or dramatic <em>oomph</em>. Music adds drama, excitement, psychological color. It&nbsp;can even suggest&nbsp;concrete&nbsp;<em>meaning</em>.</p>
<p>Take for example&nbsp;the vintage feel-good corn of the opening theme of the&nbsp;80s-era sitcom, <a href="http://en.wikipedia.org/wiki/Diff%27rent_Strokes">Diff'rent Strokes</a>.</p>
<p>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="src" value="http://www.youtube.com/v/fQMfN0UFqms&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/fQMfN0UFqms&amp;hl=en&amp;fs=1" allowfullscreen="true" allowscriptaccess="always"></embed>
</object>
</p>
<p>Change the music, keeping everything else the same, and a <a href="http://www.imdb.com/title/tt0063522/">Rosemary's Baby</a>-esque tale of murder or supernatural malice emerges:&nbsp;<a href="http://www.youtube.com/watch?v=Kr-e3qGQ884">Disturbing Strokes</a>.</p>
<p>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="src" value="http://www.youtube.com/v/Kr-e3qGQ884&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/Kr-e3qGQ884&amp;hl=en&amp;fs=1" allowfullscreen="true" allowscriptaccess="always"></embed>
</object>
</p>
<p>Music can accomplish a full 180-degree reversal in the feel of a particular visual.&nbsp;<strong>No single component of a movie or video game has greater visceral&nbsp;emotional impact than the music</strong>. Probably the most famous example of the transformative power of music is, you guessed it,&nbsp;the genre-defining Star Wars soundtrack.</p>
<p><a href="http://www.codingthewheel.com/archives/does-your-blog-have-a-music-soundtrack">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/G_OFfnl4t4Q" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Are Commercial Databases Worth It?</title>
      <link>http://www.codingthewheel.com/archives/are-commercial-databases-worth-it</link>
      <guid>http://www.codingthewheel.com/archives/are-commercial-databases-worth-it</guid>
      <pubDate>Thu, 30 Apr 2009 11:37:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/are-commercial-databases-worth-it#comment</comments>
      <content:encoded><![CDATA[<p>I've worked with expensive SQL Server and Oracle setups for most of my career. I've defended them viciously against all comers and contrarians. I've participated in late-night guerilla flame wars and drunken bar brawls.&nbsp;And I've sought out with relentless tunnel vision those pieces of <a href="http://www.microsoft.com/sqlserver/2008/en/us/compare-mysql.aspx">propaganda</a> which support my foregone conclusion: that SQL Server and/or Oracle are (or were)&nbsp;the best choices for the organization.</p>
<p>I used to be a commercial database advocate.</p>
<p>These databases have put food on my table for a dozen years, you see. I am (or was) what you might call an entrenched practicioner, not necessarily an expert, but a practicioner. And in the manner of entrenched practicioners around the world, I've treated you heretics with the sadistic undercutting and poisonous rancor you've deserved!</p>
<p>"MySQL?" I would sneer. "PostgreSQL? Thanks, but this a <em>serious project</em>. We need a database we can <em>depend on</em>."</p>
<p>Ahem.</p>
<p>The number of times I performed due diligence to determine if, in fact, SQL Server/Oracle was the best choice not for me, but for the team, the client, the employer, the organization?&nbsp;</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=sql_server_due_diligence.png" alt="Zero" width="469" height="300" /></p>
<p>And if I had performed said due diligence, what would I have learned? Just two things:</p>
<ul>
<li>SQL Server and Oracle are, indeed,&nbsp;excellent databases. (Okay,&nbsp;we&nbsp;already knew this.)</li>
<li><strong>SQL Server and Oracle are the wrong choice for 95% of data storage needs, including at the enterprise level</strong>.</li>
</ul>
<p>Nowadays I like to think of SQL Server and Oracle as the <a href="http://en.wikipedia.org/wiki/Death_Star">Death Stars</a> of the relational database universe. Extremely powerful. Monolithic. Brilliant. Complex almost beyond the ability of a single human mind to understand. And a monumental waste of money except in those rare situations when you actually need to destroy a planet.</p>
<p><a href="http://www.codingthewheel.com/archives/are-commercial-databases-worth-it">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/-sbZMs35LVw" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Douchebags</title>
      <link>http://www.codingthewheel.com/archives/douchebags</link>
      <guid>http://www.codingthewheel.com/archives/douchebags</guid>
      <pubDate>Tue, 21 Apr 2009 16:51:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/douchebags#comment</comments>
      <content:encoded><![CDATA[<p>Douchebags.&nbsp;</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=poker_table_douchebags.jpg" alt="" /></p>
<p>Hoodie-wearing, sunglass-sporting, iPod-listening, fratboy-raising, "OMFGYO MY AQ-SOOOOOTED JUST GOR CRACKED! FARK!"&nbsp;poker table...</p>
<p>(wait for it)</p>
<p>...douchebags.</p>
<p>Photographed in their natural casino habitat.</p>
<p>Look like anyone you know?</p>
<p>:-)</p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/W5C64ObxKeI" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Coding the Tweet: Building a Custom Branded Twitter Application</title>
      <link>http://www.codingthewheel.com/archives/codingthetweet</link>
      <guid>http://www.codingthewheel.com/archives/codingthetweet</guid>
      <pubDate>Tue, 21 Apr 2009 06:40:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/codingthetweet#comment</comments>
      <content:encoded><![CDATA[<p>With millions of users and an ecosystem saturated with&nbsp;<a href="http://twitter.pbwiki.com/Apps">over 700 custom applications</a>, Twitter's all the rage these days. Love it or hate it, Twitter has become a powerful medium for connecting with people and marketing your skills&nbsp;to a wider audience. As the old saying goes:</p>
<blockquote>Twitter marches on.</blockquote>
<p>The massive popularity of the Twitter platform means that Twitter users have the luxury of choosing from an army of custom websites and desktop applications (my personal favorite is <a href="http://www.tweetdeck.com/beta/">TweetDeck</a>)&nbsp;allowing&nbsp;them to tweet, browse, and search Twitter in new and imaginative ways. And one of the clever but often-overlooked features of Twitter is that it upgrades these custom applications to first-class citizens within the Twitterverse by tagging each tweet with the hyperlinked name of the tool or medium used to create the tweet:</p>
<p>&nbsp;<a href="http://twitter.com/codingthewheel"><img src="http://www.codingthewheel.com/image.axd?picture=twitter_app_attribution.png" alt="" /></a></p>
<p>This serves as a gentle encouragement&nbsp;for builders of Twitter tools, as well as a way to get the word&nbsp;out about the latest and greatest Twitter apps, and it even (in this author's opinion)&nbsp;helps&nbsp;foster a sense of Twitter power-user elitism: <em>I use such-and-such a tool to post my tweets because I'm a developer/e-marketer/power user and I'm in the know</em>.</p>
<p>It's a little silly, but what can you do? Twitter psychology is a powerful and subtle thing.</p>
<p>So everybody has their favorite Twitter tool, and power-users tend to gravitate towards the more powerful and/or newer tools, and it's a win-win for all concerned: for Twitter, for Twitter users, and for the builders of Twitter tools. But if you're a programmer-slash-web-developer, you have the opportunity to carry this to an extreme: <strong>you have the opportunity to build your own custom Twitter client</strong>.</p>
<p><a href="http://www.codingthewheel.com/archives/codingthetweet">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/g14O82cSjsw" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>Multiway Isometric Ranged Equity Calculation in Poker, Part 1</title>
      <link>http://www.codingthewheel.com/archives/multiway-ranged-isometric-equity-calculation-in-poker-1</link>
      <guid>http://www.codingthewheel.com/archives/multiway-ranged-isometric-equity-calculation-in-poker-1</guid>
      <pubDate>Mon, 20 Apr 2009 06:00:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/multiway-ranged-isometric-equity-calculation-in-poker-1#comment</comments>
      <content:encoded><![CDATA[<h3><a name="introduction"></a>Introduction</h3>
<p>If you've turned on a TV in the past five years&nbsp;you've seen those nifty win percentages they throw up on the screen in televised poker:</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=televised_poker_equity.jpg" alt="" /></p>
<p>In this multi-part series&nbsp;we're going to build a poker calculator (with <a href="http://www.codingthewheel.com/file.axd?file=XPokerEquity.zip">complete source code</a>) capable of computing these sorts of win percentages or equities&nbsp;for any poker&nbsp;situation whatsoever...</p>
<ul>
<li>Any poker variant (Hold'em, Omaha, etc.)</li>
<li>Any number of players (22 players preflop vs. your pocket Aces? Fine.)</li>
<li><strong>With any type of hand (specific hand, hand range, random hand)</strong></li>
<li>On any street of betting</li>
<li>In the language (C#, C++, Java, VB.NET, etc.) of your choice</li>
</ul>
<p>...in a couple lines of code:</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=poker_equity_calculator.png" alt="" /></p>
<p>We'll also discuss the theory that goes into such a calculator:</p>
<ul>
<li>Monte Carlo</li>
<li>Exhaustive Enumeration</li>
<li>Hand Distributions</li>
<li>Lookup Tables</li>
<li>Recursion</li>
<li>Combinatorics</li>
<li>How To Speak To a Girl</li>
<li>Hand Range Notation</li>
</ul>
<p>Now: the above televised poker&nbsp;win percentages shown above&nbsp;were inserted by the producers, after the fact, with perfect knowledge of each player's cards. In the heat of battle, we don't have perfect knowledge of anything except our own cards. And the way we typically get around this is by assigning our opponents not a specific hand, but <a href="http://www.codingthewheel.com/archives/incredible-edible-hand-distribution">a range or distribution of potential hands</a>.</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=multiway_poker_hand_ranges.jpg" alt="" /></p>
<p><a href="http://www.codingthewheel.com/archives/multiway-ranged-isometric-equity-calculation-in-poker-1">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/y6ETHm0gDGI" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>A Pokersource Poker-Eval Primer</title>
      <link>http://www.codingthewheel.com/archives/a-pokersource-poker-eval-primer</link>
      <guid>http://www.codingthewheel.com/archives/a-pokersource-poker-eval-primer</guid>
      <pubDate>Tue, 14 Apr 2009 06:17:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/a-pokersource-poker-eval-primer#comment</comments>
      <content:encoded><![CDATA[<p>Pokersource Poker-Eval, the <a href="http://pokersource.info/">open-source poker hand evaluation library</a>, takes a lot of flack for being "low-level". In <a href="http://www.codingthewheel.com/archives/poker-hand-evaluator-roundup">The Great Poker Hand Evaluator Roundup</a>, I wrote:</p>
<blockquote>The Poker-Eval library is implemented in highly optimized, heavily macro'd C for unadulterated speed, but language mappings for .NET, Java, and Python are provided. Now, I'll be honest. The first time I saw the poker-eval source code, I immediately unlearned about sixty-two months of best-practices software development...</blockquote>
<p>That statement was a little tongue-in-cheek, but still:&nbsp;it seems like every time someone suggests Pokersource Poker-Eval, a disclaimer immediately follows:</p>
<blockquote>Don't use this library unless you're a competent C programmer! <a href="http://en.wikipedia.org/wiki/Danger,_Will_Robinson">Danger, Will Robinson!</a></blockquote>
<p>Just the other day, for example, I was looking at <a href="http://stackoverflow.com/questions/tagged/poker">poker-related questions on Stack Overflow</a> when I came across this:&nbsp;<a href="http://stackoverflow.com/questions/193916/how-do-i-programmatically-calculate-poker-odds">How Do I Programatically Calculate Poker Odds?</a></p>
<blockquote>
<p>Hello, I'm trying to write a simple game/utility to calculate poker odds. I know there's plenty of resources that talk about the formulas to do so, but I guess I'm having trouble translating that to code. Particularly, I'm interested in Texas Hold-em ...</p>
<p>I understand that there are several different approaches, one being that you can calculate the odds that you will draw some hand based on the cards you can see. The other approach is calculating the odds that you will win a certain hand. The second approach seems much more complex as you'd have to enter more data (how many players, etc.)</p>
<p>I'm not asking that you write it for me, but some nudges in the right direction would help :-)</p>
</blockquote>
<p>One of the answers suggested using Pokersource:</p>
<blockquote>
<p><strong>Take a look at </strong><a rel="nofollow" href="http://pokersource.info/"><strong>pokersource</strong></a><strong> if you have reasonably strong C abilities. It's not simple, I'm afraid</strong>, but some of the things you're looking for are complex. The poker-eval program that uses the library will probably do much of what you want if you can get the input format correct (not easy either). Sites such as <a rel="nofollow" href="http://www.propokertools.com/simulator/simulationEditor.jsp">this one</a> or <a rel="nofollow" href="http://twodimes.net/poker/">this</a> also use this library AFAIK.</p>
<p>Still, it could be worse, you could be wanting to calculate something tricky like Omaha Hi-lo...</p>
</blockquote>
<p>Again with the disclaimer! And it occurred to me: you know what?&nbsp;All this&nbsp;<a href="http://en.wikipedia.org/wiki/Fear,_uncertainty_and_doubt">FUD</a>&nbsp;is really kind of&nbsp;bogus. As of this writing, Pokersource is still&nbsp;the best and most complete library of publically available poker-related code in the world. Period. What's more: <strong>the Pokersource evaluator is extremely easy to use provided you understand the Pokersource way of doing things</strong>.</p>
<p>So I thought, why not put together a brief Pokersource Poker-Eval primer?</p>
<p><a href="http://www.codingthewheel.com/archives/a-pokersource-poker-eval-primer">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/4bhRoWn8O5I" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>1,326</title>
      <link>http://www.codingthewheel.com/archives/1326</link>
      <guid>http://www.codingthewheel.com/archives/1326</guid>
      <pubDate>Tue, 07 Apr 2009 18:58:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/1326#comment</comments>
      <content:encoded><![CDATA[<p>The <a href="http://www.codingthewheel.com/archives/incredible-edible-hand-distribution">1,326 starting hands of Texas Hold'em</a> mapped to&nbsp;the surface of a&nbsp;sphere and sent tumbling through the fractal wreckage.&nbsp;Built&nbsp;using <a href="http://www.getpaint.net/">Paint.NET</a> and <a href="http://www.gimp.org/">GIMP</a>. (I've been trying to wean myself off Photoshop for years. Great product, but&nbsp;<a href="http://www.codinghorror.com/blog/archives/001097.html">we don't use software that costs money around here</a>.)</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=poker_apocalypse.jpg" alt="" /></p>
<p>Enjoy, and stay tuned for some related source code.</p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/jBNvga04PZU" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>The Incredible, Edible Poker Hand Distribution</title>
      <link>http://www.codingthewheel.com/archives/incredible-edible-hand-distribution</link>
      <guid>http://www.codingthewheel.com/archives/incredible-edible-hand-distribution</guid>
      <pubDate>Sun, 05 Apr 2009 16:21:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/incredible-edible-hand-distribution#comment</comments>
      <content:encoded><![CDATA[<p>As every self-respecting poker degenerate knows, there are 1,326 unique starting hands in the Texas Hold'em universe.</p>
<p><img src="http://www.codingthewheel.com/image.axd?picture=holdem_1326_temp.gif" alt="All 1,326 unique Texas Hold'em starting hands." width="750" height="1530" /></p>
<p>When you peek at your hole cards at the beginning of a hand, all of the 1,326 combinations&nbsp;are equally likely. Your chances of seeing [AhAs] are exactly the same as seeing&nbsp;[7d2c]. That is, the 1,326 starting hands are isometric with regard to probability: each has the same chance of occurring. So when you stare down at the opaque patterned backing of your hole cards prior to peeking at their undersides, you're not looking at a <em>specific hand</em>.&nbsp;You're looking at a probability cloud containing 1,326 possibilities, one of which will manifest when your hole cards are formally observed.</p>
<blockquote><strong>Prior to observation, a given player's hand isn't a hand; it's a probability cloud containing N distinct possibilities.</strong></blockquote>
<p>We call this probability cloud a <span style="text-decoration: underline;">hand distribution</span> or a <span style="text-decoration: underline;">hand range</span> and far from being a recondite mathematical theory of interest only to statisticians and poker geeks,&nbsp;it's one of the most powerful weapons we have in the battle against incomplete information.&nbsp;Good players use this weapon all the time, consciously or unconsciously. Every time a player deduces a piece of information, however vague, about&nbsp;an opponent's hand,&nbsp;he's creating a hand distribution.</p>
<p><a href="http://www.codingthewheel.com/archives/incredible-edible-hand-distribution">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/ja3MzMeS_D4" height="1" width="1"/>]]></content:encoded>
    </item>
    <item>
      <title>To Build a Ringtone</title>
      <link>http://www.codingthewheel.com/archives/to-build-a-ringtone</link>
      <guid>http://www.codingthewheel.com/archives/to-build-a-ringtone</guid>
      <pubDate>Wed, 01 Apr 2009 11:26:00 -0700</pubDate>
      <dc:creator>James Devlin</dc:creator>
      <comments>http://www.codingthewheel.com/archives/to-build-a-ringtone#comment</comments>
      <content:encoded><![CDATA[<p>Fans of The Office will remember the&nbsp;scene&nbsp;in which&nbsp;Dunder Mifflin employee <a href="http://en.wikipedia.org/wiki/Andy_Bernard">Andy Bernard</a> proudly&nbsp;introduces his&nbsp;patented <a href="http://www.youtube.com/watch?v=bDswxl9GtMc">cell phone ringtone consisting of&nbsp;an&nbsp;<em>a capella</em> arrangement of Rockin' Robin featuring multiple vocal parts all performed by Andy Bernard</a>.</p>
<p>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">
<param name="allowFullScreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="src" value="http://www.youtube.com/v/bDswxl9GtMc&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/bDswxl9GtMc&amp;hl=en&amp;fs=1" allowfullscreen="true" allowscriptaccess="always"></embed>
</object>
</p>
<p>Now, I remember when a ringtone was a <em>feature</em>. Oooh! You can change the ringer! Aaah! You can upload your own songs! (Meaning, download songs from the provider at a dollar a piece.) Since then, the lowly ringtone has somehow...mutated...from an obscure cell phone gimmick, to a cultural monster. Love ringtones or hate them; you won't be permitted to escape them. Is a&nbsp;<a href="http://www.youtube.com/watch?v=rX7wtNOkuHo">Nelson laugh</a>&nbsp;appropriate here?</p>
<p>Anyway,&nbsp;after watching the episode,&nbsp;I decided to dust off the piano and <strong>compose and record a ringtone from scratch</strong>.</p>
<p><a href="http://www.codingthewheel.com/archives/to-build-a-ringtone">Continue reading &gt;&gt;</a></p><img src="http://feeds.feedburner.com/~r/codingthewheel/~4/qL2yjTyui7A" height="1" width="1"/>]]></content:encoded>
    </item>
  </channel>
</rss>
