Today’s PokerStars Update Broke Poker Copilot

Poker Copilot doesn’t recognise the new tables in today’s PokerStars’ update. If you are playing on the 100-250bb, 40-100bb, or 20-55bb tables, Poker Copilot won’t co-operate.

I’m working on a fix and hope to deliver in the coming hours. Stay tuned.

PokerZebra 0.4: Now with "random"

PokerZebra is the working name for a Texas Hold’em Poker Odds Calculator for Mac OS X. You can download PokerZebra 0.4 here. Leopard or Snow Leopard required. I suspect it will only work on Intel macs, but I could be wrong.

You can now evaluate a hand against an opponent who has any two cards, by using the word “random”.

Screen shot 2010-04-12 at 4.07.05 PM.png

This was the hardest part of this little project. It required me getting familiar with running a cancellable task in the background in Objective-C. I usually program in Java, so my Objective-C skills are basic. Cancellable background tasks that provide ongoing feedback in the GUI is an advanced topic in any computer language I’m familiar with, so it has been a steep learning curve for me. (Note to self: maybe it shouldn’t be an advanced topic? Maybe language designers need to make this easier?)

Once I’ve fixed any issues that arise in this update, I can add specific ranges, such as AA (any two aces), 77+ (any pocket pair 77 or higher), or K3+ (any hand with a king and a 3 or higher).

There’s also an app icon, created by Rob from the Netherlands:

pokerzebra.jpg

Here’s what you need to know:

  • This works on Intel Macs running Leopard (Mac OS X 10.5) and Snow Leopard (Mac OS X 10.6). Perhaps I’ll be able to add PPC and Tiger support soon. No promises though.
  • Specific hands (eg “Ah Kh”) are supported, as is random hands (“random”). Currently other ranges of hands are not supported. This will come soon.
  • Send feedback and bug reports to pokerzebra@pokercopilot.com

Need Tech Support? Find a Kid

A friend wrote me a desperate email, asking if I can help her work out how to use the special features in her new Samsung mobile phone. You see, I’ve long been the go-to geek for my family and friends. But I couldn’t help this desperate woman. Sadly, I’ve never had much luck mastering mobile phones until I got an iPhone. I think what I love about my iPhone the most is finally I can find and use the nifty features packed into modern phones.

My 10-year-old niece has started posting really silly and entertaining videos on facebook. I figured you needed third-party software to do this stuff, so I asked her how she did it. “Photo Booth”, she replied, which she uses on her nanna’s MacBook . (Actually she said “Photon Booth”, which I think is also a cool name.) Ri-ight. She’s telling me that a stock-standard Mac has all the software she needs to do this. I didn’t know Photo Booth made videos that you could upload to facebook so easily. But a 10 year old figured it out. Figured out the whole thing.

The next time I get a new computer I’m going to find a kid to show me how to use it. I don’t mean, how to do the normal things like editing a file, playing some music, and coding. I mean, the cool gimmicky features that make computers fun. I bet she knows how to use your Samsung mobile phone, too.

You are breaking my heart, Apple

Want to develop an iPhone app? Here’s a section of the updated iPhone Developer License Agreement that has gained instant infamy:

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).

I _want_ to be an Apple fanboy. But Apple makes it hard for me when they pull stunts like this. Apple is dictating what computer languages you can use to develop an iPhone App. You can’t code in your favourite language unless that language is Objective-C, C, C++, or JavaScript. You can’t write in another language, even if you use an automated tool to convert your code into one of Apple’s happy languages. Dear Apple, I – and hundreds of other developers – are not happy.

All-In Equity Value Chart Preview Ready for Download

This is not an official Poker Copilot update. This is a preview release for those who are keen to see the new features: All-in Equity Value Chart, and the first two Leak Detectors.

I’ve spent a good part of today manually going through hands from various poker rooms, calculating what I think the all-in equity value should be, and comparing it to what Poker Copilot calculates. There are a couple of known problems still with unusual situations. Split pots also need to be handled better.

You can download the latest preview release of Poker Copilot (2.36) here. Feedback appreciated, especially if you uncover a heinous problem.

Java Swing Test Frame

This post has nothing to do with poker.

I often need to test a specific aspect of Java’s Swing GUI toolkit to reproduce a problem. In order to help me and others avoid having to rewrite boiler-plate code to make the smallest possible reproduction case, I’m posting the basic code I use here. Consider it an easily-found memo to myself:



import javax.swing.*;
import java.awt.*;

public class SwingTestFrame {

public static void main(String[] args) {
createAndLaunchGui();
}

private static void createAndLaunchGui() {
// UIManager.setLookAndFeel throws "nothing we can do about it" style exceptions. Best thing to do is
// to wrap as an unchecked exception
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
throw new RuntimeException(e);
}

// using invoke later avoids possible obscure phantom timing issues
// as (almost) all GUI code should be run on the Event Dispatch Thread
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final JFrame frame = new JFrame("Java Swing Test Frame");

// when the close window control is clicked, we want the app to exit
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// using a panel as a top level component to hold all other GUI controls is a flexible approach
final JPanel panel = new JPanel();
addComponentsToPanel(panel);
frame.getContentPane().add(panel);

frame.setPreferredSize(new Dimension(600, 400));
// pack layouts the frame according to the current LayoutManager
frame.pack();
// setLocationRelativeTo(null) centres the frame
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

// modify this to build your GUI
private static void addComponentsToPanel(JPanel panel) {
panel.add(new JLabel("Hello cruel world"));
panel.add(new JButton("Do Stuff"));
}


}

Once more without most comments:



import javax.swing.*;
import java.awt.*;

public class SwingTestFrame {

public static void main(String[] args) {
createAndLaunchGui();
}

private static void createAndLaunchGui() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
throw new RuntimeException(e);
}

SwingUtilities.invokeLater(new Runnable() {
public void run() {
final JFrame frame = new JFrame("Java Swing Test Frame");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

final JPanel panel = new JPanel();
addComponentsToPanel(panel);
frame.getContentPane().add(panel);

frame.setPreferredSize(new Dimension(600, 400));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

// modify this to build your GUI
private static void addComponentsToPanel(JPanel panel) {
panel.add(new JLabel("Hello cruel world"));
panel.add(new JButton("Do Stuff"));
}


}

Are Hold’em Manager’s All-in Equity Value Calculations Reliable?

Yesterday I asked for help in working out why Hold’em Manager’s “All-in Equity Value Difference” for a specific hand wasn’t what I thought it should be.

Loyal Poker Copilot customer Noah suggested I post the problem on the 2+2 forums. So I did. And I received not one, but two excellent answers. Both answers were from the teams behind other poker tracking software. In both cases their software calculated the same value as my software. Nobody got Hold’em Manager’s result.

This has me concerned. Based on some forum discussions I had read, I assumed Hold’em Manager was the gold standard in All-in EV calculations. Now I suspect this is not the case. I have found a significant rate of what I believe to be errors in Hold’em Manager’s All-in EV calculations. This makes the “All-in Equity Value Chart” useless as a tool.

It also raises a problem for testing Poker Copilot. Without a reliable source to measure all-in equity value calculations against, I can’t be sure that Poker Copilot’s calculations are reliable.

So here’s what I am going to do: Tomorrow I’ll release a Poker Copilot update “for the brave only”. It won’t be an official, full release. It will be only for seeking feedback from the “early adopters” on new features such as the “All-in Equity Value Chart”. Meanwhile I’ll measure my All-in EV test cases more widely against a bunch of other poker tracking tools.

EDIT: In reading this back, I think I seem too hard on Hold’em Manager, which, by all accounts, is an excellent product. All that happened is I uncovered some possible calculation problems in one small section of Hold’em Manager.

HELP! All-in Equity Value Difference Calculation

There are still some hands in which I just can’t make Poker Copilot calculate the same all-in equity value as Hold’em Manager, with no idea why.

Can you see what I’m doing wrong here? I’d appreciate any feedback, so that I can get the formula right and meet my self-imposed Friday deadline.

Given that for the player stevoski111:

  pot              = 545 cents
rake = 36 cents
amountWon = 509 cents
equityPercentage = 87.2% (and Hold'em Manager agrees)

I’m using this formula, which I thought was the formula used by Hold’em Manager:

  All-in EV Diff = equityPercentage * (pot - rake) - amountWon 
= 0.872 * (545 - 36) - 509
= - 65 cents

Hold’em Manager thinks the All-in EV Diff is -58 cents. Poker Copilot thinks the All-in EV Diff is -65 cents.

Here’s the hand:

Full Tilt Poker Game #17777514296: Table Mach 10 - $0.05/$0.10 - No Limit Hold'em - 5:30:33 ET - 2010/01/21
Seat 1: 17Rob98 ($9.90)
Seat 2: Eeevie ($1.44)
Seat 3: rafalek007 ($7.84)
Seat 4: lataupe28 ($19.36)
Seat 5: Nadejde ($20.40)
Seat 6: stevoski111 ($2.35)
Seat 7: PKRshiva ($3.55)
Seat 8: Representive ($8.34)
Seat 9: jigglypuff64 ($4.55)
17Rob98 posts the small blind of $0.05
Eeevie posts the big blind of $0.10
The button is in seat #9
*** HOLE CARDS ***
Dealt to stevoski111 [Jc Js]
rafalek007 raises to $0.35
lataupe28 folds
Nadejde calls $0.35
stevoski111 raises to $0.60
PKRshiva folds
Representive folds
jigglypuff64 folds
17Rob98 folds
Eeevie folds
rafalek007 calls $0.25
Nadejde calls $0.25
*** FLOP *** [4h Qs 6h]
rafalek007 checks
Nadejde checks
stevoski111 bets $0.65
rafalek007 folds
Nadejde raises to $3.90
stevoski111 calls $1.10, and is all in
Nadejde shows [Th Td]
stevoski111 shows [Jc Js]
Uncalled bet of $2.15 returned to Nadejde
*** TURN *** [4h Qs 6h] [7d]
*** RIVER *** [4h Qs 6h 7d] [Jd]
Nadejde shows a pair of Tens
stevoski111 shows three of a kind, Jacks
stevoski111 wins the pot ($5.09) with three of a kind, Jacks
*** SUMMARY ***
Total pot $5.45 | Rake $0.36
Board: [4h Qs 6h 7d Jd]
Seat 1: 17Rob98 (small blind) folded before the Flop
Seat 2: Eeevie (big blind) folded before the Flop
Seat 3: rafalek007 folded on the Flop
Seat 4: lataupe28 didn't bet (folded)
Seat 5: Nadejde showed [Th Td] and lost with a pair of Tens
Seat 6: stevoski111 showed [Jc Js] and won ($5.09) with three of a kind, Jacks
Seat 7: PKRshiva didn't bet (folded)
Seat 8: Representive didn't bet (folded)
Seat 9: jigglypuff64 (button) didn't bet (folded)

The Poker Copilot Leak Detector

About six months ago I started work on a series of “leak detectors”. These analyse different aspects of your play, helping to find places where you are leaking money in your poker game. The leak detectors are aimed at beginner to intermediate level players of Full Table No Limit Hold’em. For various reasons I shelved this development in a half-finished state.

In the coming update of Poker Copilot, the first two of these leak detectors will be available and working: Preflop Aggression and Positional Awareness:

Screen shot 2010-04-06 at 10.46.12 PM.png
Screen shot 2010-04-06 at 10.54.07 PM.png

The idea comes from a classic post in the 2+2 poker forums entitled How to Use Poker Tracker. But rather than making you have to hunt down instructions and follow them, I want Poker Copilot to do this analysis for you.

Something for PC similar to Poker Copilot

Rob Smith asks,

Poker Copilot is great, but I’m curious which PC program is most like Poker Copilot?

I often hear of Hold’em Manager and Poker Tracker for PC, but these have quite different styles of user interface than Poker Copilot.

If you have an answer for Rob post it here.