I'm a big fan of pet projects. You know the ones I mean: the projects we love to start and hate to finish. The two-week remodeling gig that takes two years. The '69 Mustang sitting on cinderblocks in the back yard while seasons rotate. The unfinished novel lurking on the nether regions of your hard drive. And for programmers and poker players around the world, a million unfinished tools and libraries ranging from the ingenious to the depressingly obscure.
Today, I'd like to talk to you about a pet project which is actually worth your time.

When I say worth your time, I mean a project which is financially, professionally, and personally rewarding in a way that pet software projects almost never are. Everybody likes money, of course; and this project, properly executed, is worth a small fortune. In fact, building and successfully running even a flawed and break-even version of the bot for several years is worth a decade of paychecks (for most people). But the money is (or should be) an afterthought, a nice-to-have.
The real reason I can suggest this project is as follows:
Building an online poker bot will give you a deep knowledge of two lucrative domains, programming and poker, and enough day-to-day working familiarity with those domains to position you, given some effort on your part, for the work of a professional software developer and/or poker player.
How does building a poker bot make you a better poker player? Because it forces you to confront, understand, and codify advanced poker strategy in a way that few of your opponents will have done. How does building a poker bot make you a better programmer? Because a bot involves a balanced coordination of techniques that span the breadth and depth of software development, from operating system nuts and bolts to abstract A.I., from user interfaces to multi-threading.
So to a certain degree, I'm the little devil on your left shoulder telling you to take the path less travelled by.
If I get my way, not only will you be building an online poker bot, you'll be playing poker seriously, for meaningful stakes - if you're not doing so already. You'll be programming seriously - if you're not doing so already. You'll leverage your programming skills to make you a better poker player. You'll leverage your poker-playing skills to make you a better programmer. And you'll leverage your natural (and healthy) desire for money to keep you interested in the process even when the going gets rough - and it will.

Looking at the source code for the bot, I'm reminded of another benefit: the creation of a generic code base which can be used to solve a great many poker problems other than online poker botting. If you structure this code base precisely, you don't have to put all your eggs in one basket. You can cautiously develop in the direction of an online poker bot, while giving yourself the option of branching off into other poker-related projects, many of which have significant commercial appeal (as the author of Poker Tracker could tell you).
Now, the last thing this series is, is a get-rich-quick scheme. But let's pull that copy of Theory of Poker off the shelf, blow the dust off the cover, and turn to the chapter on Implied Odds.
Implied odds are based on the possibility of winning money in later betting rounds over and above what is in the pot already. More precisely, your implied odds are the ratio of your total expected win when your cards hit to the present cost of calling a bet.
Implied odds dominate big-bet forms of poker such as No Limit and Pot Limit, and even affect play in Fixed Limit games, to a degree. But implied odds also apply to real-world scenarios of risk and reward. For example: let's say you're considering whether or not it's worth your time and effort to start building an online poker bot.
You can't simply calculate the likelihood of your being able to produce a winning poker bot, factor in the number of hours played, and so forth. You have to look at the hard-to-quantify value of the knowledge itself, and its effect on your career and life. You have to factor in the value of serendipity. In other words, you have to consider what you might call the implied odds of the situation.
Taking those factors into account, I think you'll come to the same conclusion I did: there's considerably more at stake here than making a few bucks running your bot on Poker Stars. The implied odds of building an online poker bot are huge, even if your bot never turns a profit.
If that hadn't been the case, I never would've sat down to write that first line of code...
This whole thing started, appropriately enough, in Dallas, Texas, where a booming IT corridor intersects a thriving underground poker scene - or what used to be a thriving underground poker scene.

All-night poker clubs in back-alley office lots and basements. Places with names like 6th Street, MMO's, Executive Game, DTD, DPO, Third Pair. Full-service underground casinos with professional dealers. ATMs. Widescreen TVs. Dollar-a-minute table massages. $60,000 bad beat jackpots. On-site kitchens stocked with every fried food known to man. And the #1 draw of most Dallas poker games: free beer.
Times have changed in Dallas and many of these clubs have closed their doors. For a few reasons:
But once upon a time, you could play no-limit Hold'em from dusk 'til dawn, seven days a week, at fifty different clubs around town, for buy-ins ranging from $40 to $5000 or more. It reminds me of a movie every poker player either loves, or loves to hate:
Playing poker in Dallas a few years ago, you felt like you were living a scene from Rounders, except that the situation in Dallas went way beyond anything Rounders ever portrayed. The sudden mass influx of new money into the game - thanks in part to Rounders, thanks in part to online poker, thanks in part to Moneymaker, Raymer, Varkonyi - meant that anyone with a spare $30,000 lying around could start up a club and recoup their investment in a matter of a few months. People were literally renting out warehouses and throwing weekly freeroll tournaments to lure new players into the cash games (which of course, are where the house makes all its money). These freerolls drew hundreds of players - not a big deal in Vegas, perhaps, but this is a state where running a raked poker game was and is a class A misdemeanor.
§ 47.04. KEEPING A GAMBLING PLACE. (a) A person
commits an offense if he knowingly uses or permits another to use as
a gambling place any real estate, building, room, tent, vehicle,
boat, or other property whatsoever owned by him or under his
control, or rents or lets any such property with a view or
expectation that it be so used.
(b) It is an affirmative defense to prosecution under this
section that:
(1) the gambling occurred in a private place;
(2) no person received any economic benefit other than
personal winnings; and
(3) except for the advantage of skill or luck, the
risks of losing and the chances of winning were the same for all
participants.
(c) An offense under this section is a Class A misdemeanor.
That's just shy of a felony, and trust me when I say: the people running these games weren't exactly hardened criminals. They were guys with landscaping businesses, law practices, and programming jobs.
Anyway, there was so much new money (also known as dead money) on the tables, you didn't have to play particularly well, in order to win. All you had to do was be patient. The strategy went something like this:
It's the (exploitable) style of play known in poker circles as weak-tight and that, folks, is all it took to grind out a decent living in those underground Dallas poker games of yesteryear. This style, absent tilt, is still good enough to win in today's low-limit online games, though as we'll see, the tight-aggressive and loose-aggressive styles are really where it's at.
I mention all this because very early on it occurred to me: there's got to be a way to extract this ABC style of poker into a piece of software and then hook that software up to an online poker site. And if you're a programmer who plays online poker seriously, don't pretend you haven't thought the same thing.
After all, why else do we learn to program, if not to be able to solve real-world problems?
Many of you have commented that the Input (getting information from the poker client) and Output (clicking buttons and otherwise manipulating the poker client) stages are low-hanging fruit: tedious, but not rocket science. The Processing stage, on the other hand - the cognitive element of the bot - is another story.
Morpheus: This is your last chance. After this, there is no turning back. You take the blue pill - the story ends, you wake up in your bed and believe whatever you want to believe. You take the red pill - you stay in Wonderland and I show you how deep the rabbit-hole goes.
Artificial intelligence is a huge and fascinating subject, even when applied to the (relatively) narrow domain of poker. A sample of recent papers from the University of Alberta's Computer Poker Research Group (CPRG) should give you a taste:
Unfortunately, most cutting-edge poker A.I. is beyond the reach (given the average person's schedule) of the average programmer/poker-player:

I have lot of respect for the scholarly work that the CPRG and others have done, and I think it's the kind of work which will end up producing the very strongest poker intelligence. But I'd recommend you stay away from the advanced, graduate-level A.I. (unless you happen to be an enthusiast or expert in the field) in favor of learning basic and advanced poker strategy cold. Ultimately that will get you more bang for your mental buck.
Botting Rule #16: None of the techniques used by the CPRG or other organizations are necessary to produce a winning online poker bot.
Now, those are some fightin' words, so let me qualify them. The CPRG approach has always been a game-theoretic approach: finding optimal and/or exploitive strategies which attempt to model the game of poker "from scratch". That means a lot of abstract math and statistical modeling, a lot of terms like Nash equilibria and Best Response, and it means relatively little domain-specific knowledge of poker as it's played for real money in today's online cardrooms:
That's not to say that the people at the CPRG don't "know" poker, or that they couldn't build an online poker bot which would beat the pants off of any other online poker bot that had the temerity to compete against them. It's just that they have a different goal in mind: creating a generic, from-scratch poker intelligence which is capable of competing at a world-class level using pure A.I. That's miles and miles beyond what it takes to produce a profitable online poker bot. And while we're not going to rule out any work that the CPRG (or other organizations) have done, at the same time, let's be realistic. How much time can you devote to building an "optimal" online poker bot? Two years? Ten? Can you devote six solid months to learning (or re-learning) the math? No?
Then start small, by choosing one or more of the following shortcuts:
Getting the bot up and running on "training wheels" in this way is one of the things that makes this project feasible for the tinkerer or botting enthusiast.
We're not going to rely on the above shortcuts exclusively. We want to have our cake and eat it too: meaning, we want to produce a bot which is capable of taking these shortcuts, but which has enough cognitive flexibility to leverage more sophisticated approaches, as we code them, or as they become available.
Botting Rule #44: In early versions of the bot, rely on inventive shortcuts to cut into the complexity of the game, and schedule these shortcuts as milestones on the path to the development of a full-fledged bot.
It's not much fun to spend two years coding away in isolation only to discover upon completion that your bot is ridiculously weak, and overly complex given how poorly it plays. Delineate the work into bite-sized chunks which you can deploy and test immediately.

You working programmers out there already know the score on this one. Formal software development methodologies from RUP to Agile have one thing in common: iterative, incremental development. Even if you've never worked with a formal development methodology, you know that every month or so, customers, clients, managers, coworkers - somebody of importance - wants to see what you've been up to. When it comes to building a poker bot, likely as not that person will be you. And that means it's more important, not less important, to set bite-sized, verifiable development goals. Otherwise it's easy to get lost in the labyrinth of Windows application development, poker domain modeling, and generic A.I. which comprise a bot. In fact, it's impossible not to get lost if we don't break the problem down into manageable pieces.
And one of the big tools we'll use to allow that (when it comes to the bot's A.I.) is an extremely simple form of what's called a multi-agent system, or MAS.
This is a subject (A.I.) that we'll be returning to again and again; but for now, I want to lay out some basic architecture. This isn't the only approach, and I make zero representations as to whether it's the best, or even a particularly good, approach. But it is a working approach which has undergone the trial-by-fire of competitive, real-money play.
What we're looking for is a generic mechanism which allows any poker processing logic or intelligence whatsoever - from the simplest of "hot and cold" probability analyzers to the cutting-edge artificial brain of tomorrow - whether written by us or by a third party - to participate in the decision-making process for a given game situation.
Botting Rule #4: Pluggable intelligence is a key requirement for an evolving bot.
In order to do that, we have to design the bot's cognitive component such that it's capable of incorporating and sublimating any arbitrary poker A.I. In effect, we want to build a simple multi-agent system:
A multi-agent system (MAS) is a system composed of multiple interacting intelligent agents. Multi-agent systems can be used to solve problems which are difficult or impossible for an individual agent or monolithic system to solve. Examples of problems which are appropriate to multi-agent systems research include online trading, disaster response, and modeling social structures.
Speaking in more precise terms: consider creating a programmatic interface (I called mine DecisionModule) which allows any arbitrary component or application to participate in the voting process ultimately responsible for producing a discrete output...
...for a given game situation. Each "Decision Module" can be thought of as a distinct intelligent agent, operating independently of or in cooperation with all other such agents which comprise the bot. These agents might be source-level classes that you write yourself, or they might be third-party applications or DLLs for which you've written an adapter.
For example, let's say a very strong commercial poker playing application is released, and it has a programmatic interface. With a pluggable MAS, you can leverage that application's intelligence as a pluggable component inside your bot, running in parallel with whatever other components you've created or acquired.

In practical terms, that means you can have a simple "hot and cold" probability analyzer running next to tomorrow's cutting-edge third-party "artificial brain"; from the bot's perspective, each such component is a black box. Table state is passed into a sequence of Decision Modules, each of which conforms to a uniform interface. Together, they produce the ultimate decision to call or fold, in the form of a distribution which specifies (for example):
The specific modules shown above are just by way of example, and of course, you can design this out any way you please. The important thing is to promote the concept of the multi-agent system to a first-order architectural abstraction within the bot. This approach has a number of advantages, for the A.I. hobbyist in particular:
Once that's in place, we can start leveraging specific algorithms in the pursuit of a plus-EV bot, starting with simple rules-based or simulation approaches and eventually graduating to some more sophisticated abstractions. Again, an iterative, incremental development path studded with bite-sized, achievable goals is the way to the money.
In the first part of this series, we decomposed the bot into the three classic stages of information processing: Input, Processing, and Output. I noted that each stage of processing should run independently of the other stages.
That's a good architectural division which it's worth preserving. But in practice we'll find that there are other even more meaningful divisions. In particular, the division between "generic poker things" and "online poker things".

Again and again, you'll find that online poker things want to derive from generic poker things. In the diagram above, we can see that StarsPokerTable inherits from OnlinePokerTable, which inherits from PokerTable. We can use true Liskov substitution here because a StarsPokerTable "IS A" OnlinePokerTable which "IS A" PokerTable. If a function expects a single PokerTable object as an argument, you can pass in an OnlinePokerTable or a further-derived StarsPokerTable instead without altering the correctness of the program.
That sort of polymorphism is something that will be hugely helpful, and we'll use it everywhere. The pattern is this: work with base classes to the extent possible, and let derived classes transparently implement specific functionality as needed. This same sort of relationship applies throughout the poker and online poker domains. In fact, the relationship is so strong that what you'll end up with (or at least, what I ended up with) is a domain which can be physically segregated into different physical components:
That, in turn, offers a number of programming benefits, not least of which is decomposition of the system into layers of bite-sized components (each consisting of at most a handful of classes) with strong physical boundaries. It's also a good way to structure the source code if you intend on creating a bot that can play at multiple venues.
As we slowly but surely work our way into a candidate A.I. for the poker bot, we'll need to start picking up certain techniques and adding them to our arsenal. One of these is the idea of representing a player's particular strategy or inclination as a point or region in N-dimensional (2D, 3D, 4D, etc) space.
Often in poker we categorize and describe our opponents based on two things:
We can express selectivity and aggression on a familiar, two-dimensional Cartesian coordinate system. Here, both selectivity and aggression are expressed as numbers between -1.0 and +1.0. At (1.0, 1.0) a player is maximally selective and aggressive. At (-1.0, -1.0) an opponent is minimally selective and aggressive.

Note that the four quadrants of this coordinate system correspond to the four "player archetypes" identified in The Psychology of Poker and other books. This works well as a rough indication of an opponent's core playing style. But I like to take the above grid and add a third axis: deception.
Deceptive opponents frequently attempt to mislead their opponents with bluffs, slowplays, and other tactics. If a deceptive opponent bets, you can't be sure whether he's got a strong hand or nothing at all. On the other hand, many opponents are "honest". A big bet indicates a big hand.

That allows us to express a player's (approximate) strategy as a single point in three-dimensional space. For example, a player at [0.75, 0.75, -0.75] would be described as tight, aggressive, and straightforward (non-deceptive). We would expect this player to bluff and slowplay less often than the player at [0.75, 0.75, 1.0].
Taking it a step further, we can add additional dimensions to our graph. For example, let's add a fourth dimension: stack size. The player at [1.0, 1.0, 1.0, -1.0] is maximally aggressive, selective, deceptive when his stack size is towards the bottom of the range. The player at [0.0, 0.0, 0.0, 0.0] plays a non-descript (neither tight nor aggressive, nor loose nor passive, but somewhere in between) game of poker when his stack is roughly average. And the player at [-1.0, -1.0, -1.0, 1.0] is passive, loose, and non-deceptive when his stack size is large.
Once we get into the multi-dimensional approach, we start to see that a given player's strategy isn't really a point, although we may choose to express it that way for convenience; it's a collection of points which together comprise a strategy region in n-dimensional space, where each dimension is a particular strategy facet. This region can be mathematically described, tested for intersection with other regions, and so forth. Use your imagination.
Of course, selectivity and aggression are just two possible axes. We'll use these because they're common throughout the poker literature, but understand that the meaning and quantity of axes is up to you. In fact, it's worth your while to set up a generic mechanism by which you can capture and plot arbitrary groupings of statistics. This in fact is one of the purposes of the PokerFact abstraction (in the diagram at the top of this page) and its many associated classes.
But that subject is a post in itself. Stick it in your toolbox and we'll return to it at a later date.
PokerTracker is a commercially available online poker hand history analysis tool - that is, a tool which parses the human-readable hand histories emitted by a particular site, analyzes them, and displays various statistics about your play and the play of your opponents:
![]()
Every serious online poker player, without exception, either owns, or knows about, Poker Tracker. In fact, Poker Tracker statistics (VPIP, PTBB/100, etc) have been adopted by the poker playing community at large, and now serve as a sort of de facto terminology for advanced poker strategy. You can hardly read a major poker forum such as 2 + 2 or Pocket Fives without understanding Poker Tracker lingo:
baja15 is winning at 17.5/13.5. chargers in o7 is winning at 13.4/11. The specific numbers are not important; what is important is that both chargers and baja are almost always raising the pots they play. Seizing the initiative is crucial to winning at tight/aggressive poker. They have the table reacting to them. When they call, which is usually about 3.5% of the pots, they have a reason for doing so. If chargers or baja went back through all the hands they called a PFR with, they would be able to tell you why they did it every time. And they would never say “well, because KQ is playable in MP” or something vague like that. It would be “because I was getting the implied odds to play 33 for a set here—villain is a 10/2 nit with 100bb who only raises UTG with premium hands; I knew I’d get at least a big part of his stack if I hit my set.”
As useful as Poker Tracker is for online poker players, it's even more useful for online poker botters. In fact, Poker Tracker is the single most useful third-party tool in the poker bot-building arsenal and here's why:
Absent Poker Tracker and similar tools, you'd be forced to parse those hand history files yourself, and to develop a statistical framework around them yourself, and to test and verify the utility of that framework yourself. Poker Tracker does all of this for you. And while the Poker Tracker statistics aren't perfect, they've got the weight of mass usage behind them, and you'll be able to find countless discussions about the ins and outs of various statistics, what they mean, how to use them to adjust strategy, and so forth.
Poker Tracker allows you to start answering questions like:
We'll take a look at some working source code before too long, but if you know your way around a database, leveraging Poker Tracker shouldn't be too much of an issue. Also, Poker Tracker isn't the only game in town. You can also take a look at Poker Academy Prospector and Hold'em Manager, just to name a couple.
You'll notice that one of the Decision Modules in the above diagram is called ExpertShortStackedAnalyzer. That's my always-inventive name for a particular class which attempts to model a game of poker in which the stack sizes have been artificially shortened.
I've mentioned a couple times the advantages of creating a short-stacked bot but I don't think I've been clear enough about what those advantages are, and why they're so helpful. First of all, when I say a short-stacked bot, I really mean a short-stacked v1.0 bot. The idea should be to get something basic up and running first, before tackling deep-stacked no-limit Hold'em.
Now, let's define what a short-stacked bot is:
A short-stack bot is a bot which buys in for between 10 and 40 times the big blind, and which leaves the table when it wins much more than that.
Most online poker sites set the minimum allowed buy-in at 20 times the big blind (20xBB), or squarely in the "short-stacked sweet spot." In No Limit Hold'em: Theory and Practice, David Sklansky explains:
Playing a Short Stack
Since most of the money gets bet early in the hand, and betting all-in necessitates a showdown, short stacks should concentrate on playing premium hands and generally avoid bluffing. Play tightly preflop and try to get your money in when you likely have the edge against the hands your opponents might have.
Indeed, a totally algorithmic strategy of playing only premium preflop hands (say AA-77, AK and AQ) will beat almost any no limit game when you have a short stack of approximately twenty times the big blind. Ed suggests just such a strategy to beginners, in more detail, in his book, Getting Started in Hold'em.
That's not to say that such a strategy is optimal. For expert players, playing short routinely is a sure way to slash win rates. But it is remarkable that a robot playing a short stack can beat even relatively tough no limit games. Don't underestimate the intrinsic advantages of playing a short stack.
He goes on to give two reasons why the short-stack has an intrinsic advantage:
To which I'd add:
Another reason the short-stacked approach is so powerful is that commitment decisions become much easier as the stack sizes dwindle. In Professional No-Limit Hold'em, Matt Flynn, Sunny Mehta, and Ed Miller write:
When the effective stack sizes are 50BB [or less], you can easily create favorable SPRs for top pair and overpair hands with straightforward raising tactics.
If you're not familiar with the terminology, an SPR (stack-to-pot ratio) is simply the ratio of your stack (or technically, the smaller stack) to the total size of the pot on the flop. It's a numeric expression of risk-vs.-reward at the nexus of the hand which, among other things, tells you when you welcome aggression and are willing or even eager to get all of your money in. The beauty of playing short-stacked is that the mix hands which are correct to play when you're short-stacked always produce favorable SPRs for getting your money all-in.
From a programming perspective, that often (not always, but more often than you'd think) reduces the flop decision to a binary one:
That's huge, in terms of cutting into that complexity I was talking about. But it doesn't end there. Playing short-stacked desaturates the game in a number of ways that simplify your job as the programmer:
So while I don't suggest that you rule out the idea of creating a bot that can play deep-stacked, I do think the first step on the road to that goal is creating a bot which is capable of playing short-stacked.
If you've read this far, then you're presumably pretty interested in this subject. So a friendly word of advice.
One of the reasons many bots fail is because they're designed and developed in a vacuum. Best practices are abandoned in favor of the quick and dirty approach. Code that would never fly in a commercial production environment is created, tweaked, reinforced, cut-and-pasted. The result: a useless, hacked-together mess of spaghetti code, or what's known as a Big Ball of Mud.
In a project of this complexity, avoiding this sort of thing has to be a fundamental requirement from Day One. Even if you're not successful in building the bot, keep your options open. Maybe some of the code can be usefully applied to another project. At all costs, avoid burning a year or more of your time producing a glut of bad "poker botting" code. Keep it clean, keep it reusable.
One of the better ways to lift your code out of the trenches and increase its utility and longevity is to rely on a tried-and-true software development best practice:
Botting Rule #2: Code the domain, not the problem.
When we apply this rule to the domain of poker, what we get is a code base in which the classes and other abstractions have a strong correlation with meaningful nouns and verbs:
Whether you're building a bot, a commercial poker game, or a simulation tool, you're probably going to be interested in the concept of a poker table. That's a core abstraction which establishes an ordering amongst players. Similarly, you'll want some notion of what it means to be a poker player. That's another core abstraction. And so on, until you end up with a group of reusable classes similar to those shown in the diagram presented above.
Taken together, and with the addition of a motive intelligence, these classes comprise a poker bot. But they're also useful in creating a hand history analyzer. A game simulator. A multi-tabling helper tool. An online poker heads up display (HUD). And so forth. If you take the proper care to model things this way, you'll find that your code has useful applications quite aside from botting. That, in turn, further increases the utility of the work you're performing, boosting the "reward" half of the risk/reward equation we talked about in the Introduction.
Ignoring this bit of advice cost me six months (easily) of development time in the creation of the above bot.
We've covered a lot of material in this post, including:
In Part Two of this series, I promised you some working code for interrogating the poker client for various game data. That code has been rolled into its own dedicated post, and in fact, this is how the series will be structured from here on out: long, rambling higher-level posts interspersed with short, targeted, source-code rich posts solving specific problems.
I'd also like to apologize for the delay in responding to some of your questions and comments. These are all excellent topics for discussion and I'd like to address them fully, in dedicated posts. But however we structure it, the poker botting series will continue in exhaustive detail. If you've enjoyed the first three parts of the series, and you haven't already done so, please subscribe in a news reader or over email. And as always, thank you for your time.
Until next time...
133 comment(s)
Love the "rambling" nature as you call it- not sure I would enjoy short posts as much- One thing I would really like to see is more detailed information on controlling the poker client. Excellent article though, interesting way of introducing the AI, and great diagram- is that the actual code base?
Keith on Tuesday, June 10, 2008thanks was looking forward to it!
james on Tuesday, June 10, 2008OKAY. YOU HAVE TO STOP TELLING PEOPLE HOW TO BUILD BOTS. WELL AND GOOD FOR PEOPLE TO SAY: I'D PLAY AGAINST A BOT ANY DAMN DAY. WELL AND GOOD FOR PEOPLE TO SAY BOTS ARE WEAK. NOT ME. I DON'T WANT TO PLAY AGAINST ONLINE POKER BOTS. THEY SCARE ME. PLEASE MAKE THEM STOP.
BOT THIS on Tuesday, June 10, 2008I don't think the AI will be the most difficult problem: it's staying undetected what looks to me the biggest problem. How are you ever going to evade the continuously increasing detection mechanisms of the poker sites?
Thomas on Tuesday, June 10, 2008Hey BOT THIS - don't you know that concealing information does not prevent the information from getting out? Information needs to be free....besides, just telling people how to do something does not in any way mean they are going to do it.
BitBotGuy on Tuesday, June 10, 2008When you're developing a new poker strategy implementation do you set up simulated games and run fake hands to see how they compare to the existing implementations?
jonnii on Tuesday, June 10, 2008Your series on bots is very well done and as a professional coder, I've enjoyed reading them. I would be especially interested to hear about your debugging strategies and your testing strategies. Hopefully you can do a rambling post on those subjects soon.
Jerome on Tuesday, June 10, 2008I agree with BitBotGuy. In any case it's not like nobody ever thought of this before this article. The hardest part is being both a good programmer and a poker enthusiast, as this kind of project takes a lot of time to do. Not many of those people around I guess.
horia314 on Tuesday, June 10, 2008Dont get caught... Its now a class B felony
The Grouch on Tuesday, June 10, 2008Just curious, but any plans to sell your "bot" down the road?
geekster on Tuesday, June 10, 2008Hey. Good post. I dont really program, or play any poker, except the random texas holdem pokernights with friends. But I enjoyed reading the post. Especially funny to see that a project increases two skills simultaniously. And I guess you win more when you play after building the bot. Andif the bot is good, he prolly rakes in some cash to. GL+HF.
marius on Tuesday, June 10, 2008Good stuff, it’s an enjoyment to read, keep up the good work. I just happened to be a bot programmer myself, and just for the record, what you say about “big ball of mud” is true, I’ve been in the exact same situation ..
The biggest problem we have is staying undetected, any ideas beside hiding of process an rename the bot application to something like “paint.exe” ?
And for all of you “not programmers” but poker players reading this: surly if you are a weak player, a bot will beat you, but a human player will beat you as well, do not fear bots, if you play well you will win in the long run anyway.
Sniffer on Tuesday, June 10, 2008[b]Fellow developers who are more into the subject than I, scoffed at me when I mentioned these articles, declaring them as blogspam for affiliate dollars. After reading this part and it failing to progress anywhere near towards turning theory into code, I accept this could turn out to be a waste of time for all involved except the author, who may end the series prematurely when he can find no more poker history to pad with.[/b]
Anonymous on Tuesday, June 10, 2008@Thomas - i think you're overestimating what a poker site is able to "detect". If you're not manipulating the poker program directly (which he's not - he's actually causing mouse & keyboard events to fire), the information stream between the program and the server, or getting caught by their "collaboration heuristics" (which any human players could set off just as easily), there's nothing to detect. The poker site's program runs in windows, man. It doesn't know anything about mouse/keyboard drivers to be able to detect their use. So basically the bot interacts with a computer the same way as a human would. So the problem comes down to figuring out how to avoid being detected as a cheater/collaborator -- the answer to which is always going to be "DON'T CHEAT".
Dustin on Tuesday, June 10, 2008I've always been interested in digitally modeling player strategies (and in turn modeling how players model each others strategies), but you're 100% right about the amount of work required. In order for me to test models/agents against each other I need probably 90% of your framework coded (with none of the payoff of loyalty rewards!)... which has always seemed like way too much effort to even start on the part I'm interested in.
Are any of you aware of any open-source projects that handle the domain at this level of detail? Even if it's not in my preferred programming language it would help, I bet, to use as a reference... Damn. I think you just convinced me I need to build a poker framework as a pet project. ;)
Dustin on Tuesday, June 10, 2008Until online poker sites allow bots with some clear indication that they are bots (like ICC or FICS computer accounts), sharing information on this topic is a horrible idea.
Also, the bot itself is not a profitable side project (it may be profitable due to learning to code or learning poker), if you make a winning bot, you'll get caught, then your roll gets seized, the end.
Anonymous on Tuesday, June 10, 2008Dude! You can write! Good job.
Anonymous on Tuesday, June 10, 2008I insist that opponent modeling is not necessary if you plan on staying in the lower- to mid-stakes games. You can do very well with a static strategy, without introducing the complexity of modeling other players. Opponent modeling adds 2-4 more full dimensions to your input feature space, to a problem which may already be difficult enough (teaching the bot to play decent poker). On the other hand, so many players online don't even understand basic strategy, and will just hand money over to the players that do (you).
Anonymous Pokerbotter on Tuesday, June 10, 2008@anonymous--- blogspam? lol. single most entertaining& informative series on this topic i've ever read. maybe if the guy was trying to sell online poker signups or something but i've yet to see one online poker affiliate link. great thing about blogging nobody forces you to read.
Roger on Wednesday, June 11, 2008Two facts which stand out for me -
Using C++ for an online poker bot.
The extreme verbiage and effort spent on this article - is it worth it?
Peace.
Timmy Jose on Wednesday, June 11, 2008What a fascinating article! I've always wanted to code some accessory programs for online poker sites but I never really thought about it seriously until i read your series. Keep up the informative writing!
I'm curious about your statement that PStars uses a logfile that you can pull data from. I've examined this file, and it doesn't appear that it reports any cards on the screen besides your own hole cards. Can anyone clue me in on what I should be looking at?
One of my pet projects has been to code a simple program that keeps track of other people's folded cards in stud. Screen scraping is absolutely abysmal for this application unless you do nothing on your computer except play poker.
Pokerstud on Wednesday, June 11, 2008Awesome and superior. Please keep up the good work, and thanks!
Anonymous on Wednesday, June 11, 2008@Anon who bolds his statements for some reason. Sorry the author doesn't just give out his code. He's giving you the tools to write the code. It does no one any good if he just gives out the source and EVERYONE uses it. The poker sites would catch on and block it and then you would be bitching about an updated bot that gets past the security. Do something for yourself for a change alright buddy?
CJ on Wednesday, June 11, 2008BOT THIS Said: OKAY. YOU HAVE TO STOP TELLING PEOPLE HOW TO BUILD BOTS. WELL AND GOOD FOR PEOPLE TO SAY: I'D PLAY AGAINST A BOT ANY DAMN DAY. WELL AND GOOD FOR PEOPLE TO SAY BOTS ARE WEAK. NOT ME. I DON'T WANT TO PLAY AGAINST ONLINE POKER BOTS. THEY SCARE ME. PLEASE MAKE THEM STOP.
BOT THIS on 6/10/2008 12:22:10 PM (16 hours ago)
Salmerin on Wednesday, June 11, 2008BOT THIS Said: OKAY. YOU HAVE TO STOP TELLING PEOPLE HOW TO BUILD BOTS. WELL AND GOOD FOR PEOPLE TO SAY: I'D PLAY AGAINST A BOT ANY DAMN DAY. WELL AND GOOD FOR PEOPLE TO SAY BOTS ARE WEAK. NOT ME. I DON'T WANT TO PLAY AGAINST ONLINE POKER BOTS. THEY SCARE ME. PLEASE MAKE THEM STOP.
Here's what I say: "STOP READING THIS IF YOU DON'T LIKE IT....LET THE REST OF US ENJOY THE GOOD READING THIS MAN HAS TO OFFER!"
Salmerin on Wednesday, June 11, 2008Hey James, just want to say thanks very much for a very interesting series of articles! Looking forward to seeing more... keep it up!
James on Wednesday, June 11, 2008great article, thanks so much for your insights
Jazzy on Wednesday, June 11, 2008Major gambling sites attract tens of thousands of visitors in a day. There are even thousands of sites for those unwilling or unable to play for money: Many online gambling sites operate on a game credit basis, and you can play just for the fun of it without risking anything.
Best Online Gambling on Wednesday, June 11, 2008Extremely well written and organized articles, really enjoyed all parts.
Fact: Most experienced programmer are able to abstract the problems until this level.
Anyone start coding a poker bot based on this articles will spend a ton of money on programming books, a year of work on coding, then three tons until he will admit it is not an easy task to code better-than-abc bot.
Csaba Kétszeri on Wednesday, June 11, 2008Great 3rd installment to the series. You're absolutely right about the poker bots having an edge when it comes to playing short stack.
[b]The bot I made uses binary all-in or fold strategy.[b] [url]http://www.icmbot.com[/url]
While this type of bot isn't practical for cash games, it is quite lucrative at the lower stake turbo sit & go tournaments. It uses ICM (independant chip model) calculations and Nash Equilibrium to determine its push/folds.
I've run it at the turbo tournaments on Pokerstars and Full Tilt and its been surprising me with its success. Amazing how many players at the $6.5 tables will call all-in's with AKo or 44 at the 10/20 blind levels early on. My bot pushes QQ/KK/AA and sits tight during the early phases... it's lethal during 12bb> phases of the tournament, and uses within a 0.1% equity to push heads-up.
I'm looking forward to upcoming articles!
Michael on Wednesday, June 11, 2008This is a very interesting article. I will post this and past it along to others that need to read this.
R. C, Beckom on Wednesday, June 11, 2008It's a shame about the dwindling poker scene in Dallas you started off talking about. In the UK, it is definately different and gambling laws seem to be loosening up rather than tightening!
As for the poker bot, you have some really interesting content, yet I couldn't fully grasp anything technical.
Poker is Rigged | Forums on Thursday, June 12, 2008As usual, it's worth noting that the OpenHoldem project provides you the framework (and all of the source code) to do this yourself. It is architected in Input/Process/Output much like the author advocates, but the heavy liftinf for the Input & Output is already done. You need to create the Process part yourself of course.
Oh yeah, integration of PT stats is already there in the framework.
Come give it a try, and join a very vigorous community that discusses these topics every day, while you're there.
http://code.google.com/p/openholdembot/
OpenHoldem on Thursday, June 12, 2008James Devlin, please do not let sites like "openholdembot" and "icmbot.com" stop you nice project, it is an enjoyment to read you view on things – and very inspiring for my own bot work .. you are a good writer!!
And as for the icmbot, you can get that for less than 50$, this is just silly, a winning bot takes years to build and is worth a lot more than 50-310$, I wonder if icmbot can even can break-even! Buy a bot for 50$, you might as well go all-in with 50$ when you look down at 72o, it like throwing money out of the window ..
NiceOne on Thursday, June 12, 2008@ NiceOne
I'd be happy to send you a demo of ICM-Bot so you can see for yourself how it works. Send an email to admin@icmbot.com and I'd be glad to respond with an attached demo bot. I invite anyone else who wants a working demo to send an email as well :)
I'm more than willing to share my work. Why is the bot so cheap? This is a hobby for me! I'm financially secure and it's a fun side project!
We will have more videos up and running on the site in the next few days. There is currently one short video clip demonstrating how the demo bot functions and makes its calculations: http://www.icmbot.com/category/media/videos/
@ Anyone who has or wants the ICM-Bot demo: feel free to try it out at the play money sit & gos on Pokerstars or even gasp the $1.20 or $3.40 real money tournaments ;)
ICM-Bot Admin on Thursday, June 12, 2008Just a suggestion: Images with text on therm (block diagrams for example) are better viewed (no blur) if saved as GIF or PNG but not JPEG format.
aquarin on Friday, June 13, 2008Another brilliantly presented and well informed article.
As a poker-botter myself, I find the subject totally facinating and look forward to each article.
Keep us the good work!
Paddy on Friday, June 13, 2008We have made a poker robot with the same method. It's free on our website go see , the name of the poker bot is WinPokerBot. Enjoy!
Win500aday on Monday, June 16, 2008Net, net, I'm glad you're posting this. On the one hand, don't give away secrets that took me a while to discover. But on the other hand, I will definitely learn something. I've built a partial bot using some of the techniques you've mentioned but I didn't know about Detours and love it. Last summer, I felt my brain stagnating since I've retired so I decided to a). learn a new computer language and b). sharpen my poker skills. I built my little bot using VB.net and love it. I mainly use it to play my preflop strategy in tourneys while I read or watch tv. It solves my 'boredom' problem (playing hands I know I shouldn't but am bored) and I've done pretty well in some MTT tourneys with it. Of course, it's not a full-fledged bot. But your article is encouraging me to take the next step. I'm going to mix C++ and VB.net. You are an excellent writer and even if you keep it at this level (not much code), I'm getting a lot out of it. Also, I'm not afraid of a 'bot explosion' because it's still pretty difficult for the average joe to accomplish. Keep up the good work.
Pro Bot on Tuesday, June 17, 2008Did the men in white coats get him?
Anonymous on Tuesday, June 24, 2008Great and excellent...
James I hope you will provide a full fledge sample-code-pack with detailed instructions. I m webdeveloper (many other languages) and interested in bot programming since several years (chats, http://www.alicebot.org/aiml.html etc.). My C++ knowledge is very limited, but I can compile and may make some modifications if I get a working example-pack.
If you provide it, it would be a great framework for people who are interested mainly in bot-logic and poker then c++ - professionals.
I hope it so mutch... and waiting on part 4
popo on Tuesday, June 24, 2008I opened an additional Thread for related discussions named Poker Hooks on: http://www.criticalsecurity.net/index.php?showtopic=30320
popo on Wednesday, June 25, 2008[...] Well, yes... but there are problems.
Firstly, checking for changes to the IAT relies on the IAT being changed AFTER the application starts. Start the application suspended, step it till the target DLL is loaded, change the IAT, inject the trampoline code as a locked page, unload the injector and then resume the application. The IAT never changes from the apps perspective... and the DLL's enumerate as normal.
Then there are transparent DLLs. You can create a passthrough DLL which gets loaded in place of the real DLL or even statically link a .lib version of the cryptoAPI into a replacement DLL with the wrapped functionality... Again, if the target DLL is third party then they cannot check for tampering as their system could break everytime microsoft did an update or they hit some alternative config - it would be a nightmare. again, they see no IAT patching and the DLL's enumerate normally.
Finally there are some nasty countermeasures if they are anal...
Lets say they periodically checksum all of their loaded modules and send them back for analysis... this rules out general build variations in third party tools and the system API because these they would see from many sources... they also audit memory management and any locked pages. Let's say short of rewriting the app theres no way we can inject anything into their space withoutthem knowing about it.
Okay, let's play with this... [...] http://www.criticalsecurity.net/index.php?showtopic=30320&pid=200845&st=0&#entry200845
IAT-Jockey on Friday, June 27, 2008@popo, @IAT-Jockey - Fascinating thread. I might have to join up over there it has me itching to ramble.
James Devlin on Saturday, June 28, 2008Would it be possible to get a copy of the bot when complete for testing?
thanks! Lucas http://www.dealtoplay.com
Lucas on Saturday, June 28, 2008ok... so what i described in the 2nd installment [the dsp co-processor] should be a drop-in intelligent agent, which shouldn't be insurmountable, since i'm only passing my hole cards and board cards each round to the dsp. This would allow for improvements in the dsp algorithms/hardware. And, I would, of course, want to keep estimated winning percentages[the output from the dsp to the bot process] as a generic/identical interface?
$pike420211 on Saturday, July 05, 2008If any of you players or bot writers need hand histories for your stats (PT, HM etc) databases you should head to HandHQ.com.
handhq on Wednesday, July 09, 2008Nice info but really is nothing new. A bot really just requires tons of time just like any programming project. Poker sites and bot makers are basically playing the game of virus writers and virus scanners play. It will go back and forth and there will never be a real winner.
abcdefg on Sunday, August 24, 2008Amazing thread, your online Poker Bot sorry is amazing.We would like to write a review on it when you are ready.
Thank you
Online poker resource on Monday, January 05, 2009Nice blog! More people should read it. If you want, you can register your blog Pokerweblogs.com. .It is free and and it automatically updates when you do an update, so visitors of our site can see when you updated your blog. The big advantage is that it will attract much more visitors to your blog.
Greets Peter
Peter on Friday, January 09, 2009http://pokerbot.node64.com/
Nex on Sunday, January 11, 2009http://www.hotnastyworld.com
Anonymous on Monday, February 02, 2009Nice job!
We did something similar here: http://www.pokerbot-smart.com/
Download Poker Bot on Sunday, March 01, 2009Great work
pokerbot on Monday, March 09, 2009Great 3rd installment to the series, I think thhttp://pokerfornia.comis a great story, and that it's great that you decided to share.
Top Online Poker Sites on Sunday, April 19, 2009Very insightful thank you
Marwan on Monday, May 18, 2009I know you get hundreds of comments but would appreciate any input if you had some for my inquiry. Is it possible that poker sites predetermine who they want to win? I was recently playing on absolute poker in a heads up match Now my internet connection is good and all and through these last hands there was definitely no lag. The last hand the opponent had about 40 chips left, less than the blind. Before the flop even came out, the screen had already popped up telling me I won the tourney. Do you know of any reason for that? Obviously I could see the incentive for a poker site to do this, rapid construction and destruction of players BR's could create gambling addicts and a lot larger rake for the house? But it seems quite extreme that absolute would pre decide who is going to win? even though in the past the were involved in one major scandal. Feel free to give me an email if you have any ideas.
Regards, Brian
Brian on Sunday, June 07, 2009Very impressive article
Poker Bot on Monday, June 08, 2009Exclusive delirium, in my opinion
acomplia on Wednesday, July 01, 2009It seems excellent idea to me is
cialis on Thursday, July 09, 2009A truly exciting read and I'm not even a coder. Just as a poker fan I find your approach to and analysis of the process of building an online poker bot fascinating!
Poker News on Tuesday, July 14, 2009Very nice article. Thank you very much
Akira on Tuesday, September 29, 2009Wow this post is very interesting. I always knew that a lot of work went into coding bots, nothing like this though. What a great insight!
Texas Holdem Poker on Monday, October 05, 2009I have 36 computers avaiable from 10pm to 7am. If anyone wants to run their bot in my computers, we can share the profits. tobyniefers@hotmail.com
Toby on Tuesday, October 20, 2009Hi everyone,
I would like to congratulate James Devlin because your web site is really amazing. From the technical point of view, it is 7 stars, not 5. It is outstanding.
Right now, I would like to find someone to cooperate with me on a poker software project whose goal is to improve SNG table selection (Pokerstars). As James Devlin states, table selection is very, very important and I need to improve that area. What I am looking for is someone that is able to develop a software that retrieves the content of any listbox on Pokerstars. I have already developed all the software needed to evaluate if we should or should not register on each specific tournament taking into account some statistic criteria ....
If you are interested, please post your email on a comment and I will contact you afterward.
Poker of Aces on Monday, November 23, 2009Hey Poker of Aces, I work on another Poker project. I focus on cash games. But maybe we could exchange some knowledge and how to investigate new Poker rooms.
Feel free to write me an email: Klabautermann176@web.de
Klabautermann on Wednesday, November 25, 2009my heard hurts after reading this but
zynga poker chips on Sunday, December 06, 2009its still pretty interesting :)
zynga poker chips on Sunday, December 06, 2009i wish i could find a bot for facebook texas holdem poker, it sure beats scouring the net for [url=http://hubpages.com/hub/Cheats-Hacks-for-Facebook-Texas-Holdem-Poker]facebook poker cheats[/url]
facebook poker chips on Wednesday, December 09, 2009I can only assume you are reaping the rewards of your bot system, how else would you have time to put these posts together? Each page I read draws me further into the world of poker and potentially how much money there is to be made from not just playing but also from [url=http://www.raketherake.com]Rakeback[/url]. I have to wonder if you use [url=http://www.paprikashop.co.uk/itemlist.php/clasrefr/HWB]Hot Water Bottles[/url] late at night when you are playing poker and earning all this money?
James on Friday, December 11, 2009I can only assume you are reaping the rewards of your bot system, how else would you have time to put these posts together? Each page I read draws me further into the world of poker and potentially how much money there is to be made from not just playing but also from [url=http://www.raketherake.com]Rakeback[/url]. I have to wonder if you use [url=http://www.paprikashop.co.uk/itemlist.php/clasrefr/HWB[/url]Hot Water Bottles late at night when you are playing poker and earning all this money?
James on Friday, December 11, 2009Really nice article i enjoyed it very much.
Unibet on Monday, December 14, 2009Great it is useful information.
odds comparison script on Friday, December 25, 2009I'm interested in casino bots.
casinos on Saturday, January 02, 2010Poker Bots are bad for everybody
Absolute Poker on Wednesday, February 03, 2010I have got some good points about pet project and the chalk out picture help a lot. You have mentioned about poker players around the world, so did you inform that a top rated online poker site offer 50-60% certain [url=http://www.pokerrakeback.com/]rakeback[/url] for all the poker player around the world.
Poker on Monday, February 08, 2010Nice academic work.
Ilker on Friday, February 12, 2010Starting a bot today :D
Ilker on Friday, February 12, 2010Really amazing ideas and views about the development of poker, This took my time to read complete article, but I really enjoyed the article - [url=http://nationalcreditreports.net]National Credit Report[/url]
National Credit Report on Friday, March 19, 2010heartbeats headphones Top watches offer variety of styles and colors both for Rolex watches and Breitling Watches.These Watches Sale are all the hottest selling cheap watches. rolex datejusts | cartier steel watches | omega watches sale
Cheap Watches on Friday, March 26, 2010Another good one post, find some good points in this.I'm interested in casino bots & poker bots also.
Atanu Ghosal on Saturday, March 27, 2010When I used to play online poker @ pokerstars I used to think some people were robots because they never talked - I bet they were robots haha. This is an amazing concept you have developed.
-Matt A lover of the necktie and creator of tiepedia - how to tie a tie
Matty Man on Thursday, April 29, 2010Presenting Bose headphones audio performance from compact and comfortable headphones. Bose in ear headphones reproduce your audio with notable clarity and range for headphones this size. And their lightweight, soft-cushioned earcups rest gently on your ears for hours of enjoyable listening.
bose headphones on Wednesday, May 26, 2010p90x workout Bose headphones Swiss replica watches ghd hair straighteners Calvin klein underwear Wholesale Replica Watches replica watches china replica shoes Gucci handbags Nike shox vibram vibram five fingers CHI Flat Iron replica swiss watches ghd jordan shoes
bose huang 123 on Wednesday, May 26, 2010Great post, just wondering how long it took you to build the poker bot?
Avi on Tuesday, June 01, 2010Great article, i would like to know if you can build the poker bot for my own poker site, if so you can contact on my email address and we can talk there.
Ronald on Monday, June 07, 2010Great article, thanks for sharing. I like very much the writings and pictures and explanations in your adress so I look forward to see your next writings. To provide useful information, please click to view
Bose headphones bose earbuds bose in ear headphones bose earphones Google SEO
Thank you!
Bose headphones on Wednesday, June 30, 2010Great article, thanks for sharing. I really like the writings and pictures and explanations in your address so I expect to see written next. Provide useful information, click to view. Regards/Jim
logo design
Summer on Wednesday, June 30, 2010If the objective is to write a bot that plays the way YOU want it to, you no longer have to go through the process of learning programming and all the tricks of being able to hook into poker clients etc. PPL - Poker Programming Language finally enables you to concentrate on the important part - ie playing winning poker. PPL gives you access to all the poker table details that can be used to control exactly how the bot plays in every conceivable situation. It is designed for poker players and not for programmers. It is simple yet very powerful. If you know poker you will take to it like fish to water!
botter on Wednesday, June 30, 2010The video game market, once dominated by old monarchs Nintendo and Sony, was forced to make room for Microsoft and the Xbox, and no one in the industry would disagree with the fact that they are here to stay.
online loans on Friday, July 09, 2010I’m very interested in your article, and I suggest you to browse some online stores to find something different. Such as: ghd and ed hardy, ugg boots, ghd straightener. I believe you would like the christian louboutin, ugg. What’s more, the p90x, jordan shoes, nfl jerseys, chi flat iron t shirt would give you an unifque life.
edhardy on Tuesday, July 20, 2010I’m very interested in your article, and I suggest you to browse some online stores to find something different. Such as: [url=http://www.bestghdstraighteners.com/]ghd hair straighteners uk[/url]and[url=http://www.edhardyshirtsclub.com/]ed hardy t shirts[/url], [url=http://www.u99snowboots.com/]cheap ugg boots[/url], [url=http://www.newghdstraightener.com/]ghd straightening iron[/url]. I believe you would like the[url=http://www.2010louboutin.org/]christian shoes[/url],[url=http://www.discountu99boots.com/]discount ugg boots[/url]. What’s more, the [url=http://www.p90xworkoutscheduledvd.com]p90x workout[/url], [url=http://www.mydiscountjordanshoes.com/]cheap jordan shoes[/url],[url=http://www.nfljerseysshopping.com/]youth nfl jerseys[/url], [url=http://www.chiflatironhair.us/]chi hair flat iron[/url]t shirt would give you an unifque life.
edhardy on Tuesday, July 20, 2010I’m very interested in your article, and I suggest you to browse some online stores to find something different. Such as: ghd and ed hardy, ugg boots, ghd straightener. I believe you would like the christian louboutin, ugg. What’s more, the p90x, jordan shoes, nfl jerseys, chi flat iron t shirt would give you an unifque life.
edhardy on Tuesday, July 20, 2010nice article. keep post like this...
Fendi replica watches on Tuesday, July 20, 2010excellent post
tanning beds on Tuesday, July 20, 2010Bose Has launched its cool offering the bose on ear headphones for a long time.it's still very popular in the world.people love it very much.
neamm on Tuesday, July 20, 2010Building a bot is unethical, it is against the sites rules and it screws over professional card players like myself. I hope you die in a grease fire.
Donkament guy on Wednesday, July 21, 2010i believe you are a good writer, but have you erver thought to write some special artcals for peopel who likes shopping very much. for exaple, the artical aboutlouis vuitton handbags orvibram fivefingers,ghd orchristian louboutin,ugg bootsand swiss watches as well asmichael jordan shoeschi hair straightener,nfl football apparel, t shirts. i think more and more people would comr to read your blogs.
vibram fivefingers on Thursday, July 22, 2010Life will change what you are but not who you are;
Blu-ray Ripper on Thursday, July 22, 2010Marry a person who likes talking; because when you get old, you’ll find that chatting to be a great advantage
blu-ray ripper on Thursday, July 22, 2010No matter louis vuitton or Gucci ,they both stand for a luxury taste and an elegant temperament. To show your differnece,going out with wearing louis vuitton handbags,Gucci handbags or Chanel handbags is your own choice,but I think because the brilliant quality and technique of louis vuitton bags , only theLouis Vuitton handbas can set off that you are pretty extraordinary.
cao on Friday, July 23, 2010No matter louis vuitton or Gucci,they both stand for a luxury taste and an elegant temperament. To show your differnece,going out with wearing Louis Vuitton handbas,Gucci handbags or Chanel handbags is your own choice,but I think because the brilliant quality and technique of louis vuitton bags , only the louis vuitton handbags can set off that you are pretty extraordinary.
cao on Friday, July 23, 2010Nice article!
fat burning furnace scam or real
Jessica Connors on Friday, July 23, 2010tony p90x p90x workout p90x P90X nutrition p90x extreme p90x beachbody p90x plus P90x dvd p90x fitness ghd ghds cheap ghd hair cheap straighteners ghd hair Straighteners best hair straighteners wholesale ghd ceramic straighteners hair iron buy hair straighteners pink hair straighteners GHD Ceramic Hair Straighteners
p90x on Friday, July 23, 2010aspire 5500 btp-arj1 batbl50l6 travelmate 4200 d630 d820 inspiron 1520 inspiron 1525 Inspiron-630m Inspiron-6400 Inspiron-9300 Inspiron-B130 Inspiron-mini-9 m1210 xps M1330 dv1000 dv2000 dv8000 dv9000 nc8230 r3000 8375 bp-8089 pa3395u-1brs pa3465u-1brs
sdsa on Saturday, July 24, 2010Inspiron XPS Gen 2 . Laptop Batteries , Batteries , hip hop abs ,hip hop abs , hip hop abs coupon , hip hop abs dvd , Insanity , insanity popular ,Insanity , Insanity Workout , The Beatles ,The Beatles DVD ,The Beatles ,The Beatles DVDs ,The Beatles Stereo CD DVD Box set ,The Beatles Mono CD Box Set ,The Beatles Postcard Box Set ,Rosetta Stone , p90x , rosetta stone spanish , Rosetta Stone OEM . Buy OEM Rosetta Stone , Learn Spanish , Learn Russian . Learn-Japanese , Learn German , wedding dress wedding dress discount wedding dress , Learn French , Learn English , Learn Chinese ,Learn Arabic ,Learn Italian , Learn Korean , Learn Portuguese , dvd boxset .wedding dress ,cheapest wedding dress ,cheapest wedding dresses ! Dell GD761 battery Dell GK479 battery Dell GW240 battery Dell PC764 battery Dell 75UYF battery Dell 8N544 battery Dell NF343 battery , ghd ghd straighteners Dell D5318 battery Dell Y9943 battery Dell RN873 battery Dell G5260 battery 312-0660 Inspiron 1100 Inspiron 1150 p90x Inspiron 1210 Inspiron 1300 Inspiron 1318 Inspiron 1420 inspiron 1425 Inspiron 1501 Inspiron 1520 Inspiron 1521 Inspiron 1525 Inspiron 1526
Inspiron 1720 Inspiron 1721 INSPIRON 2600 INSPIRON 2650 Inspiron 4000 Inspiron 4100 Inspiron 4150 Inspiron 500m Inspiron 5100 Inspiron 510m Inspiron 5150 Inspiron 5160 Inspiron 6000 Inspiron 600m Inspiron 630m Inspiron 6400 Inspiron 640m Inspiron 700m Inspiron 710m p90x Inspiron 8000 Inspiron 8100 Inspiron XPS M170 Latitude 120L Latitude C400 Latitude C500 Latitude C510 Latitude C540 Latitude C600 Latitude C610 Latitude C640 Latitude C800 Latitude C810 Latitude C840 Latitude CP Latitude CPi Latitude CPIA Latitude CPIR Latitude CPM Latitude CPT Latitude CPX Latitude CS Latitude D400 Latitude D410 Latitude D420 Latitude D430 Latitude D500 Latitude D505 Latitude D510 Latitude D520 Latitude D600 Latitude D610 Latitude D620 Latitude D630 Latitude D800 Latitude D810 Latitude D820 Latitude D820 Latitude D830 Latitude PPL Latitude PPX Latitude X1 Precision M65 Vostro 1000 Vostro 1310 Vostro 1320 Vostro 1500 Vostro 1510 Vostro 1520 Vostro 1700 Vostro 1710 Vostro 1720
Vostro 2510 XPS M1210 XPS M1330 XPS M140 XPS M1530 01X284 1691P 1G222 1K500 1X793 2G218 2G248 2M400 2N135 2P700 310-0083 310-0083 310-6321 312-0022 312-0095 312-0279 312-0305 312-0306 312-0314 312-0315 312-0340 312-0383 312-0386 312-0445 312-0566 312-0660 312-0662 312-0663 312-0725 312-0810 312-3250 3149C 3H625 3R305 451-10365 451-10473 451-10528 451-10528 451-10703 4E368 4E369 5081P 5208U 53977
P90X 66912 6H410 6T473 75UYF 7F948 7T670 851UY 8F867 8F871 8F967 8M815 8N544 9H348 9H350 9T119 9T255 9T686 9X821 BAT1194 BAT3151L8 BATDW00L BDM01 C5331 C5340 C647H C7786 CG036 CG039 D5318 D5540 D5561 D7310 DF192 DF230 DF249 F0590A01 F5136 F5608 F5635 F707H FF232 FG442 FP282 FT080 G5226 G5260 G5345
GD761 GD761 GG386 GK479 GW240 GX047 HD438 HF674 HP297 KD186 N956C NF343 PC764 PD942 RC107 RN873 RU030 T116C TC030 TD175 TK330 TT485 UD267 W2391 WR050 WW116 XD736 XR693 XT828 XT832 XT832 Y4367 Y4546 Y5179 Y5180 Y6142 Y9943 YD165 Dell AC Adapter, dell inspiron ac adapter, p90x p90x p90x , laptop battery, DELL laptop battery dell inspiron battery, dell latitude d620 battery Inspiron 8200 Inspiron 8500 Inspiron 8600 Inspiron 910 Inspiron 9100 Inspiron 9200 Inspiron 9300 Inspiron 9400 Inspiron B120 Inspiron B130 Inspiron E1405 Inspiron E1505 Inspiron E1705 Inspiron Mini 12 Inspiron Mini 9 Inspiron Mini 9N Laptop Battery
aspire 5500 btp-arj1 batbl50l6 travelmate 4200 d630 d820 inspiron 1520 inspiron 1525 Inspiron-630m Inspiron-6400 Inspiron-9300 Inspiron-B130 Inspiron-mini-9 m1210 xps M1330 dv1000 dv2000 dv8000 dv9000 nc8230 r3000 8375 bp-8089 pa3395u-1brs pa3465u-1brs
sdsa on Saturday, July 24, 2010PerformingGraham for sale that will create a one-wayswiss watches backlink to your website whichMaurice Lacroix watches is a good point to have. It is Patek Philippe watchesa time-consuming Tag Heuer for saleprocess even though it produces good outcomes U-boat for saleand works. You can also swiss watchespost comments on blogs alongMaurice Lacroix watches together with your link, but make sureGraham watches these blogs are do-follow, which dolce & gabbana handbagsindicates the link that youreplica coach handbags simply post will probably be replica handbagscounted by the search engines jimmy choo replicaas a backlink.There are many thingsversace replica handbags that contribute to online businessjuicy couture replica failure, and the lack of good action thomas wyldeis surely one of the deadliest business-killersdolce gabbana handbags on the net. Take action like by no means chloe handbags replicaprior to, and don’t get struck by analysis paralysisburberry replica. Your achievement lies in your rapid actionchanel replica and how well you apply numerous strategies.
replica watches on Saturday, July 24, 2010I’m very interested in your article, and I suggest you to browse some online stores to find something different. Such as: ghd and ed hardy, ugg boots, ghd straightener. I believe you would like the christian louboutin, ugg. What’s more, the p90x, jordan shoes, nfl jerseys, chi flat iron t shirt would give you an unifque lif
christian louboutin on Saturday, July 24, 2010nike air jordan 2010 nike air jordan 5 nike air jordan 3 nike air jordan 11 cheap nike air jordan 2 nike air jordan 1 nike air jordan shoes discount nike air jordan shoes nike air jordan 6 wholesale nike air jordan 1 discount nike air jordan 6 nike air jordan 7 nike air jordan 8 top quality nike air jordan shoes 23 nike air jordan 21 nike air jordan 22 nike air jordan 6 rings cheap nike air jordan 22 nike air lebron james shoes nike air lebron james shoes nike air jordan 2010 nike air joredan lebron james nike air jordan 2009 discount nike air jordan 2009 nike lebron james wholesale nike air jordan 2010 cheap nike air jordan 2009 discount nike air jordan 19 cheap nike air jordan 3 discount nike air jordan 18 brand nike air jordan 12 wholesale nike air jordan 2 nike air jordan 13 nike air jordan 14 nike air jordan 6 rings discount jordan shoes7 discount jordan shoes1 jordan shoes2010 jordan shoes 6 rings cheap jordan shoes2 discountjordan shoes3 discount jordan shoes4 jordan shoes uk23 jordan shoes classic bw22 cheap jordan shoes 21 ltd discount jordan shoes20 discountjordan shoes19 jordan shoes 18 uk nike air jordan shoes 17 cheap nike air jordan shoes 16 discount air jordan shoes 15 discount air jordan shoes 14 nike air jordan shoes 3 uk nike air jordan shoes 13 cheap nike air jordan shoes 11 discount air jordan shoes 6 discount jordan shoes 10 nike air jordan shoes 8 nike air jordan shoes 7 cheap louis vuitton bags cheap kobe bryant shoes cheap lebron james shoes .
cheapjordan on Saturday, July 24, 2010I will keep visiting this blog very often. Blu ray ripper /
ipad converter on Sunday, July 25, 2010The variety links of london items bearing depends on the occasion. You are plain, but you are elegant. links of London sweetie braceletIf presence a groove, especially nightfall outfit, you are allowed to be very gentle in truth. What you should do is to links of london charms choose some delicate sweetie bracelets with your subtle sensation of fashion on Christmas Day, Easter, Halloween and Valentines Day. Discovering links of London friendship bracelet on the net is an excellent choice for your needs and can also assure you may benefit from the best insurance coverage at the best price tag. The links of London braceletis one kind of those brands that basically level the start a time honored design and style and design untreated. links of london necklace and links of london earringswill be the consultant of level and higher personal taste; so many people contain the hopes for donning links of London sweetie bracelets. Nevertheless, in the large price, so most of us cannot pay the big money. links of London friendship bracelets charm bracelets links of london sale charm bracelet silver friendship bracelets links of london charm bracelet
links of london on Monday, July 26, 2010ed hardy, cheap ed hardy, ed hardy clothing, ed hardy outlet, ed hardy jeans, ed hardy bags, ed hardy swimwear, ed hardy shirts, ed hardy tee, ed hardy caps, ed hardy purse, ed hardy board shorts, ed hardy shoes, ed hardy for men, ed hardy for women, ed hardy jeans for women.
cheap ed hardy on Tuesday, July 27, 2010ed hardy, cheap ed hardy, ed hardy clothing, ed hardy outlet, ed hardy jeans, ed hardy bags, ed hardy swimwear, ed hardy shirts, ed hardy tee, ed hardy caps, ed hardy purse, ed hardy board shorts, ed hardy shoes, ed hardy for men, ed hardy for women, ed hardy jeans for women.
cheap ed hardy on Tuesday, July 27, 2010Supra Skytop, Supra Skytop
supra shoes skytop, supra shoes skytop
supra skytop 2009, supra skytop 2009
supra skytop 2009 on Thursday, July 29, 2010
Information on Cheapest and best Louis vuitton products. Date: Apr 12,2010; Views: 73; Author: lisa; Edithor: lisa. Although Fake Louis vuitton are one of ...
sale4louisvuitton.com is a online shopping store for 2100 Authentic Louis vuitton shop and Louis vuitton Handbags.
Welcome to our fabulous collection Louis vuitton Collection! We have all the best and newest styles in louis shop - all the best ...
Wholesale Cheap Designer Replicas Best designer authentic replica Louis vuitton online - Authentic replica Louis vuitton
louisvuitton4 on Thursday, July 29, 2010Wholesale NFL Jerseys
Cheap NFL Jerseys
NFL Jerseys
NFL Football Jerseys
Women NFL Jerseys
Kid NFL Jerseys
Super Bowl Jerseys
Super Bowl NFL Jerseys
Throwback Jerseys
Throwback NFL Jerseys
Cheap Throwback Jerseys
Wholesale Throwback Jerseys
Cheap Super Bowl Jerseys
Wholesale Super Bowl Jerseys
youth nfl jerseys wholesale
youth nfl jerseys cheap
nfl youth jerseys
Baltimore Ravens Jerseys
Chicago Bears Jerseys
Cincinnati Bengals Jerseys
Denver Broncos Jerseys
Dallas Cowboys Jerseys
Green Bay Packers Jerseys
Indianapolis Colts Jerseys
Minnesota Vikings Jerseys
New England Patriots Jerseys
New Orleans Saints Jerseys
New York Jets Jerseys
Arizona Cardinals Jerseys
Buffalo Bills Jerseys
Atlanta Falcons Jerseys
Carolina Panthers Jerseys
Cleveland Browns Jerseys
Houston Texans Jerseys
Detroit Lions Jerseys
Jacksonville Jaguars Jerseys
Kansas City Chiefs Jerseys
Miami Dolphins Jerseys
New York Giants Jerseys
Philadelphia Eagles Jerseys
San Francisco 49ers Jerseys
Oakland Raiders Jerseys
Seattle Seahawks Jerseys
Pittsburgh Steelers Jerseys
St Louis Rams Jerseys
San Diego Chargers Jerseys
Tampa Bay Buccaneers Jerseys
Tennessee Titans Jerseys
Washington Redskins Jerseys
Ray Lewis Jerseys
Ed Reed Jerseys
Joe Flacco Jerseys
Terrell Suggs Jerseys
Dick Butkus Jerseys
Greg Olsen Jerseys
Matt Forte Jerseys
Devin Hester Jerseys
Walter Payton Jerseys
Brian Urlacher Jerseys
Lance Briggs Jerseys
Jay Cutler Jerseys
Carson Palmer Jerseys
Rey Maualuga Jerseys
Chad Johnson Jerseys
Demarcus Ware Jerseys
Jason Witten Jerseys
Terrell Owens Jerseys
Felix Jones Jerseys
Marion Barber Navy Jerseys
Marion Barber Jerseys
Emmitt Smith Jerseys
Miles Austin Jerseys
Roger Staubach Jerseys
Troy Aikman Jerseys
Tony Romo Jerseys
Eddie Royal Jerseys
Brandon Marshall Jerseys
Aaron Rodgers Jerseys
A.J. Hawk Jerseys
Donald Driver Jerseys
Greg Jennings Jerseys
Peyton Manning Jerseys
Dallas Clark Jerseys
Robert Mathis Jerseys
Marvin Harrison Jerseys
Drew Brees Jerseys
Marques Colston Jerseys
Pierre Thomas Jerseys
Reggie Bush Jerseys
Jeremy Shockey Jerseys
Tarvaris Jackson Jerseys
Adrian Peterson Jerseys
Jared Allen Jerseys
Mark Sanchez Jerseys
Thomas Jones Jerseys
Leon Washington Jerseys
Brett Favre Jerseys
buynflshop on Thursday, July 29, 2010The Best Louis Vuitton Millionaire Replica Sunglasses The best inspired version of the Louis Vuitton store to date! The
'Millionaire Luxe' features
High Quality Louis Vuitton wallets, Louis Vuitton Replica wallets lowest price. Wholesale price 35% - 75% off.3-7 Day Louis
Vuitton damier shipping, Free shipping now.
Just how do you tell a best Louis Vuitton online store from the real thing? ... getting the perfect back-to-school
outfit, we've got you covered with the best tips.
Best Replicas Wholesaler, Wholesale high quality and lowest price replica watches, ... Cartier Lighters Gold Series ·
tItlE="Louis Vuitton wallets">Louis Vuitton wallets
auto 3 fold umbrella louis vuitton on Thursday, July 29, 2010This is nice post which I was awaiting for such an artice and I have gained some useful information from this site. Thanks for sharing this information.
5.11 tactical pants on Thursday, July 29, 2010In any case, new Air Jordans have the immense popularity in the basketball palyers. The jordan sneaker which is catched on by more people undoubtedly. We can provide you the best quality of all jordan shoes,if you want to buy cheap jordan shoes or any kind of jordans sneakers.
jordan sneaker on Friday, July 30, 2010essay essay writing essay writing service essay writing service uk
jane on Friday, July 30, 2010Pool Temperature Madera Jobs Madera Pest Control Madera Dentist Merced Dentist Visalia Dentist Modesto Dentist Fresno Limousine Fresno Granite briefcases leather leather briefcases prospect solution | prospect solutions | prospectsolution | prospectsolutions | prospectsolution.com prospect solution | prospect solutions | prospectsolution | prospectsolutions | prospectsolution.com prospect solution | prospect solutions | prospectsolution | prospectsolutions | prospectsolution.com
carmi on Friday, July 30, 2010Go and catch your louis vuitton handbags from here, we will do our best to serve for you; If you're looking for Air Jordan shoes, you may have realized it is a difficult task to find them. We strive to provide you with information on online shoe stores that carry authentic Nike Air jordan shoes; nike shoes unlike a lot of regular running shoes, its flexibility provides a world of comfort on the run or while walking around, buying it from our mall and you will benefit a lot; When it comes to retro, cool designs Adidas does a great job with every sneaker release. At Sole Heaven, we have a really impressive arsenal of adidas shoes to do just the job; It is time for the Gucci fans to make some changes, please treat yourself with a different classic gucci handbags here, that will be a great surprise; Where can you find ugg boots for sale? Learn how smart buyers look for uggs for sale. Find the best online offers for directions.
nike shoes on Friday, July 30, 2010Hello! I find this review very interesting !Vibram FiveFingers
Vibram Five Fingers on Friday, July 30, 2010fat burning furnace scam or real.
property management on Friday, July 30, 2010posts that are very evocative readers like me to understand more about what is contained in this article Replica Watches
Replica Watches on Friday, July 30, 2010I had not understood the purpose of this article, but after a study it more deeply, I know now. Replica Watches
Replica Watches on Friday, July 30, 2010Yeah, after a study it more deeply, I know now.Replica Watches
Replica Watches on Friday, July 30, 2010Replica Watches
Replica Watches on Friday, July 30, 2010Vibram FiveFingers
wewr on Friday, July 30, 2010Sorry i not mean spam,...just like your article,...cheers [Replica Watches][1]
[1]: http://www.superior-replica.com/"Replica Watches"
wewr on Friday, July 30, 2010[Replica Watches][1]
[1]: http://superior-replica.com/"Replica Watches"
wewr on Friday, July 30, 2010Hello! I find this review very interesting !Vibram FiveFingers
mr.cool on Friday, July 30, 2010