A Word About Authenticity

Wednesday, June 11, 2008

To those those who have expressed their doubts about the authenticity of the poker botting series or the motivation behind it: I appreciate and applaud the skepticism. 95% of online poker-related material is dubious, spammy, get-rich-quick, Vegas pipe dream BS designed to get you to sign up for online poker or otherwise invest your hard-earned money in something which may or may not be appropriate for you. And some of you have interpreted this series as another attempt in that vein, which is understandable.

What bothers me is the accusation, however infrequent, that I'm hoodwinking people for personal gain. And yet, tellingly, you won't find online poker signup links, invitations to purchase botting tools, or any other such garbage, anywhere on Coding the Wheel. You won't find obnoxious, in-your-face, above-the-fold advertising. What you will find is a lonely sidebar ad, installed months ago and forgotten. I'm not even sure how I make money on it. PPC? CPM? Both? All I know is I've earned approximately enough money in ad revenue to buy myself a cheeseburger with fries and a Coke.

And it's like, as much as I appreciate the burger, a few pennies of dubious PPC revenue is not what I'm after. Coding the Wheel is a programming and technology blog, not some fly-by-night affiliate scam site. Employers see the blog. Clients see it. Friends and family see it. People in the community whose opinion I very much respect see it. I don't need the few hundred extra dollars per month that "selling out" would afford and if I were really interested in PPC or affiliate revenue, there would be a dozen better ways to do it.

So what's my motivation? One thing: community, and the unlooked-for benefits, the random knowledge, the occasional email offer to work on a side project, the ability to reach and converse with some of the best-informed people in the world on this topic. That may sound hokey to you, but to me it's worth far more, both in dollar value, and in other valuations, than any make-money-by-talking-about-botting scheme could ever be. So while I don't expect you to trust me completely just yet, three posts deep into a huge subject, I do at least ask that you give me credit for having a healthy amount of self-interest. Enough to know, for example, that real success is not to be had by posting a thin smear of content and somehow tricking people into clicking on my non-existent poker signup links.

So where's the code? Since the first article broke, I've had programmers asking for code; non-programmers asking for poker; poker-players asking for bot strategy; and normal people asking for history. I've gotten more hate mail than I can shake a stick at, and even the occasional death threat, on account of these posts. Online poker employees, posting negative comments, often not even bothering to disguise their originating IP. Fellow bot-builders, some of them established, cursing me for "letting the cat out of the bag" even though all this information is freely available with a little creative searching. And programmers, many of whom seem to have only the vaguest familiarity with poker, casually dismissing the whole thing as unrealistic (despite the fact that numerous, proven bots exist on the open market).

That's fine. Programmers and poker players are tough customers. The programmers want the choicest nuggets of source code; the poker players want the exact logic of the bot along with win rates, variance, etc. And everybody, particularly the non-programmer, non-poker player, wants an interesting read. And they want it today, not next week. Meanwhile, there are a lot of people who have no idea what it means to play "short-stacked" or to be "tight/aggressive". There are a lot of people who aren't familiar with DLL injection, or any of the other techniques we've discussed. And there are a lot of people who know all these things very well, and are ready to pounce on the first inaccuracy or simplification.

I'm not going to just post the bot source code along with seven winning formulae for beating online poker. In fact, were I to do so, you could safely assume I was full of crap. Instead I'm going to hit you with a large number of posts, ranging from historical fluff to working, in-the-trenches A.I., to the ins and outs of binary code patching on Windows, and everything in between. I'm going to tell you everything I know, which is a fair amount, and I'm going to introduce everything I've learnt from the community, which is even more. And I will quite simply never give you a piece of poker, programming, or poker-programming advice which I don't 100% believe; never try to get you a book which I haven't read so many times the binding splits; never tell you to sign up for online poker in order to make money off you.

The code is coming, an avalanche of it. But it's impossible to address everything at once. We're three posts deep into a complex topic covering two or more non-trivial domains - poker, programming, some math as well - and I can only hone in on specific subjects after we've laid some groundwork and established a basic interest level. I hope the posts so far have had a decent signal-to-noise ratio, given the complexity of the topic. I can at least say this: in writing these posts I've tried to create the sort of content that would've been helpful to me during the difficult, tedious, and yet ultimately rewarding handful of years I spent building the bot.

As to those of you who claim that building a bot is a superhuman feat of engineering. Ask yourself what you could have done, given (as I was) two, three, or four years of full-time, properly funded development effort. And let's assume you'd been playing poker for years, and botting in chess and MUDs prior to that. I think you'll find that with even a basic amount of programming knowledge, you could accomplish a lot. In fact:

Bots are a permanent reality in online poker and every other online arena where mouse clicks translate to money, including World of Warcraft. All this sound and fury over botting is just a prelude to the time when any ten-year old will be able to tell his computer, "Fritz, play a theoretically perfect game of poker for me and proofread my book report while I go watch Spongebob Squarepants."

Believe it. Count on it. Trust it. Take it to the bank and deposit it for a rainy day. This is where the world is going and rather than tip-toeing around the subject, we need to take a long, hard look at it. Because it won't be long now before poker succumbs to machine intelligence as chess, checkers, backgammon already have. And after that, domain after domain of human knowledge, falling like dominoes as artificial intelligence starts to come into its own. I'm reminded of some famous words by a famous poet:

The darkness drops again; but now I know
That twenty centuries of stony sleep
were vexed to nightmare by a rocking cradle,
And what rough beast, its hour come round at last,
Slouches towards Bethlehem to be born?

Yeats, living in the early part of the last century, probably wasn't talking about the rise of the poker bots. But the words will do for us cavemen, living in the Dark Ages before the wakening (and wakening is the word) of the first general artificial intelligence. Better minds than mine will bring this to you on a silver platter, for better or worse, and use it to build the only real Killer App that ever mattered: MakeMyLifeEasier.exe. Until then, we can have some fun, learn a lot about programming and poker, and possibly make some money, by studying the construction of an online poker bot.

Thanks for all your comments, negative and positive, and feel free to drop me a line at james@codingthewheel.com if you have any specific thing you'd like to say. I keep all emails in strict confidence (of course) even the angry ones.

Until next time...

Tags: online poker, poker

50 comment(s)

Thanks - There is a lot of ground to cover before we can run our bots COMPETANTLY. I'm really looking foreward to the rest of the series.

Please ignore the poo-throwing monkeys.

Okay, but we still need to see some more code before too long. a spoonful of sugar, and all that jazz.

I've enjoyed the first 3 bits of these articles. As a matter of fact, I now check your blog every day because of it, and have gone through your older posts.

I've been interested in botting various things forever, poker being no exception. I've built MUD bots, PPC bots (for AllAdvantage IIRC), etc. I've been too lazy to fully implement a poker bot, mostly because.. Well frankly, it's hard to find time to be a "professional programmer" as your day job, and a hobbyist programmer as your leisurely "job". You said it well when you mentioned pet projects. I have a ton of pet projects that never seem to get done.

However, recently you've rekindled my interest in Online Poker and Botting, so recently i've pushed aside all Pets and started working on my own... And yes, poker rooms range from easy to manipulate (Oh how I love when they pass WM_USER along to me for everything!) to the difficult (scrape everything, change our interface every 7 days).

Please keep up your excellent blogging. I find it fascinating when someone puts to words the processes that make things work.

One of the most compelling descriptions of the coming world of artificial intelligence I've ever read. And to incorporate Yeats...I (as a former English professor) am smiling. Well played, sir.

When are you going to follow up on your System.Object versus CObject rant? That one intrigued me.

I agree with you, sir. but if i were you, id make some major side profit through ads. because you know, the haters, regardless of what they say, will still come back and check up on your articles. then with the extra money you make, you can buy more cheese burgers with more fries and coke. because you, sir, deserve the extra burgers fries and cokes for these fine pieces you write.

I don't understand why the doubters don't simply wait and read more of your articles to judge for themselves. So far what you've written certainly demonstrates your credibility with the subjects. And I've learned a thing or two already. What more can a reader ask for?

Hi, I'm one of the skeptics from reddit. I think what annoyed me the most about your 3rd entry was that you did a lot of dancing around providing substantial content. I found the stuff in your first 2 posts interesting, particularly screen scraping and dll injection. The 3rd had some class schemas, but seemed to mostly reiterate what you already wrote.

I don't have a particular need to see the code, I'm just curious because I'm a programmer and I enjoy poker. If you never post any code, I won't really care, it's just annoying to be teased for this long :). And you're a little long winded :).

Don't let the haters get to you. I am enjoying this from a professional programming point of view. Keep it up.

Keep up the good work. Don't let the peoples demands of instant personal gratification divert you from the course that you are currently setting.

The people that will benefit most from these posts will be the ones that can already see for themselves that you know what you are talking about. They will already realise that they will get the information they require all in due time without the need to hamper you with self indulgent nitpicks or impatient 'feed me now' mentality.

In other words, forget about them because i for one think you are doing a most excellent job. i am enjoying the current pace, tone and spread of your articles. Any deviation from your current course due to some whinny time waster would only prove to be a disappointment.

lol @ MakeMyLifeEasier.exe

I just added your site to my rss reader when I found your first poker bot post.

I wasn't searching for that, I just read the site via a link from spanish Digg style page. After that, I just feel curiously on the domains/subjects that a bot involve.

As a lot of domains, there is people trying to get you down in many ways. The code isn't important after all, it's more important having knowledge to do that.

Thanks and keep going on. Regards

As a retired old school software developer (business applications), I have to say that your approach to presenting this material makes perfect sense to me. It is very similar to the approach we took with software projects - high level design/architecture, followed by detailed design/specifications, followed by code - aka structured development.

Of course that is an oversimplification, but my point is that I am guessing that many of your impatient critics simply are not people who have been trained to define the solution to a large problem in this fashion. It's not their fault - it's just that some disciplines teach this way of viewing problems moreso than do other types of careers.

Keep up the good work.

For those wanting instant gratification by seeing some source code, take a look at an open source project on Google: http://code.google.com/p/openholdembot/

James, thanks for an interesting and informative series. Looking forward to what's coming!

What HAL9001 said +1

I am nor interested in poker nor programming bots, but I enjoy your articles very much because of your interesting writing style :) and since I am in the IT industry its nice to pick up few things here and there.

Truly, about one word about authenticity, and reams of navel gazing, whining, and self-admiration. Bravo

[i]Please ignore the poo-throwing monkeys.[/i]

Obviously referring to limit hold'em players.

I agree with your approach 100%. As an engineer and programmer, it is absolutely necessary to have a thorough background and understand what problems you are up against before a single line of code is written.

I think a lot of the naysayers and complainers are spawned from the instant internet gratification that folks are accustomed to. Do things the right way (with research) the first time, and you will save time overall.

Thanks for the great posts. I think it is awesome that you are sharing your experience, and I am inspired to look into this arena. I have to say I see other applications, for this type of bot, that interest me more than actual gambling; however, I am looking forward to the future articles.

BTW, I think your articles are about the right length for the topics.

I find your discussion of the methodology very interesting. You have really started to explain so many disparate concepts that for me as a programmer I have had a peripheral interest in but have never really played around with. I don't really care for the full poker bot code, code is code, once you have the concept it is just implementation anyways. It's not like I am going to run a bot. But I can already think of applications where I might need to inject a dll or roll some out some ai. Keep up the good work sir. I only wish I discovered this once you were done.

My only regret is that you wasted todays post on the haters instead of writing part 4.

To the poker sites bitching. Stop and think for a second. Seriously, this series is the greatest thing in world for you. Its like finding the other teams playbook at the superbowl.

I'd prefer the knowledge contained in these posts remained a secret.

Dude, don't listen to the negative voices. As a programmer that has written some minor bots (nothing fancy as a poker bot) I can say that people have a hard time believing how easy that is.

Poker bots are of course not easy, but not that difficult for a smart person to do. Keep on with your blog and keep it as interesting as it's been until now.

I'm one of those non-poker / non-programming types just enjoying the good read. Thanks for making it interesting for us!

Not only is your blog a good read, but it also made me finally want to try programming in a windows environment (I only code on Unix-type systems), as I play a lot of poker on and offline. Keep up the great work!

Honestly... I am not interested in bots, but I play poker online, and have written my own HH parser and player stats calculator, and have some other projects in the works. They are all legal under the T&Cs of the site I play at, but I am always on the lookout for other techniques.

You have already impressed me with your knowledge and writing ability. Keep up the good work.

Getting picked on goes with the territory. This site has potential.

You can't please everyone, can you? Ignore those negative words, and when I see your blog (especially the poker bot articles) as a technical / programming blog, I see you doing a great job. Keep up the good work.

Great series of articles, very well written with lessons that extend beyond just poker, even for advanced developers. Congrats!

dear sir, I have added ur site to my rss and well its one of the ebst reads on the internet. Just ignore those who threaten you. Infromation is power. Everyone should have it. You keep at it sir.

P.S i got really mad that ur 3rd part was sooo late heh

Doesn't matter if you were trying to make money, or if there is every any code, or if any of us ever build a bot from this. I'm enjoying the series as it is. quick question, how many posts do you think this will take? Ballpark figure, 10, 50, 100, 1000? Just what am I getting myself into here? ;)

Loving the series so far, nice to hear that some code is coming. Everytime I see a new post of yours in my RSS aggregator I say a little prayer that it'll have some code. Sounds like the answers to my prayers are en route!

It's sad to see that some people are angry over this series. It's very informative and it's interesting to see the public's reaction to something that was just as widespread a few weeks ago.

Keep up the great work!

Keep up the good work. I really enjoy the posts. They offer a great deal of informative yet casual reading. Don't let the cynics out there get to you.

Death threats are a bit extreme. But I have to disagree disclosing information that will ruin such a great game. I won a $1040 seat the other day. Maybe I could do with the bot when I play the 2 day online event. Check out how I won the seat here http://youtube.com/watch?v=H2eFlPgOh6A

Keep up the good work.

what david, keep up the good work, this is very useful information from a programming stand point

I think the writing is good, the historical placement is nice, and the overall discussion is interesting. But I think if you get down to the actual placement of code level items, you are doing a disservice to your readers.

A 10 thousand foot view is better than a 50 thousand foot view, but still requires the person to think. Walk them through the microscopic view and they have no effort and learn less.

So moving forward, I hope you continue, as it will only help the game. More people will get interested, more people will learn to program, etc. Some will attempt and succeed, and many will attempt and fail. Exactly the same way regular users approach the game of poker.

But if you get to the point where you are handholding people through a walkthrough of code and a.i. exercises, this is doing a disservice to everyone involved and nobody really learns anything.

I can say that there are ways to break limit poker down into discrete quantum and then off of those do Bayesian analysis with the data stored in Poker Tracker, which then makes for an excellent a.i. against standard players... and that isn't giving anything away. Someone needs to then read up on those ideas, and then they have a wealth of knowledge at their fingertips and can do many other things. But if I post code and say "and this is how you do it", then you essentially are feeding script kiddies and annoying the world.

So while code examples are fine and all, I sincerely hope this doesn't devolve into a walkthrough.

Im with you for the duration my friend. Great article so far and can't wait for the series to develop. Although i've never even played a game of poker, i'm a developer with a keen interest in mathematics and AI. Don't envy you with the amount of mail (positive or otherwise!) which you are probably getting!

Seems like you've included copious amounts of gratuitous theory without ANY pragmatic and workable examples.

It's almost as though you contemplated building a bot, gathered the business requirements, scoped it out, then realized you were incapable of the work and decided to make it a attention grabbing blog post instead.

You forgot to mention that you also make money from Amazon link referrals... but who cares, if people find it useful (and they do), the whiners have nothing against you.

Let me suggest this as an analogy to your situation. There are so many people who buy Poker books with the hopes of making it big, easily. I'm sure there are some "naturals" but most good players have to grind it out over time.

So, with you "letting the cat out of the bag" - you've given a foundation for it all but it's really up to the programmer to grind it out into something well-polished. That, likely, will take time and effort.

James, I just want to let you know that you're a [url=http://www.youtube.com/watch?v=l5Abg_iJEw4]BAMF[/url]. That's a good thing in case you were wondering :D.

I applaud you and can only say 'please carry on.' I started a similar project last year and well, to be honest made a couple of mistakes early on, got as far as some dll injection and reading a few values and then gave up. This series of articles has made me pick up the books, load my ide of choice and hit the code again. Thanks.

Great series and great format. Keep it coming. Code or no code.

I am not sure what these people are complaining about in the first place. Even for a non-coder, you are giving out excellent information. And I can know... because I am one of those non-coders.

I, for one, am happy to buy the stuff you recommend if it's something I can comprehend and pass forward to people who can put it into concepts and, ultimately, software. And so what if you make money on it... you took the time to write this post in the first place. You deserve some credit for it. And I'm happy to make sure to buy the books through YOUR link to make sure you get the 8% commission from amazon. And I hope many more people may feel this way.

I am a business person. And as a business person, I am interested in this subject. Now, as a result, this business person will contact James and ask some personal questions regarding this project :).

Thanks for sharing this with us, James. Really appreciate it!

btw: I cannot find your email on this site. Could you, possibly, get in contact with me? Thanks!

I agree that authenticity is a critical factor in accepting, buying, or believing in something, and if something is not proven then it can be a gamble (pun intended) in accepting it. For example, I have loved martial arts since I was a child but I didn't know which arts to study. Over time a couple arts have really proven themselves and that is why I have chosen to study one of them at the local Plainfield Muay Thai academy here in Indiana. Learning proper punching, kicking, clinching, and defensive techniques has not only been a lot of fun, but it has proven to be a great way to burn off a few extra pounds as well. I recommend you try it sometime and see if you like it as much as I do.

Use the form below to leave a comment.

Coding the Wheel has appeared on the New York Time's Freakonomics blog, Jeff Atwood's Coding Horror, and the front page of Reddit, Slashdot, Digg.

On Twitter

Thanks for reading!

If you enjoyed this post, consider subscribing to Coding the Wheel by RSS or email. You can also follow us on Twitter and Facebook. And even if you didn't enjoy this post, better subscribe anyway. Keep an eye on us.

Question? Ask us.



Coding the Wheel =
Code, poker, technology, games, design, geekery.


You've read our technical articles, you've tolerated our rants and raves. Now you can hire us anytime, day or night, for any project large or small.

Learn more

We Like

Speculation, by Edmund Jorgensen.