Aaron Davidson's Software Portfolio
Pocket KingsFor several years, I worked for Pocket Kings Ltd., the company that provides the software to one of the biggest online poker sites. I worked on the core game server, the piece that handles all game-play. It is a massively parallel high-performance system capable of securely serving poker games to more than 200,000 simultaneous players, in real-time. It is definitely one of the most challenging pieces of technology I have worked on to date. |
|
Poker AcademyI worked on Poker Academy from its inception in 2003 until mid 2006. Poker Academy is written in Java, and is built around the Java poker engine I wrote during my time with the UofA Computer Poker Research Group. Poker Academy is a commercial product that provides a classy experimental playground for Texas Hold'em players to hone their skills. It features advanced artificial intelligence, comprehensive statistics and hand evaluation, online play, a tournament clock, and more. See also: my page on Poker Bot Artificial Intelligence Resources. |
|
CRON-o-MeterCR (Calorie Reduced) diets require a lot of information to perform optimally. In order to restrict caloric intake, but remain healthy, users of the diet must track their vitamin, mineral, and protein intakes with great care. CRON-O-Meter is an application that will take into account good usability design and dense functionality. It will provide diet advice, track consumption and exercise, and generally assist in all aspects of a CR diet. CRON-O-Meter is free and open source (Java), and cross-platform. It is still in early development but useful enough now for basic daily diet tracking. |
|
Hi-Res Buddhabrot RenderingWhen I learned of novel way to render the mandelbrot set probabilistically, naturally I had to write my own buddhabrot program. It's called the 'Buddhabrot' because it generates an image reminiscent of the meditating buddha crossed with a space nebula. The result of my program is below (click image for a much larger high-res version). The image is the result of a few billion pixel exposures. It took several hours of CPU time to produce using a distributed cluster of computers. I recently posted The applet and source code. |
|
Mandelbrot Set Java AppletThis is an old Java applet I wrote to explore the Mandelbrot set. It's built on top of a plotting library I wrote. Using this graphing engine, I also created a flythrough movie that dives deep into the mandelbrot set -- it's very trippy. Click to view / download the quicktime movie (7 Mb). |
|
Newton's Method Java AppletAnother old Java Applet of mine, demonstrating the convergence of Newton's method for finding roots. Each coordinate represents a different starting point for the newton's method algorithm. The color is determined by which of the three roots the algorithm converges too, and the shading shows how fast it converges. It's built on top of my Java graphing library. |
|
Eight Queens Java AppletThis is an old Java applet I wrote to demonstrate basic depth first search on a classic toy problem. To solve the eight queens problem, you must place 8 queens (black squares) onto the chess board below. No queen can be attacking any other queen. (A queen can attack all cells on its vertical, horizontal, and diagonal lines of sight). The problem can be solved with a brute force method. Using recursion, the board can be solved from the top down, trying all possibilities and backtracking (known as a depth first search). |
|
Aging Life Java AppletThis is the very first applet I wrote, when first learning to program in Java in 1997. It's a straight-forward implementation of John Conway's Game of Life, but with a twist. The cells age and eventually die. Each cell is colored to represent it's age. |
|
BioGraphy: Evolutionary Image ExplorerBioGraphy is a java application (not an applet) which allows a person to breed and evolve images. With BioGraphy you can visually explore the genetic algorithm and create works of art at the same time. This was inspired by the work of Karl Sims who developed an amazing program in the early 1990s which allows one to breed images in open-ended evolution. His software could draw amazingly complex and beautiful images. In 1999, my Software Engineering course required a large project in teams of six students. Together, we wrote BioGraphy, an art-evolving program based on genetic programming. It could also increase rendering speed by delegating render jobs to clients over a network. I also wrote an essay on the topic of Evolution of Art by Aesthetic Selection for an undergraduate philosophy course. This project also uses the graphing library I used in my fractal applets. |
|
SpazAmazonsI was exposed to the board game Amazons at the UofA GAMES Group. I really like this game, so in 2003 I wrote a networkable amazons program in Java. It also includes an endgame solver for calculating the final score. I never really cleaned it up and packaged it for release, but you can download the zip file and run the jar file if you have Java installed. |
|
|
UofA GAMES Java AppletsDuring my undergraduate days, I worked with the UofA GAMES Group. I wrote three Java applets for games being researched by the group: Poker, Hex, and Lines of Action. I didn't write the Artificial Intelligence for Hex or Lines of Action -- just the web interfaces. I spent most of my time working on Poker -- both the online server and the AI (pokibot) which later became my MSc. Thesis Topic. The Online Poker Server provided a place where Texas Hold'em players could connect via the applet and play against the pokibots and one another online. It provided a great way for us to test our poker AI research against real human players. |
|
Bioinformatics SoftwareWhen I started at BioTools Inc. in 2002, it was focused exclusively on Bioinformatics software. I programmed there mainly in Smalltalk, and some C. I worked on several of their products (Genetool, Peptool, Chromatool) and various contracts. In 2000, during my MSc., I did some work on a bounded dynamic programming algorithm for optimal pairwise sequence alignment. It builds on the Needleman-Wunch dynamic programming algorithm, but adds pruning of the DP-matrix. This approach marries the benefits of A*'s pruning with dynamic programming's low overhead. Linear space versions are discussed as well in my paper: Aaron Davidson. A Fast Pruning Algorithm for Optimal Sequence Alignment. Proceedings of The 2nd IEEE International Symposium on Bioinformatics & Bioengineering (BIBE'2001), November 2001. In 1998 I worked for the UofA Dept. of Medical Genetics, and wrote a web-based sequence database for the lab's work on Chromosome 14, and a Macintosh contig assembly map program called ZapMap. |
Vastmind |
Vastmind & Distributed ComputingIn 2000, myself and some others tried to start up a grid computing business. We built a prototype in Java and had just started shopping it around for venture capital when the tech-bubble popped. The project was mothballed, although I used the Java system for personal use many times over the years (Eyeboard, Poker AI, Buddhabrot, BioGraphy). No company has yet to be successful with that grid computing business model, so it's just as well that the project was short lived. Later that year during a graduate course on Parallel Computing, I wrote a virtual network memory system in C. This library allowed a program to use virtual memory stored on a cluster of distributed computers over UDP. A fast Ethernet network meant virtual memory was an order of magnitude faster than disk-based virtual memory, and it allowed 64-bit addressing for very large memory-bound tasks. Aaron Davidson. Solving Games with Distributed Computing: A System for Network RAM. University of Alberta Technical Report. 2000. [PostScript File] |
SCS Connect FourWritten in C for Macintosh (Classic) in 1996. It played Connect Four against several animated robotic opponents. It had nice graphics for its day and a wide range of artificial opponents of varying skill level. It probably marks my first foray into classic artificial intelligence. |
|
SCS MinesWritten in C for Macintosh (Classic) in 1995. A very faithful port of the Windows Minesweeper game. In 1997 I also wrote a fairly sophisticated minesweeper solver as a project in a 2nd Year Algorithms course. It could solve a high percentage of minesweeper problems. |
|
SCS SnakeWritten in C for Macintosh (Classic) in 1995. The classic snake game where you avoid obstacles, which includes one's ever-growing tail. It also featured skins to change the graphics and sounds. |
|
SCS Mad LibsWritten in C for Macintosh (Classic) in 1996. MadLibs is a program that simulates the old party game of the same name. In the game, players are asked to pick a series of words from certain categories. The words are then used to complete a story that has certain key words missing. The results are often hilarious! Not only can SCS MadLibs prompt the user for words, but it can also generate stories automatically by choosing words from its editable dictionaries. |
|
ScrungleWritten in C for Macintosh (Classic) in 1994. I was originally inspired to make this game after playing some little windows game at school -- I forget what it was called but it had something to do with rats. In Scrungle, you are dropped into an arena with killer robots, worms, turtles, and tornadoes. Each enemy had a different path-finding algorithm. Like pac-man, if they catch you, you're dead. You can push blocks around, and attempt to trap and finally squish the enemies away. I was in the 10th grade, so this was quite a large undertaking for me. |
|
Planet FerakWritten in C for Macintosh (Classic) in 1994. This was sort of a missile-defence style arcade game where you play anti-aircraft gun to protect your planet against spaceships and the like. It featured 8-bit color sprites. I never did release it. |
|
AmitluWritten in Pascal for Macintosh (Classic) in 1993. This was a HUGE (ie. overambitious) attempt to make a RPG (styled after Dragon Warrior). It was a tiny screen with god-awful mouse-drawn graphics that didn't tile properly. But it was fun. I had about 3 scrapbooks full of story, game details, and maps. This was in the 9th grade. Needless to say, I did not ever finish this project. |