Version 1.3 beta Updated

There were a couple of calculation bugs in the Poker Copilot version I linked to in the previous post. Also, the HUD performance was not good with lots of hands – because I forgot GUI basics (for the techies: do long-running calculations in a background thread, update the screen in the event-handling thread).

So here’s an updated version 1.3 beta:

New Update with HUD Stats

Today I’ve put together an alternative HUD view, showing a bunch of stats in tabular form. Here’s the new view:

And as it was (and still is, if you choose):

I’m misusing standard Apple buttons. But as I intend to dramatically enhance the HUD over the next month or two, I don’t want to spend too much time on this interim solution.

You can download this Poker Copilot update now.

Using Mac OS X System Images in Java

Here’s a Java feature in Leopard: You can use the system images, found on Apple toolbars and applications, in Java. They exist in a virtual file system called “NSImage”. Here’s an example to show the image for “Icon View”.

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class ScratchSpace {

public static void main(String[] args) {
JFrame frame = new JFrame();
final Container pane = frame.getContentPane();
pane.setLayout(new FlowLayout());

Image image = Toolkit.getDefaultToolkit().getImage(“NSImage://NSIconViewTemplate”);
pane.add(new JLabel(“Icon”, new ImageIcon(image), SwingConstants.LEFT));


frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {

The full list of system icons can be found here. Scroll down the page to see examples of each icon.

Alas, this doesn’t work on Tiger. To get around this, you can use Leopard to create a copy of the image as a PNG. Then you can use the PNG. This code creates a PNG file for a specified image template.

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.RenderedImage;

public class ScratchSpace {

public static void main(String[] args) throws IOException {

private static void writeImage(String imageName) throws IOException {
Image image = Toolkit.getDefaultToolkit().getImage(“NSImage://” + imageName);
ImageIO.write((RenderedImage) image, “png”, new File(imageName + “.png”));

Incremental Improvements: Every day, every way

I’m big on continuous improvement in software development. Every week, every day, I hope to find something I can do marginally better. If that change makes my one-person show only a fraction of a fraction better, it beats a fraction of a fraction worse.

Some marginal things I have done to make things better for users and to make more profit for me include:

  • Using Typinator to store oft-typed e-mail phrases. This gives me the ability to respond to e-mails quicker, with less proof-reading. The second time I find myself typing a certain paragraph, I stop writing, enter the text into Typinator, then use the new shortcut.
  • Using Get Satisfaction. This reduces my e-mail load and increases the openness of my development, while keeping a healthy level of communication with my best customers. (My best customers are the ones who tell me what they like, what they don’t like, and what they want to see next).
  • Automating the license key generation system. At first this was a semi-automated process, but still needed me to “flick the switch” to send out a new license key. To do this I needed to be awake and at the computer. This meant that the first thing I did on waking in the morning was groggily sitting in front of the computer to find if anyone had ordered while I was sleeping and was awaiting a license key. Not ideal. But now new customers receive a license key within minutes of ordering. New users are happier and I can sleep restfully.
  • Always looking for ways to tweak Poker Copilot for more speed or for easier use. For example, did you notice the newly-added red section in some of the graphs in version 1.3? Suggested by a user, by the way. Or did those of you with tens of thousands of hand histories notice the screen updates are snappier?
  • Implementing an “empty in-box” policy, systematically handling e-mails to save me time. I check my inbox twice a day, deciding instantly for each piece of e-mail to delete it, to respond immediately, or to move to the “handle later” folder if I can’t address it yet.
  • Every time someone reports a bug, I add a unit test that will fail until I fix that bug. From then on, the unit test ensures the bug stays fixed.

There’s still plenty of improvements to make, to the processes, my systems, and of course, to my software. Continuous improvement is never a completed task. I can’t make everything perfect at once. But I can make things a little bit better tomorrow than they were yesterday.

Every week, every day, I aim to do something marginally better.

Poker Copilot 1.3 beta Available

To my loyal blog readers:

You can download the beta release of Poker Copilot 1.3 (aka the Funky Dashboard version) now.

What’s new:

  • the dashboard, of course!
  • more graphs
  • Stake Level summary
  • Position summary
  • filtering by table size (heads up, 6 max, 9 max, 10 max)
  • loads of new statistics
  • tooltip help to explain the statistics
  • a “Casino Detector” to make getting started easier
  • some performance improvements
  • some basic help pages
  • several bug fixes

Known issues:

  • The tournament stats for total winnings, and winnings/100 hands are meaningless because they are based on chips rather than buy-in and prize pool.

If you discover any irregularities in statistics, please let me know.

Full Tilt Poker’s Matrix

Ay, ay ay. I don’t play poker for a week or so while on holiday and Full Tilt Poker goes and releases an update and a new innovation – the Matrix tournament – on me. New features, new ways to break Poker Copilot.

I just gave the Matrix tournament a shot. Lots of fun. Six players play simultaneously on four tables, with points awarded for knocking other players out and for winning a table. I came first on my initial attempt, which naturally made it even more fun!

Unfortunately the Matrix tournament seems to confuse Poker Copilot a little. I’ll need to spend some time tweaking the parser.

Dreaming of Starting a One-Person Software Company?

Peldi wrote a detailed post about the hows and whys of starting up Balsamiq, his one-person software company with a cool name. It’s good reading for anyone dreaming of throwing in the day job and starting up shop. My opinion: Peldi had the benefit of skill and luck: skill, in that he seems to be blessed with a broad range of skills one needs for such an endeavour; and luck, in that the niche he chose for his first product has turned out to be a very good one.

My (Java) Competitive Advantage

Matt asked:

what Java IDE do you use? (and recommend?)

IntelliJ IDEA. It costs money ($249 for a personal license), but if you are a professional Java developer it is more than worth it. It is far ahead of the competition in quality and features. They release a new version once every year or so and I always purchase an upgrade immediately. I feel it is my competitive advantage over the hordes of Java developers who use Eclipse or NetBeans simply because they are free.

Albanian Wireless; Poker Copilot Guide

If you find yourself heading to Tirana, the capital city of Albania (and I can’t really think of why you would be), and you want free wireless, head to the cafe of the UFO University. Yes, it’s really called the UFO University. It probably stands for something poignant in Albanian. It’s just off the the central plaza, nearby the Opera. Not only does it have free wireless, but a cafe espresso costs way less than a euro.

Now for some news that has left me gobsmacked, flabbergasted, and astounded – in a positive way. has gone to the trouble of writing a “Guide to Reading Poker Copilot“. It’s nice indeed to have an ecosystem forming around Poker Copilot.