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
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.