Programming Section: Metasquarer code and interface

Programming

Welcome to the programming section of my portfolio. I have been programming since I was 7 years old (not counting Logo, which I learned so early that I do not remember my age at the time), and have since become proficient with many languages, concepts, and paradigms. I have mastered programming to a superlative degree sufficient to content even myself (perhaps in a decade I will be able to say the same of other skills as well, as I started everything else later), but since I have won many accolades and distinctions for my programming ability, I will let these speak for themselves.

Category Image

The image for this category shows the interface and a code snippet of my first large-scale program, Metasquarer. I released the first version in September of 1997, at the age of 12. The Visual Basic code is the only remaining legacy of that age, as I completely rewrote version 5.0 of the program around April 4, 2000. The current version, 7.0.73, was released on April 21, 2007, weighs in at approximately 27,596 lines of code, and has been downloaded well over 50,000 times. Metasquarer has been given the highest rating by Tucows and has made numerous "top software" lists. The project's website, metasquares.com, has had over 10 million hits since its inception. More information about the program is available in its entry below. This particular scene shows my own AI literally beating me at my own game.

As trivia, I am not the strongest player, though I do rank in the top 20. That honor probably goes to Mike Roth (madmike), who held the highest all-time rating (140). Having played against him, I can believe it.

Documents

 
Ph. D. in Computer and Information Sciences

Thumbnails: 1 2 3 4 5 6 7 8

Ph. D. in Computer and Information Sciences

I defended my dissertation, entitled "Mining Complex High-Order Datasets", on April 23, 2010, and graduated with my Ph. D. in Computer and Information Sciences (GPA: 3.92) from Temple University on May 13, 2010.

My dissertation work is based primarily on higher-order analogues of singular value decomposition (high-order SVD, PARAFAC, and Tucker) coupled with a variety of wavelet-based techniques and involved creation of a comprehensive data mining framework for classification, co-clustering, concept discovery (e.g. detecting handedness in subjects based on fMRI scans), summarization, and compression of high-order spatiotemporal datasets, with principal applications in fMRI. In the course of this work I also devised a tensor-theoretic multidimensional discrete wavelet transform, extended the WaveCluster algorithm to accept real-valued high-order image data, created a novel clustering algorithm based on WaveCluster called TWaveCluster, mitigated the massive partial volume effect inherent in grid-based segmentation (by deforming the grid in a context-sensitive manner prior to clustering), released the first public implementation of WaveCluster (which I have opensourced under the GPLv3), and discovered quite a few interesting new results about motor and cognitive task activation patterns in the human brain.

For instance, I discovered that performing difficult cognitive tasks lights up the same areas of the brain that process physical pain, added evidence supporting a hypothesis that ipsilateral activation is important in motor task based learning (most activation is contralateral), and localized the spatiotemporal patterns of activation found in working memory tasks.

My next task is to fuse functional and structural data in a tensor model and to begin reading people's minds using the high-tech equivalent of phrenology :)

Though not in my dissertation, I also created texture-based classifiers for diagnosing breast and brain cancer and created a galactographic ductal topology classifier for many types of breast pathology.

Despite this, my goal is to move away from diagnosis and into developing treatments. I have far more medical knowledge than my formal background suggests, but this is a difficult industry to convince of any new innovation.

Download Dissertation | Download Defense

Date: May 13, 2010.

 

Master's Degree in Computer and Information Sciences

I received a Master's Degree in Computer and Information Sciences from Temple University (as a continuing Ph. D. student) on August 31, 2007, one year and three days after enrolling. My GPA was 3.89. My master's project is the Medical Image Data Mining System, a content-based image retrieval system for MRIs and other medical scans.

MIDMS was published in ISBI 2008, in the article "A Web-Accessible Framework for the Automated Storage and Texture Analysis of Biomedical Images".

Date: August 31, 2007.

 

Bachelor's Degree in Computer Science, Math Minor

On May 17, 2006, I graduated Summa Cum Laude from Monmouth University (with the highest GPA in my class - see Academic Achievement Award entry).

My degree is a Bachelor of Science in Computer Science with a Mathematics minor.

View the commencement ceremony program. (PDF)

Date: May 17, 2006.

Adjunct Professor at Monmouth University

Adjunct Professor at Monmouth University

I noticed an adjunct professor opening in Monmouth's Computer Science Department while browsing the university's news and decided that it was a good opportunity to try teaching out. I thus began teaching CS305 and CS503, the undergraduate and graduate courses in Data Structures, Algorithms, and Java programming, from Fall 2008 to Spring 2009.

This is when I first realized just how much I loved teaching.

Date: September 2, 2008.

Recognizing and Nurturing Technical Intuition

Recognizing and Nurturing Technical Intuition

This is a talk on educational pedagogy given for CS4HS events around the country. The target audience is a group of high school teachers with no CS background. Despite that assumption, I teach them both pigeonhole sort and maximum variance unfolding in order to demonstrate the power of intuition in learning (and it worked!) I use this to motivate a new model of technology education based on a minimal amount of highly intuitive presentation coupled with extensive hands-on learning.

It was received extremely well at Kean University, Duke University, and online for GoogleEDU, and more speaking engagements are on the way!

Date: June 27, 2012.

Clipless (acquired by 8coupons)

Thumbnails: 1 2

Clipless (acquired by 8coupons)

My first corporate acquisition! Idea to 7-figure exit in just 8 months.

Launched a "contextual deals" app called Clipless for Android which pulls deals from over 2,000 data sources and delivers deal notifications automatically when you enter a merchant that's offering one, using a proprietary low-power geolocation algorithm which all but eliminates battery consumption.

Featured twice on TechCrunch (1, 2), resulting in nearly 10,000 downloads in the span of a week.

The backend, an aggregation engine running on a self-managed load-balanced Tomcat cluster, didn't so much as slow down even when being hit with nearly 1,000 requests per second. (I scratch-build all of my production environments for this reason and because it takes me very little time).

This popularity in turn led to a swift acquisition by 8coupons, one of our key data sources. I stayed on as 8coupons' Head of Mobile for the next 3 months, rebranding and integrating the Clipless app into 8coupons as part of the deal.

I also began an iOS version of the app, but priorities were shifted when the company was acquired, and it wasn't completed.

This was a big win for me as an entrepreneur, so I will likely start other companies in this mold. Many insights came together to make this work:

  1. Realizing that my lack of skill with PR needed to be corrected if I was going to stay in entrepreneurship, I decided to contract out FusionPR and observe how they did it.
  2. This is smaller and more incremental than many of the companies I've started before, because…
  3. This was also when I decided I was going to bootstrap all of my successive ventures. I don't need VC funding for small goals (and demonstrated it in this venture). If VCs are too risk-averse to fund big goals, they're not really helpful to me.
  4. VCs will tell you that it's ok to be diluted because you'll own a smaller piece of a bigger pie. I realized that (a) founders underestimate the amount of dilution they take and (b) in the amount of time it takes them to get one business to that point, I could start five like this one. Bake lots of small pies.
  5. The central principle of the information age is "instant gratification". If you internalize this sentence, it will change your life.

Date: January 26, 2013.

Senior Software Engineer at Google

Senior Software Engineer at Google

I joined Google as a Software Engineer in September 2010, working on Google's tools for building and testing software (see the "Building Software at Google Scale" tech talk I gave with a couple of co-workers).

This was when I first learned how to engineer extremely high quality software at massive scale. Ever try compiling and linking 50 million lines of code and dependencies in 3 seconds? That's the sort of thing we had to handle routinely.

I performed very well in this position, and was promoted to Senior Software Engineer in June 2012. In particular, no bugs were found in my code for over a year, a personal best.

I also started to spearhead efforts for the first time in this position, and received 8 peer bonuses and one extra spot bonus (for leading a three-team effort) during my two years there.

I did the unthinkable and left Google at the end of September 2012, in the near-term to take a Director of Software Engineering position at Owen Software, with the goal of eventually acquiring the leadership skills to confidently pursue entrepreneurship full-time, which I would eventually attain.

Date: September 13, 2010.

2005 Research Conference Materials

Thumbnails: 1 2 3 4

2005 Research Conference Materials

These are materials from the 2005 Science, Technology, and Engineering research conference that I attended. At this conference, I presented the Quantile Tree structure, which this site is named for, and an implementation of a knowledge-based programming platform.

This task was a critical test of my time-management and research abilities: I found out about the conference on April 1, three days before abstracts were due and less than one month before the actual conference. Furthermore, after deciding that I wished to present the quantile tree, still barely conceptualized at the time, at the conference, Dr. Scherl asked me to present my knowledge-based programming platform. Faced with the dilemma of choosing between my own important yet esoteric research and a demonstration of an interesting but less meaningful presentation, I chose to present both (setting in motion a motif that would follow me for my entire third decade). I completed a preliminary version of both abstracts by the deadline and spent every minute of free time over the next month developing the presentations.

My knowledge-based programming research was later published by AAAI Press.

Knowledge Based Programming materials | A High Level Language for Homeland Security Response Plans, as published by AAAI Press

Date: April 27, 2005.

Metasquarer

Thumbnails: 1 2 3 4

Metasquarer

Reviews

There are many other reviews of the game, but most are not quantitative or from such well-known sites.

The Game

Metasquarer is the rather ambitious project that I undertook after one of my favorite games, Metasquares, was pulled from America Online in September of 1997. I was 12 years old at the time. Originally an AI that worked in conjunction with the original game's solo mode by sending Windows messages to the appropriate places on the board (simulating mouse clicks), Metasquarer quickly became an earnest replacement of the original when I realized that the ability to place pieces in arbitrary spaces on the Metasquares board was better utilized by a network layer than by an AI. At this point, I wanted to change the name to "Metasquared", but the old name stuck. I sat down with a copy of RFC 1459 (a detailed specification of the Internet Relay Chat, or IRC, protocol), and out of this idea came the first four versions of Metasquarer. In 2000, I decided that the limitations of using the existing game's engine outweighed the benefits that it provided. Thus, I began working on Metasquarer 5.0, a complete rewrite of the game that used its own board and algorithms. The game became as feature-rich as the original... but I wasn't finished. I gradually added all of the features I wished to see in the game, including skinning, an AI opponent, plugins, an intricate rating system (that fixed the "soft" rating problems of the original Metasquares rating system, which are similar to the problems with scoring on an adaptive test), and the ability to check and update your status, including a detailed history of past games, on the metasquares.com website.

The game is currently at its seventh major version. There have been 72 revisions in total. For the most part, development has stopped with waning player interest, but there are very few bugs left and the game is as feature-complete as I can think to make it. At its peak, Metasquarer had above 50,000 downloads and over 8,000 active users (registration began in version 6.0; it is likely that the majority of the difference between downloads and users were the cumulative userbase of all earlier versions). Since wiping the database in November of 2003, Metasquarer has accumulated about 2,000 guaranteed active users. It has a 5 cow rating, the highest given, on Tucows, and had (until they began charging to keep programs listed) above a 90% approval rating on Download.com.

The Website

The game's website is metasquares.com. I originally registered this site in 1999; earlier versions of the game were kept on my personal website. The site is built using a Perl/mySQL backend and utilizes some very innovative methods of client/server communication between individual copies of the game and the player database to avoid excessive load. Metasquares.com has won many SiteCritique awards, including "Best overall", "Best graphics", and "Best browser compatibility". This is the first site of note that I designed, though ProgrammerFAQ.com preceded it. I was assisted in creating the latest incarnation of the site by Curt Wallach, an avid Metasquares fan. I rewrote the entire site's code from scratch from July 31, 2005 to August 2, 2005. It is now valid XHTML 1.0.

Date: September 1, 1997.

 

Computer Science Award

On April 23, 2006, I received the Award for Excellence in Computer Science from Monmouth University. Michael Edwards, an exceptionally talented programmer and one of my closest friends, also won this award for the 2006 year.

This award is given by the department in recognition of exceptional achievement in computer science. It is given on the basis of leadership, scholarship, and service pertaining to the field of computer science.

Date: April 23, 2006.

Construction of an Automated Metasquares Opponent Using the MTD(f) Algorithm

Construction of an Automated Metasquares Opponent Using the MTD(f) Algorithm

This is a paper I began as an assignment for an artificial intelligence class. I am continuing work on it since I am interested in the problem of improving the AI in my program. I may publish it at some point, but whether I do or not is largely irrelevant.

This paper is still a work-in-progress. You may view the current revision of the paper.

Date: January 27, 2007.

Medical Image Data Mining System

Medical Image Data Mining System

The Medical Image Data Mining System is a framework for automated medical (primarily brain) image dataset submission and analysis which I wrote as a Master's Project (with the help of Jingjing Zhang, another graduate student) over the course of just one week. The system is written in Perl and Matlab and employs a methodology that achieved 89% classification accuracy on MRI images of the brain in another study (which we submitted in a separate paper to the same conference). Thus the system has diagnostic accuracy sufficient for clinical use in applications such as cancer diagnosis.

The associated paper was presented at ISBI 2008 and published in proceedings.

Date: August 1, 2007.

 

Data Scientist at dstillery

I began working as a Data Scientist at dstillery (formerly Media6Degrees) in December 2009. However, the title belies the fact that I do just as much software development there as I do data science, particularly using Java, Perl, Maven, Spring, and Hadoop - I was responsible for the production computation of our machine learning features as well as developing some new ones (using a wide array of statistical tools, such as SVD and KL divergence).

Date: December 7, 2009.

WaveCluster Implementation

WaveCluster Implementation

This is the first public implementation of the WaveCluster algorithm proposed by Sheikholeslami, Chatterjee, and Zhang. I wrote the implementation in Matlab.

Despite going as far as asking the authors (who did not respond), I was unable to find any existing code to use for a central clustering analysis to my thesis. So I had to write the algorithm myself.

I have filled in the missing details from the original paper and added a few additional enhancements.

The code is released under the GPL v3.

Download

Date: April 21, 2010.

Building a Brain-Computer Interface

Building a Brain-Computer Interface

I built a functioning brain-computer interface using a Mindflex, then tied it into my home automation system and cooked up a machine learning algorithm which was able to get enough insight out of the noisy 1-channel sensor to turn a light on and off.

You know, standard stuff.

I then delivered a demo of the BCI to a group of 50 talented middle school students at Google's CAPE program in 2011. They were learning about microcontrollers, and I think this provided some good motivation for why this might be a useful skill :)

Date: August 2, 2011.

 

Director of Software Engineering at Owen Software

Following my time at Google, I joined a small company in Rockville, Maryland called Owen Software, makers of the Pathevo education and career planning platform.

This followed a period where I felt I was distancing myself too much from my educational and medical purposes as industry attempted to push me further and further away from meaningful work. Even working in places where meaningful work was happening (e.g. Google's self-driving car project), I was personally sequestered in distant areas of the company and unable to incorporate that meaning into my daily work. Thus I was unfulfilled.

As well as leadership and direct management of Owen's software development team, this position was greenfield - I had to go out and recruit entire teams of developers. I surprisingly discovered that I was quite good at recruiting and assembling a team, based on worker competency, teams working well together, and, of course, outcomes in the form of increased velocity and reduced defect rates.

Owen also had a very traditional culture in its history, and I took it on myself to streamline the culture of the development part of the organization into something more results-driven and informal.

Finally, this position involved design and communication of the central planning algorithm used to route students and workers to their goals in the Pathevo product. My tools of choice here were office hours and whiteboarding.

I still contract with Owen as-needed and maintain good relations among both the team and executives.

Date: October 1, 2012.

The Monmouth University ACM Chapter

The Monmouth University ACM Chapter

This thumbnail displays the website of the MU ACM Chapter, as I designed it at the beginning of my tenure as Vice President and Webmaster of the chapter (Oct. 2004-May 2005).

As this was the first year that the ACM chapter was "unfrozen" as a student organization, my initial tasks were to recruit new members and ensure that other university and national ACM requirements were met. As of April 2005, our chapter's official status has been changed from "Provisional" to "Active" with the completion of an annual report to the national ACM.

In May of 2005, I became the President of the chapter. My focus for the 2005-2006 academic year will be on recruiting new membership to replace the graduating class, improving the computer science department's pass rate by offering tutoring programs to undergraduate computer science students, organizing fundraisers for the chapter, and ensuring the solvency of the chapter after the current officers (who all belong to the senior class) graduate.

Date: October 8, 2004.

Generalized Networking and Sockets Library

Thumbnails: 1 2

Generalized Networking and Sockets Library

The Generalized Networking and Sockets Library, or GNSL, is a completely object-oriented socket interface coded in C++ that will work on any platform with a BSD-compliant socket API (and Windows). It has been tested on Linux, BSD, Mac OS X, and Windows XP.

GNSL was developed as the networking interface for Colinet, a game that I am in the process of developing, but it is versatile enough to be used in nearly any project. It supports the IPv4, IPv6, and UDP protocols, as well as common addressing functionality such as DNS resolution.

This library is an opensource project, released under the LGPL (Lesser GNU Public License). You may distribute and use it in any project, opensource or otherwise, as well as modify the library in any way that you see fit. However, if you distribute a modified copy of the library, you are obligated under the LGPL to send the changes that you've made to the original author.

You may download this library from Colinet's CVS repository.

Date: November 27, 2004.

KCPUMonitor

Thumbnails: 1 2

KCPUMonitor

KCPUMonitor is an opensource KDE application that displays up-to-date frequency and temperature information for CPUs that support dynamic frequency scaling (such as AMD's PowerNow! technology). It resides in the KDE system tray and can graph frequency and temperature changes in the tray icon.

KCPUMonitor was accepted to SourceForge on June 25, 2004. The project files and CVS repository are available there.

Due to a general lack of interest in the project, I abandoned it after the 0.5 Alpha release. While the project is in alpha, it is completely usable and relatively stable.

KCPUMonitor is licensed under the GPL. This license allows modification and redistribution of the source code, provided that the changes are sent to the original author. Unlike the LGPL, code licensed under the GPL may only be used in other opensource projects.

Date: June 25, 2004.

Rumble Pop

Thumbnails: 1 2 3 4

Rumble Pop

Rumble Pop is a highly versatile popup generator with a twist: It allows the user to create popups that slide and rumble around the screen, optionally making noise while doing so. In addition to these unique features, Rumble Pop supports the creation of fully customizable popups, popunders, and DHTML popovers. The program sports an integrated WYSIWYG HTML editor and HTML syntax highlighting. Unfortunately, as the HTML editor uses IE's DOM to create the page, it does not generate standard XHTML code. This may improve automatically if IE7's browser component becomes more standards-compliant, as the project is dynamically linked with IE.

This program was developed for Steve Schneiderman via RentACoder.com. Per the RentACoder agreement, Steve has exclusive copyright of this product. As such, you should contact him if you are interested in more information about the product, rather than contacting me directly.

Date: April 15, 2005.

Table Genie

Thumbnails: 1 2 3 4

Table Genie

Table Genie is a highly customizable table generator. Table Genie can generate square or round tables with any combination of text, border, and table colors. It can also apply two drop shadow effects (standard and "page", where the table looks like it's peeling off of the background) to a table. The latest version of Table Genie also comes with a highly customizable watermark generator for quick application of a textual or graphical watermark background to a page. Text can be inserted in any font, then embossed, rotated, or alphablended to the user's preferences.

This project uses linear algebra extensively to apply effects to the watermark.

This program was developed for Steve Schneiderman via RentACoder.com. Per the RentACoder agreement, Steve has exclusive copyright of this product. As such, you should contact him if you are interested in more information about the product, rather than contacting me directly.

Date: April 1, 2002.

Forum Marketing Manager

Forum Marketing Manager

Forum Marketing Manager is exactly what it sounds like - it allows you to manage forum marketing contacts, forums, membership information, campaigns, and customers.

Underneath this application's grid interface is an SQLite relational database backend, per the buyer's specification. Though keeping the two data sources in sync was a challenge, using the DB made reporting much easier.

This program was developed for Steve Schneiderman via RentACoder.com. Per the RentACoder agreement, Steve has exclusive copyright of this product. As such, you should contact him if you are interested in more information about the product, rather than contacting me directly.

Date: June 1, 2006.

BACH

BACH

This is a paper I wrote (in a single day) on a musical classifier I wrote (also in a single day) that attains 75% classification accuracy between Bach and Beethoven solely from the harmony employed in both composers' pieces.

Though this is a reasonable degree of accuracy, there are some areas in which I can improve the accuracy. Moreover, I hope to create an algorithmic composer rather than a simple classifier (the acronym originally stood for Bayesian Algorithmic Composer and Harmonizer).

You may download the paper or the entire classifier.

Date: May 6, 2007.

My Affiliate Marketing Manager

My Affiliate Marketing Manager

Affiliate Marketing Manager is a much more advanced derivative of Forum Marketing Manager. As the name suggests, it is used to manage affiliate program marketing.

Don't let the similarity of the UI fool you; the functionality of the application is vastly different and the backend code is more than twice the size of Forum Marketing Manager's.

This is probably going to be my final project on RentACoder. I performed these projects primarily to further my programming ability - with the completion of this application, I am finally satisfied with my own mastery of programming. Those who know my perfectionistic tendencies know that this is no small feat.

This program was designed for Steve Schneiderman; you should address all questions or concerns to him.

Date: July 1, 2006.

Let's Compose!

Let's Compose!

Let's Compose! was an initiative I began in the summer of 2006 to keep myself occupied following graduation and presentation of my number theory research.

The idea is simple yet unique: embed collaborative editing functionality into a mainstream music notation editor, such as Finale or Sibelius. Some peripheral ideas grew from this one as well: free subversion hosting for music, an "opensource music repository" of original sheet music, a browser plugin for viewing MusicXML files as sheet music, and even publishing and CD compilation of selected works from the site.

Unfortunately, the current state of the software made this extremely difficult: of all popular commercial music editors, only Finale had support for a sophisticated plugin such as the one I was writing (called Let's Compose! Collaborator), and I had to essentially trick Finale into thinking my plugin had terminated while it was still running in Finale's address space (by spawning a new thread). Moreover, the plugin development kit was out of date and documentation was sparse.

Despite these issues, I completed collaborator (and made good headway on the subversion repository, called "music room") in approximately two months. The first release encapsulates a very sophisticated IRC client, which I later split off into a standalone project called "Ecossaise".

However, unable to find sufficient support among composers to even beta test the application (collaboration in the arts is taboo, apparently, which is foolish considering how useful it is in the sciences), I was forced to accept that the field is not yet ready for such a tool.

One day, perhaps over the summer of 2007, I plan on marketing the product and publishing it commercially, since offering it for free did not work.

Date: June 1, 2006.

Ecossaise

Thumbnails: 1 2 3 4 5

Ecossaise

After completing the "Let's Compose! Collaborator" plugin, I decided to release the IRC client component of the plugin as a standalone application, which I termed "Ecossaise".

This client is extremely sophisticated, yet extremely lightweight (it takes up about 500kb on disk when statically linked to its dependencies and about 180kb when dynamically linked) because it is coded using C++ and the Win32 API, without bloated layers such as .NET or MFC on top of the application. It can plug into Finale, with more applications planned.

It is also itself extensible; that is, developers may write scripts and plugins for the IRC client itself.

It is something I am quite proud of, and I can care less whether anyone uses it. It is art, as much as any of the more overt works of art on this site are, and I need no other reason to justify its existence. Nevertheless, I may try marketing it later if I resume the "Let's Compose!" project.

This project, coupled with its collaborative functions, is around 15,000 lines of C++ code.

Date: July 25, 2006.

 

The Square Finding Algorithm

This is one component of Metasquarer that should have alerted someone to the fact that I really knew what I was doing at a very young age (another would probably be the minimax AI I developed two years later). I would not learn about big-O notation or asymptotic analysis until nearly a decade later, yet the intuitive notion of "only having to scan the board once" is something that requires no training.

Among similarities to the gift wrapping algorithm for finding convex hulls, astute readers with a basic knowledge of trigonometry should be able to derive the matrix representation of a rotation transformation rather directly from the algorithm.

This algorithm will find squares on a Metasquares board. I've converted it to C++ per the request of Groundup (a developer who was involved with the original Metasquarer project for the time) and added comments because I know now (and didn't really then) that it is important to code for "me in another 10 years".

Click here for the code

Date: September 1, 1997.

Freelance Mining

Freelance Mining

I realized that my own interdisciplinarity was going to allow me to do some very unique things when I thought of combining my software and web development talent with my data mining talent. From this, Freelance Mining was born.

It's a service I offer in which I will integrate mining techniques into software to make it "smarter" - able to pick up patterns and learn trends.

This is a different service, and requires a different website, so I decided to discard some of the assumptions I had made on all of my previous web design projects and design a site that fit what I was trying to do. I'm very happy with the result - it's functional, informative, and remains aesthetically pleasing even though it doesn't follow typical design assumptions.

Oh, I also have a small encyclopedia of data mining terms and techniques on this site. It should be an informative resource for those wishing to learn more about the techniques.

Date: February 28, 2008.

 

Quantile and Project Groundhog

I wrote a program that uses several numeric and statistical measures, mostly risk-reward ratios, to predict the movement of stock prices from April 2008 to August 2008.

The app. was developed for a freelance client and is simply called Quantile.

This made me a bit curious about financial mining. I first ran some "partially clairvoyant" backtests to match accuracy levels at forward prediction with returns (and found that anyone who claims to have above 65% accuracy predicting so much as the sign of an asset is either lying profusely or already very rich). Once I established that 55-60% accuracy would be acceptable, I started a new financial mining project called Project Groundhog in Matlab which swiftly grew into something much much more powerful. That app achieves 60% accuracy and roughly 250% returns in an average year (interestingly, it does better in turbulent markets). It is not for sale, as too many people using it would alter the pattern it is trying to predict and likely render it useless.

Date: August 31, 2008.

 

Chief Software Developer at Wixity

On June 23, 2010, I began working as the head software developer of an event aggregation and recommendation startup called Wixity. Though there is theoretical machine learning work involved (as with any recommender) and though I do contribute to it, my primary responsibility is code - all of it, under extremely tight deadlines and with the quality bar set very high. The primary work involved a Java enterprise stack: JSP, Servlets, Struts, Tomcat, Hibernate, Tiles, Spring, and MySQL, as well as the complete frontend XHTML, CSS, Javascript, and jQuery codebase. New to JSP and the associated frameworks, I acquired proficiency in the entire stack in under two weeks. Speed is an extremely critical factor in my performance: I am expected to perform a volume of work usually assigned to entire teams - in similar timeframes.

I also took part in interviewing and supervising junior developers and interns, as well as steering the software development efforts of the company as a whole.

Date: June 23, 2010.

Transit Time to Penn Station Mashup

Transit Time to Penn Station Mashup

A mashup I made of mass transit commute time to Penn Station from NJ. I want to eventually implement this sort of heatmapping capability directly into Google Maps.

Check out the OpenHeatMap Visualization or the raw Fusion Tables data. It was laboriously polled by a Perl script.

Date: October 14, 2010.

 

CoatChex

I joined the founding team of CoatChex (as seen on Shark Tank) as the CTO from May 2013.

This turned out to be a rocky road. I inherited a codebase from contractors and was the only technical member of the nascent team, meaning I often had to push back against unrealistic expectations from the rest of the founding team and frequently found myself justifying the need for practices such as software testing and release cycles.

Despite this, I built (and the rest of the team sold) some pretty cool stuff. Everything the team put out passed through my hands at some point: I built most of the current features into the CoatChex kiosks (Objective-C native kiosks as well as a web-based virtual kiosk using jQuery) and the Ruby backend, plus supporting infrastructure (a nontrivial piece when you consider that the system was sometimes deployed in places without a reliable Internet connection, and thus local servers, transactions, and replication were the saving graces of the company's operations).

It wasn't just coding, though - I also developed a technology roadmap and helped the company pitch to investors, redesigned the company's website in preparation for a rerun of its episode on Shark Tank, and led recruiting of new developers to the team. I'd occasionally even jump in and help check items in a pinch.

I left when Clipless was acquired, due in part to the acquisition, in part because the team had no regard for my flow while I was working, but mostly because of disagreements about how the existing equity grant should vest, which left me with nothing for the six months of full-time++ work I had put in - past the original equity cliff we had agreed upon. This grew contentious, as a perceived failure to pay out earned equity often does, and was the only "bad breakup" I've had to this point.

As a result of this, I no longer agree to cliffed equity deals unless a supplemental salary is granted during the cliff period.

Date: May 23, 2013.

Video Screensaver

Video Screensaver

I created an opensource video player screensaver, licensed under the GPLv3, to brush up on my C# (and because I could not find a good alternative already out there, surprisingly).

Installation instructions are contained in the screensaver zipfile. For those so inclined, source code can be checked out from SVN.

[Download Screensaver] [Browse Source].

Date: November 7, 2012.

 

Building Software at Google Scale

Myself and two of my co-workers gave a public Google NYC Tech Talk on how Google builds and tests software crazy-fast, in order to enable more rapid edit-compile-test cycles (and thus faster development).

Check out the talk! (Warning: audio issues in the recording beyond our control).

Date: March 21, 2012.

 

SmartWink

SmartWink allows a Wink Hub to function as a bridge for Lutron Clear Connect devices, and connects this bridge to SmartThings, allowing SmartThings to see and control Lutron Devices natively. This is a fairly big feat.

Date: December 5, 2015.

A High Level Axiomatization for Military Fusion Problems

Thumbnails: 1 2 3

A High Level Axiomatization for Military Fusion Problems

This presentation was made by Professor Richard Scherl, my knowledge-based research advisor. While most of the work in this presentation is his, there is a good deal that has resulted from my own work as well. An acknowledgement of this, for which I am grateful, is on the last page.

Date: October 20, 2004.

ProgrammerFAQ.com

ProgrammerFAQ.com

ProgrammerFAQ.com was the second website that I designed, but the first that I retain the record of. This website was designed to be a Q/A community for programmers, largely based upon my own perceived needs as a programmer at the time. Unfortunately, though an ambitious idea, the site failed to gain popularity and was eventually eclipsed by the wildly successful metasquares.com. I keep the site solely for email hosting purposes.

Date: November 20, 1998.

Final Aegis

Thumbnails: 1 2 3 4

Final Aegis

Final Aegis is an Ultima Online "freeshard" I've run (under the handle "Rudenid") since 2001 using the SphereServer emulator.

Though the action of running the shard itself is an interesting demonstration of early leadership ability, I list it here because it was also a demonstration of superior technical ability from an early age.

If you check the second thumbnail, you will notice something that looks somewhat like code. That is SphereScript, the script you are looking at is "NPC Quests v3.0", an automatic quest system, and I am (or was) known (again, under the handle Rudenid) as one of perhaps the two or three finest scripters in the world, probably because I routinely script very complex things (like the quest system, ferries, seasons, and a time magic system) that lie far beyond what most people think the language is capable of. I was certainly among the most prolific, writing over 100 scripts in a period of less than two years.

The scripting language itself is Turing complete within its own domain, but cannot write directly to memory or interface with the underlying filesystem or OS (in the version of Sphere I've used; it now can). It also tends to kill the server if more than 40 or so recursive calls are made.

In addition, it was an experiment in web design which is unfortunately looking somewhat dated right now because it is a fixed design from when 800x600 was the resolution to design for. Nevertheless, the underlying design is an example of an evolutionary period in my web design style.

Of course, the goal of all this isn't to make nifty things, but to provide the best experience to players. After some extended downtime between 2004 and 2007 (due to a lack of hosting), the shard has only a fraction of its former population, but every new introduction to the shard retains that goal, even while stretching the bounds of the possible.

I can provide samples of any number of my scripts on request. Their quality is not indicative of proficiency with any particular language, but is likely indicative of my general programming aptitude.

Date: June 1, 2001.

NJDelay

NJDelay

NJDelay is a historical delay and alert tracker for NJTransit buses, trains, and light rail lines. It is built using Cacti, Perl, and SSI coupled with mod_rewrite. Yes, I know Cacti. Yes, well enough to turn a system monitoring tool into something that can parse and plot train delays.

Date: October 29, 2011.

 

BlindsShield

This enables automation of the Blinds.com motorized cellular shade with SmartThings.

Date: October 22, 2015.

Brainbench Certificates

Brainbench Certificates

One of many Brainbench certificates I have received for scoring highly on certification exams. Most of them are "Master" certificates, awarded to those who score exceptionally highly on the exams (usually above the 95th percentile). Interestingly, Brainbench stopped giving out certificates for free at the same time that they wiped their test database, partitioning my test records into two disjoint sets: Tests that I have a paper record of and those that are listed on my online Brainbench record.

Date: May 9, 2000.

PlanetSourceCode Superior Coding Contest Winner

PlanetSourceCode Superior Coding Contest Winner

I was actually quite a precocious programmer: I began programming at 8. By age 10, I had developed software that people used on a regular basis. By 12, I wrote a 10,000 user game.

At age 15, I won the PlanetSourceCode Superior Coding Competition for my submission of a password textbox unmasker, designed to highlight the lack of password security in Windows (any application can snatch up a password from any other, even if the textbox is "protected").

This is the only programming competition I ever won, because it is the only programming competition I ever competed in: After winning this award, I realized that I had hurt many other developers' chances at doing so. I resolved never again to treat programming as a competitive sport.

Date: January 31, 2000.

RentACoder Top Coder Award

RentACoder Top Coder Award

Though my efforts as a freelance on RentACoder were primarily dedicated to growth as a programmer and a person, I did manager to become one of the "top coders" on the site. This designation is not my own; the site sets its own criteria for "Top Coder" distinction.

My average rating is 9.94 / 10 and my current standing (as of August 2006) is 2,902 out of 150,940 coders (98th percentile).

Date: February 19, 2006.

Fireworks

Fireworks

This is a graphics demo I originally designed for a game development course at Monmouth. Unlike everyone else in the class, I designed the particle system as well as the application as a whole from scratch. I also included music using OpenAL, since I was feeling adventurous.

I'm just showing this here to demonstrate that I do have the skills to create full-featured 3D as well as 2D games. It's a nice demo.

I'm releasing both the source and the compiled binary into the public domain; go nuts! You probably can't distribute the music, however.

You can download the complete source code to the demo by clicking the title link.

Date: February 1, 2005.