92.2% Borrowed Code

92.2%. That’s how much of Poker Copilot was not written by me.

Let me explain. Poker Copilot consists of 15.4 MB of Java code. 14.2 MB of that code is third party libraries. 1.2 MB is code I wrote directly.

In that 14.2 MB of third party libraries, here’s what you’ll find:

Awesome libraries I use daily in my coding

Google Collections – Java Collections on steroids. Preconditions. Functional Programming

Joda Time – how Java’s Date and Time APIs should have been done

Awesome libraries important for Poker Copilot

JFreeChart – makes all of Poker Copilot’s charts

Commons IO – has some code-bloat removing IO libraries

Commons Lang – has some code-bloat removing String manipulation libraries

Ehcache – allows Poker Copilot to cache many database results

JGoodies Forms framework – makes laying out Swing GUIs a cinch. But I really wish I could use something like Apple’s Interface Builder

Quaqua Look and Feel – helps Java integrate better with Mac

Mac Widgets – a swag of UI components that make Java look like native Mac

Rococoa – lets Java use Cocoa libraries when there is no Java alternative

Spring JDBC – removes the boilerplate code from Java database access

Swing Worker – handles long-running GUI tasks

IntelliJ’s Forms Runtime – makes GUI forms work that I built with IntelliJ’s GUI Designer

H2 Java SQL Database

Libraries I use sometimes or seldomly

Cobra – Java HTML Renderer that nicely renders bullet points, in contrast to Java’s built-in HTML renderer

Pure Java Hand Evaluator – a library to give descriptions of Poker hands that I hacked a little to fit in better with Poker Copilot

javacsv – parses CSV files

JDatePicker – used in the custom date filter

JavaMail – for reading Gmail Inboxes

The rest are dependencies of the third party libraries.

This is, for most of us, modern programming. Few programmers create low-level driver code, compilers, or operating systems. Seldom do we have to write a charting component or implement a hashing algorithm. Our task is often wiring together many different high-level components and third party libraries. The challenge is to make the libraries co-operate, to make the interaction between components reliable and fast, and to make the user interface that controls the components responsive and intuitive.