I received my PhD in Computational Chemistry (i.e., chemistry through code!) in 2013. After realizing that my passion for programming had outgrown my passion for chemistry, I decided to transition into full-time coding. My interests lie in developing smart and efficient algorithms for solving real-world challenges in web and software applications.
Here are a few things that I've been working on recently.
A full-stack web application for visualizing NBA stats
Are you a fan of NBA basketball? If so you may be aware that there aren't many platforms for
for conveniently visualizing your favorite players' stats in an easy to digest format.
Game On is a single page full-stack web application created to address this issue. After signing
in, users can search Game On's database for any current NBA player, add them to their favorites
list, and then visualize their stats. Comparisons of a player's stats to the league average,
So whether you are looking to take your NBA fandom to the next level, or just keep track of how your favorite players are performing in the paint, head on over to Game On today and create your free account to get started. Due to cost limitations player stats are currently limited to the 2016 NBA season, but the addition of historic data is planned. Game On is powered on the back-end by Node.js and SQL, while the front-end runs on Pug, jQuery, HTML, Bootstrap, and CSS.
The most efficient stochastic search algorithm for locating molecular structures
What's the molecular structure of Na4O4? Any thoughts? If not, that's OK. In fact, you may be
surprised to learn that even the world's top chemists would be only a little better off when
faced with such a question. The problem isn't that there is something particulary
mysterious about Na4O4, but rather, to quote the late and great chemist Paul Schleyer: "After
more than two centuries chemists are still not able to predict the structures of molecules of a
given makeup logically, thoroughly, and reliably. This is not surprising. As the number of
atoms composing a molecule increases, the possible connectivities scale factorially. Hundreds,
thousands, and then countless structures become conceivable... "
Fortunately nowadays computers are available to aid in the search for molecular structures. In the 1990's Martin Saunders of Yale published a stochastic (i.e., random) search algorithm for tackling this very issue. It was a big step forward, but problems remained. Frequently the structures generated by this technique contained atoms with no bonds (ALL atoms in an molecule have bonds), atoms which occupied the same space (atoms in molecules do NOT occupy the same space), and worst of all the performance of the algorithm deteriorated rapidly as the size of a molecule increased.
To overcome these issues, I developed the "random assembly" (RASS) algorithm during my time as a Materials Science researcher at LSU. By design, RASS eliminates the afformentioned ineffciencies of Saunders' method while dramatically improving the search performance. Moreover, RASS takes the fewest number of input parameters possible (only the molecular formula) and completely automates the search for molecular structures. The RASS algorithm is currently under the peer review process as it is being considered for publication. Full details of the algorithm design and its Python implementation will be provided soon after it is published. Until then feel free to check out my Kick-R program which accomplishes the same task albeit at a much higher computational expense.
Check if Nintendo's hot new console is in stock at major online retailers.
The Switch is Nintendo's hot new product which combines the power of a home-based video game
console and the mobility of a portable gaming device into a single unit that can be played both at home and
on the go. Since its release early this year, the Switch has been one of the hottest commodities
in the video game industry, but as demand has surged a problem has arisen... The Switch is a
little too popular, and as a result retailers' supply of the console have remained sparse for months.
Any incoming Switch inventory has been selling out immediately, and as a result there are a lot
of Nintendo fans who have been left out in the cold with no Switch to be found for 100s of miles.
So what's a Nintendo fan to do? My Switch Inventory Tracker app is designed to constantly monitor the availability of the Switch on the internet's top video game retail sites (e.g., Walmart, Target, GameStop, Best Buy, Toys R Us), and immediately alert users whenever it becomes available for purchase. The front end of the app is powered by Facebook's powerful React framework, with styling provided via Bootstrap and CSS. On the back-end monitoring of the Switch's availability for purchase is achieved through web scraping via PhantomJS and CasperJS, while Node.js is used to serve the inventory information which is stored in a SQL database. The Switch Inventory Tracker is available for use here here. Set up an automatic alert today to get help with securing your Switch!
Test your skills against a game engine based on the Minimax Algorithm!
If you are anything like me, then you probably remember enjoying at least a few games of Connect-4
somewhere along the line. Recently I took an interest in the application of the
Minimax Algorithm for automating computer AI decisions when playing games with "perfect information"
(i.e., games in which every player is aware of all game events). Examples of such games include
Tic-Tac-Toe, Chess, and Go. Another example is Connect-4, for which I decided to build a game
engine as an exercise in implementing Minimax.
Unlike simpler games (e.g., Tic-Tac-Toe, which I have also implemented here), the sheer number of ways a Connect-4 game can unfold means that a computer search of all possible future game states is presently not computationally feasible. As a result, in this implementation the game engine searches for all possible game paths up to seven moves ahead. If for a particular path the algorithm finds that the game is not over, it implements a heuristic function to determine who is currently winning based on the concept of a "threat". Otherwise the game state is scored based on who won, and the algorithm works backwards assuming optimal opponent play to decide which move to take. To speed this decision making process, the well known alpha-beta pruning optimization of Minimax has also been implemented.
Want to chat? Click on one of the icons below for my contact information.
(click above for contact info)