The Wall of Shame
I like to write code and build stuff. It's fun. But when I look back at my prior works... I feel shame. I'm ashamed because (a) I start more than I finish, (b) "Did I seriously write that? What was I thinking!" The process is simple: I start a grand project, spend 20 to 500 hours on it, then realize it's crap, write a post-mordem and I start over or switch projects. The thing that shames me the most isn't that I have bad ideas. I have great ideas that I execute strangely. "Execute strangely" is the operative word which I will touch on later date.
I love building things for the sake of building things in the spirit of "artis gratia artis". This was my mantra until I built something that other people wanted. It's great to build things that people want to use to make their life better. The shame comes from the fact that, well, code that doesn't ship doesn't help anyone. It's a microcosm of a failure when you abandon a personal project; it's worth a drink or two to drown the sorrow of realizing (a) your personal project sucks, or (b) no one wants it.
That being said, I referenced the way back machine for an old copy of projects page in an essay on education. See, back in my day (when I was walking to school barefoot in the snow up hill both ways), we didn't have github. We had to throw up a web-page on whatever kind of server we could find. Those of that wanted to feel like 'ballers', we had to go for our own domain and scrounge for cheap hosting (with root access). But, that was back then before the cloud made this easy. Anyway, I've digressed.
This page is the newly updated version of my projects page since I'm too lazy to do the due diligence of getting everything proper in github (and a lot of the technologies and platforms don't exist anymore). So, I wrote this document from the bottom to up. It may make more sense to read from the bottom. Just sayin.
Winter Spree (December 2014 - January 2015)
PixelMaster front-end architecture android mobile
I wanted to finger paint pixel art for lewt game. So, I made this as a starting point. I need better icons, but it mostly works on my Kindle. I had some interesting problems with either GC, but I haven't dug into it yet.
I made a simple dungeon crawler with very simple mechanics, and I got to the point where I had graphics, movement, and limited AI. I got stuck with how to balance the game play and see if I could make something fun.
Play networking database front-end architecture
I was making a new kind of JSON stream database. The idea was to have a fairly rich language of how to manipulate a JSON object. The rich language was to describe transactions against an object, and the mutations to the object would be serialized and synchronized to multiple clients. This could be used to make a fairly expressive game server and shared environment. I ran into a few performance bottlenecks as I was re-teaching myself C++, but I liked the overall direction.
Second Company - Red Nova Labs (2009 - 2011)
We made the best way to find self storage.
... other stuff I can't talk about ...
First Company - BRKZ (2007 - 2009)
Hurox.com networking front-end business
could have been the social network for the next ten years. See Mashable
, Killer Startups
, or google it
. This was a crazy project that we actually made work. It had a web desktop, a virtualized web-os (of my own design), a set of default applications, profile pages, custom user pages, a bulk media uploader, ways of setting price for your content, a very complicated layout system. Oh, and the for those that want to cringe: it only used absolute positioning.
MassSHARD parsing compiler database
Sharding a database sucks, so do it at the beginning. This was my ORM where I defined a schema, and it would generate the code to operate that schema and enable me to formally specify how it will shard the data. This enabled me to keep a tight lid on my schema and understand the complexity growth.
Jove3 Suite networking front-end business parsing compiler rich-client
I made an IDE; I wish I could lie about this. Essentially, I bootstrapped from a bunch of my Kitchen code. Jove had: a couple domain specific languages and compilers, a text editor, a GUI editor, a script validator, a built-in source control (WTF was I thinking), and network locking.
I wrote a book in two weeks; it's a secret. It's publiched on kindle under my awesome pseudonym.
Kapow parsing compiler hacking
Take any spreadsheet, Kapow would convert it to code and make it into a web-app. Bam! Killer enterprisey app. Essentially, I used this to define a very high-level problem which then I'd compile to C. I'd throw the C code into a simplex solver and find the answer to my problems. It was fun, and I used open office (an open office file is just a zip, go, take a peak)
ArcaneWorks comp-sci rich-client architecture
I like Excel, I like the idea of Access, but I love MySQL. I tried to build an excel/access replacement. Essentially, I wanted to build spreadsheets as closures on top of a database. It seemed like the two could mix together in strange and special ways. Then I imagined combining it with WEKA and doing really powerful things. But, I stopped after making my own Excel like UI. I did however get evaluation working, and this leader to Kapow.
Jeff's Notepad rich-client
Graduate Schooling (2006 - 2007)
Math Gladiator Automated Tutoring networking front-end architecture comp-sci parsing compiler
I was... depressed when I first taught College Algebra. I wanted my students to have the tools to succeed. I wrote a computer algebra system using C# that could operate over ASP.net; it would show its work and solve problems up to Differential Equations. It had a bunch of neat stuff including the ability to render images of complex forms, and I was working on CLI which would be more interactive. Here is where I started to get depressed with teaching mathematics. It's stupid to teach something that computers can do better. instead, we should teach the ideas of modeling and how to use computers to solve interesting problems.
Fire/Inferno parsing serialization
XML is ok, but I hate the idea of having text serialization. I love binary serialization. So, I combined them into a unified form. Essentially, development would work in XML and all assets would be stored in XML. So, I created a language which enabled me to describe an object model. The tool would interpret the language and build serialization code for both XML (C# + C) and binary (C only). I could write my tooling in C#, then load the data in C. Then to ship to production, I could convert the data to binary.
Kitchen Suite graphics ai architecture comp-sci
I decided that Cauldron 1.0 didn't do what I wanted since the introduction of geometric shaders broke everything, so I rewrote everything and went for the killer platform. This turned into Kitchen Suite.
- Butcher's Block Once one has a scene graph format, the next thing to do is to build the editor. This was my editor for making and defining scenes in Kitchen
- Fork my GUI editor which would enable me to design a user interface and the compile it to a single texture. The coolest thing in this was the space packer which not only packed boxes, but packed to preserve transparency so there could be overlap.
- Grill I wrote my own scriptable VM with my own programming language parser. Essentially, I wrote my own programming language along with my own interpretted byte code.
- Cauldron 2.0 The mega version of all my graphics engine research and development; it was a massive beast of progress which supported: Geometric Shaders, BSP Tress (for transparent objects), Textures, Shaders, Articulated Skeletons with Animations (successor of zModel), LOD based terrain rendering (SOAR), Texture Atlases, Scene Graphs, an optimize context-switch minimizing rendering pipeline, a re-entrant rendering system (supporting both mirrors and cameras).
- CounterTop My version of SDL. I do not kid. I was writing linux/windows platforms wrappers so that I could speed a very high level language. I got OpenGL and DirectX 9 working.
- Spoon was an GUI agent modeller. Essentially, I tried to bake my own reward/penalty graph model. It didn't work, but it was fun to use. You felt real productive.
- Knife was a set of experiments in computation geometry. Essentially, given a complex environment, it would cut up the open space and turn it into a graph. This enable 3D path finding for very complex AI behavior. I did flow analysis to find choke-points, and it was slow as dirt. However, the output would be a complete map to a static environment which enable one to easily write intelligent looking agents.
- Pantry was a asset manager/file system/tar/valut. Essentially, you loaded the pantry into memory and you could access your textures, models, scripts, etc. This was a more modern version of Zen's Resource Engine.
vec4u compiler hacking
I love fast code. If you want to do vector math fast, then you must do SSE. I wrote a specialized vector math compiler that lets me describe a vector formula in terms of scalars, vectors, matrices, and quaternions. It had a typing system and a C compiler.
Graph Modeling & Editor (GEM) ai rich-client comp-sci serialization
My first specification compiler of goodness. Most A.I. applications use a graph of sorts. I like graphs. I wrote a generic graph library for BNJ and adapted it to suit a generic needs. I wrote an XML specification to annotate and describe graph rules. The graph rules would be used for the editor to ensure correctness. The editor could compile the code into C++ or Java for serialization. By automating this process, I could easily describe an A.I. domain with a graph and have both an editor and routines in my language to use the graph. It is a bold project, and I aim to finish it someday with my latest technology.
BNJ 3.0x ai rich-client comp-sci
Working with Dr. Hsu
, I re-architected BNJ
by rewriting the inference engine improving the performance exponentially, enable lazy evaluation (so it could compute multi-GB spaces with sub-GB memory at the expense of CPU), and enabling algebraic inference (hence why I needed to learn to build a computer algebra system). I also rebuilt the UI to be usable and enable students to learn how bayesian inference works at an algorithm level. There are some videos of this here: @kddresearch.org
Cauldron 1.0 graphics architecture
My ultimate 3D rendering engine. I took everything I learned in RaGE, made it better. Essentially, I developed a very lean rendering pipeline and figured out everything that makes a modern 3D engine... modern. The solution is to seperate out the culling from the marshalling, so you cull your scene down to N objects, then you organize those N objects such that it makes sense. Sorting objects in real-time is very easy.
Experiments During University (2001 - 2005)
Evolution XP, EvoServer, Evolution 4000 networking graphics architecture ai
Revolution, a mac game, was a cute little game. I worked on reverse engineering it to PC along with networking support. I used my prior 3D engine, and I had a nice integration. However, I became more interested in A.I. and Differential Game Theory (which I still study). I also started building a trading engine and network engine (EvoServer) to simulate an economy for a galactic empire. Evolution 4000 was the first C++ engine, and Evolution XP was the next version (which didn't get finished.. :( ). EvoServer was my first C# server.
A C# version of Zen's Overlapped Server; the same interfaces, but using Microsoft's .NET platform. It worked very well and was used on a funded project for AIdentity Matrix.
LOTR Risk networking games
Using C#, I whipped up a very basic implementation of lord of the rings risk. The novel aspect was a complete rule engine, and I scanned art assets in from the board game.
GG+ comp-sci architecture graphics rich-client
I redesigned my game engine using Open Scene Graph (OSG), and I implemented a GUI system (Graph GUI plus : GG+). I released GG+, and I got good feedback. However, I got too many demands. I also found that OSG had way too many bugs, and didn't do things the best way.
ZIMS and MIMS networking database
I wanted a project management system, so I wrote one. It used a blog format with special codes to track project status. ZIMS = Zenerd Information Management System. MIMS = Mathsex.com Information Management System.
Progressive Mesh graphics comp-sci
I implemented a progressive mesh algorithm for my Written Communication for Engineers course when I was a sophomore (later, I would be told that it was senior level course... oops). I pwn'd the exiting seniors. I also devised my own texture format which I used for several years.
This was based on GTA3. I wondered how it did the quests, so I reverse engineer how GTA3 did it using a language based approach. I didn't write the parser, but I had eval() done. There was a focal point that one can invent programming languages and machines without writing the complex parsers. It worked very well, and I had planned to upgrade it using my new stuff.
SliceEm 3D front-end parsing graphics rich-client
3D Modeling is hard, and I just took a topology course. I designed a 3D compiler to take cross sections and stitch them back into 3D models. I designed a troll that looked horrible, and I don't think it would be adequate for real artists. However, I had some neat ideas.
Zen's Time Line parsing comp-sci
This is my first customized MFC control. It is a drag and drop Time Line editor for scheduling jobs. It was constructed for Character Exhibitor as the primary way of editing time line events. People then three years after I made it.
Character Exhibitor parsing rich-client
Animation is hard, and I suck at animation and 3D modeling. This project was designed to help me provide a mathematical description of animation. Needless to say, it didn't work. However, I did make some neat code.
RaGE graphics architecture
This was my first 3D engine designed for multi-threaded processing. I just took the Operating Systems course, and I was very interested in building multi-threaded games. I knew that systems would be dual-core soon enough, and I wanted to be prepared. I was right. (I did not imagine dual core mobile device... holy cow)
phpMathML front-end comp-sci parsing
I was typing several math documents for school, and I didn't want to learn LaTeX since I can do better. I was happy to see that there were projects working towards MathML. However, all the solutions were client-side. I wanted a server side solution, so I wrote one. It had roughly 60% of work (integrals are amazingly hard) done until I decided to learn LaTeX.
Stocks! networking business comp-sci
A friend and myself were interested in predicting the stock market. We were looking into localized patterns. Yes, you can locally predict the stock market to a degree because people are predictable. I designed a stock market search algorithm, and it worked. I could predict various patterns. However... my IP got banned from Yahoo because my connection was pulling tons of information. The search algorithm worked, but wasn't fast enough to be practical as the market moves very fast.
Monty Hall 2002! comp-sci
Do you know the Monty Hall question? Well, this is one that gets people in trouble. The answer is "Switch Doors" because P(Win) = 2/3. Well, the proof sometimes bounces off people. So, I wrote this program to test either choice. It simulated the game and gave the expected result. It messes with people since the code is step by step and perfectly "logical". Why do people prefer statistics over logical rigor?
Prior to University (1998 - 2001)
File Sharing Accelerator front-end networking business serialization
Napster was the thing, so a friend and I decided to get out in that market. We built File Sharing Accelerator to do just that. It was "File Sharing Accelerator, the next generation of peer 2 peer client software, brings a new level to file sharing over the internet." It had (a) segmented/chunked download, (b) downloading from multiple sources, (c) automatic download resume, (d) rate control for both upload and download, (e) a file being downloaded will survive disconnects, software crashes, and power outage, (f) file preview/stream, (g) file fragmentation avoidance, (h) fast action queue (WTF did this mean?), (i) a multi-threaded file server.
Zen's File Compare comp-sci business
Given file A and file B; how do you compare them? comparing the file names can be tricky since people can't spell. So, you have to go deeper and use a check-sum. This was a toolkit for comparing files in strange ways. Essentially, I was trying to determine if two music files were the same. So, it dug deep and used some very primative heuristics. Then, I scrapped the whole thing to just use a md5 over the file.
Zen's Standard Library comp-sci
I had a bunch of code that I organized into a library. The crown of this library was a radix sort that was extremely efficient (if you had the extra memory). I was into sorting since sorting solves so many problems if you apply it correctly. Radix sorting is extremely fun, and I highly recommend it. I used it in clever ways. For instance, I'd sort the middle of an array to figure out how to pivot the quick sort.
Zen's Quad Tree comp-sci
How do you render many several ants that are on screen versus several thousand ants that are off screen. Playing with OpenGL's frustrum and culling wasn't enough to optimize rendering. Instead, you had to not send data to OpenGL which you knew wasn't going to be shown. I played with a simple BSP to begin with, but it doesn't scale like a quad tree. Quad trees are fun, and I recommend. They make a good architecture/design problem to make generic enough to be re-usable.
Card Counter comp-sci
I was about to graduate, and we were going to have a senior celebration party that had black jack. I wanted to learn to count cards, so I wrote a tool to help me. Then I used it online to try to give myself a competitive advantage. It didn't help, but writing it was fun.
Zen's Console parsing
How did quake parse and process commands? I found it fun to "hack" quake's console, so I made my own. I made a very basic programming language which started to get more complicated and ever harder to reason about with special cases. I eventually extended it so that I could have it manipulate config. It's magic when you type code into your own program and it does things.
Zen's Overlapped Server networking
In the failure of multicast, I wrote a windows server to use overlapping IO to use a pool of threads to handle many concurrent connections. I will say this: threads are hard. Sharing threads between requests is even harder. This was a fun experiment where I ported a bunch of my other code over and experimented with concurrency.
Zen's Resource Engine architecture serialization
Making a game requires a lot of art in a specific format. I made my own version of .tar that was similar to .pak files. Essentially, I could stream data from a giant file or I could override it on disk. It was to enable modding.
Zen's Heap comp-sci
Memory management sucks, so I "invented" reference pointers. OK, I didn't invent them. But, I thought I did. I made my own heap which could compact itself and what-not. Essentially, you never held onto real pointers. Instead, you held pointers which had pointers to the actual data. The clever thing was making this testable, I would randomly move around memory so bugs would be detected fast.
Zen's Multicast Toolbox networking architecture comp-sci
Internet2 was the thing along with IPv6 that was going to storm the internet. The core idea with multicast was that I wanted to have a massive server, and if you can trust the players, then you can use multicast to provide fast positioning. Instead of a server handling n connections to sent n updates; imagine sending one update to "the network" and all the magic would work for you. I made it work on my home LAN, but it didn't work on the internet.
Zen's Theatre architecture graphics
Animation was the name of the game. I was learning and experimenting with two thing. Making quake 2 models animate, and then figuring out half-life's mdl files. It's a special time when a boy creates animated life that can wave and jump around on his command.
Again, I like board games. So, I wrote a text based version of Acquire which I thought would be a fun game to play. So, I wrote a text version of it. It was complete with kludgy AI. The game turned out to not be very much fun. I did however learn a bunch about writing text applications.
zModel graphics serialization
Once one has terrain, one needs ants, right? I was annoyed that (a) loading .OBJ files was text and seemed slow. So, I wrote my own binary format along with a tool to convert .OBJ to my .zmc format. Then, I realized I need to animate them and got addicted to writing plugins for MilkShape3d
. There's something special when you write a plugin and see it working in another person's program; it was a special time in a boy's life.
Zen's Terrain Editor rich-client graphics architecture
When you make a real 3D terrain engine, you need your own editor. Essentially, this was a 3D texture editor where I could carve out space to make tunnels. It used MFC+OpenGL which was a pretty fun combination to work with back in the day.
Ant Colonies graphics architecture games ai
This is why I made Zen's 3D Warp Engine. I was building a strategy game with ants. The goal was to build a colony of ants and it was going to be a 3D strategy game in 3D using real 3D. That is, the terrain would be fully destructible and smooth.
Zen's 3D Warp Engine graphics architecture Marching Cubes
is among my favorite graphics algorithms. I invented my own data structure for this project. Essentially, I wanted fully destructible terrain. I wanted the ability to add or subtract land and the terrain engine would efficiently update. The kicker was how to evaluate marching cubes efficiently. So, I invented a very simple data structures to simplify the cubic algorithm into a quadratic one (which is the terrain problem). This taught me about permutation and table based programming.
ZenGame & ZenGameEditor graphics rich-client
Board games are fun. ZenGame was my run-time environment and ZenGameEditor was the start of a generic board game editing tool that could be scripted with VBA. Having used VBA in Excel to do some mad cool things. The idea was to make a graphical editor which would build a board, then you use VBA to design the rules and interaction. This project consume a bunch of time, but it suffered from the second system effect.
zEngine graphics architecture
3D Graphics were the thing back in the day; the leading edge of computer graphics. I experimented a bunch with OpenGL to make my first terrain engine. I fancy terrains because it is a fairly complex problem when done right. This wasn't done right, and it demonstrated my need to learn some real algorithms.'
My friends and myself were addicted to Risk and Monopoly. We play board games more times than I can remember, so I wrote my own version for Windows for my Computer Programming Course. It worked really well until I started on the AI which was a disaster.
Zen's Network networking
I wrote some networking code. Specifically, I wrote a very simple Chess game that used TCP to transmit state changes. I had a very poor understanding of state machines, but I clobbered something together. It worked, and I added chat and started to try to generalize the framework.
Counter Strike Cross-Hair hacking graphics
I'll be honest: I like to change the rules of my games. It annoyed me to no end that Counter-Strike had sucky cross-hairs. So, I made my own. I hacked the windows graphic context (GC) to write pixels. I also made a zoom which would put a zoomed version of the context behind the crosshair in the upper right hand screen. It was fairly baller at the time.
Zen's Universal Proxy networking hacking
Networking, is the computing equivalent to physics' magnetism. It amazes me every time I interact with something here and something over there happens. We take advantage of all this Internet stuff today, but it was just coming out when I grew up. I wrote this simple proxy to intercept and enable me to discover what the protocol was actually doing so I could hack together a client or server to do my bidding.
Legacy business front-end
S curves, statistical tools, Fortran, oh-my. There once was a tool that was made in fortran. It's output was rather unseemly. This is where I did really bad things to make a tool that I am absolutely ashamed of. Needless to say, I was paid well for 16 year old. This was before I knew regular expressions, and I basically hand-crafted filters and heuristics to convert old reports into Access database tables. The shame.
Zen's Excel Toolkit business
At work, I was a mad wizard at Excel. This was a library of Excel macros, functions, and subroutines in VBA that enabled me to do some nice things. I can't remember what, but I got a bunch of praise for the effort. No one used it though since it was fairly complicated :(.
Roseanne was a co-worker at Black &. Veatch
, and she had a problem. She wanted to be able to easily print out a directory listing. I made a very simple tool using Visual Studio along with the appropriate .inf to install a context sensitive menu to print the directory. It would simply list the directory, put the result into a temporary html file, then open it in Internet Explorer to print. I was a hero.
MCDIntranet networking front-end
My first job was at Black &. Veatch
where I was a techno guru. This was the first project I took on to implement things that people wanted. Granted, I was also the guy that cleaned out the tech closet (and had to clean out a cubicle of junk for my first office). I also provided technical support on printers, networking, Microsoft Office, and Excel. So, a bunch of odd jobs. The most important thing I produced was an intranet that existed prior to sharepoint. I also made this form where people would sign-in and out of the office; this was a common secretarial task before groupware which enabled office calendars.