SHAKBLOG

Life Abridged.

Projects

I think about and build a lot of things. I really enjoy creating and below you'll find a bunch of projects that I've worked on roughly in chronological order with the most recent project first.


lua-complete

GitHub Link A code completion engine for the Lua language. It does analysis of files and modules to determine values in tables and functions. It should make writing Lua a lot easier and make text-editors/IDEs a lot better. It's currently in development, but can be installed via Luarocks. I also wrote a Sublime Text plugin for it - available in Package Conrol as "LuaComplete".


OnCallculator

GitHub Link I was tasked with creating our team's On-call calendar for the new year, and decided to create a simple Python script to help me out. Since scheduling is hard, I decided to prioritize vacation schedules and holiday avoidance. It's not perfect, but gets you 90% there and was a fun project to work on during a long road trip!


Notesbook.io

That was my first foray into writing a website in golang with a Mongo database and a front-end written in TypeScript using Mithril.js 1.0. It was a simple markdown note taking app which encrypted notes using JavaScript's SubtleCrypto library and did compression and search in the front-end - resulting in a lean backend server and a [surprisingly] lean front-end (< 50kb minified + gzipped). It only worked in Chrome and was glorious.


RedCrypt

A POC secret store using End-to-End encryption (originally loosely based on the iMessage protocol) written as a Web API in Ruby. It was later rewritten in Python with a lot of the encryption being done via PyNaCl. It was a fun little POC that taught me some basics of encryption and the dangers of implementing it yourself.


Dexter

The modern rolodex. It allows people to look up anyone insanely quick within an organization - all with a handy API. It's written in a way that's quite extensible to practically any slowly changing dataset. The original version was a quick auto-complete engine that returned a JSON blob. I spent a lot of time designing/developing the front-end - something I didn't expect, to make it a fully featured "read-only" web app. It was also my first time using Redis, which I've grown to love.


ftcsv GitHub Link

ftcsv is a fast pure Lua CSV parser. It has support for both reading in and generating CSV files and does it as quick as possible. It currently loads the entire CSV into memory and parses it into a Lua table that's easy to use. I have a development version ready that can load parts of a CSV at a time that should be released sometime soon! It is currently available on LuaRocks.


unicorndecode GitHub Link

unicorndecode is a port of the python Unidecode module (which is a port of the perl Text::Unidecode) which converts and transliterates Unicode characters to their ASCII counterparts. I ended up using it for a pre-processor of the typeahead in Dexter, so people don't have to type in Unicode characters while searching. It is currently available on LuaRocks.


Jenni

Jenni is a fake data generator that aims to be as realistic as possible and insanely quick. It uses things like census data and the zipcode database to rapidly return real sounding names and addresses. It can generate both real and fake phone numbers based on the North American Numbering Plan as well as various office-related things (mailstops, titles, ids, etc). I want to verify the redistribution of some of the source material before putting it up on GitHub, but it's worked amazingly well for me for generating fake data.


MobileComics GitHub Link

Web comics on mobile suck. MobileComics takes a comic strip and figures out where each panel is, the correct ordering, and will crop out the relevant sections. It then creates an imagemap over the original comic where each panel would link to the cropped versions displayed in the lightbox (with nav controls). I had a lot of fun making this POC and you can see the final version here!


DailyMath GitHub Link

DailyMath was the first public webapp I released. It was a rather ambitious website where I would post a new math problem everyday and have people attempt to solve it. Everyday soon became three times a week, and eventually the site dwindled. It is now defunct. I learned a lot about trade-offs between pushing code to the front-end or back-end depending on the need, and how to optimize bandwidth use (to avoid hosting costs).


ecto-1 GitHub Link

A static site generator for ghost-blogs (like this one!) that pulls the database from the API and tries to piece together sites by marching through slugs. It's still in its early stages, but I am using it for this blog! I want to rewrite it at some point so it's less hacked together. Perhaps I'll get to that one day!


TableSalt GitHub Link

A Constraint Satisfaction Framework written in Lua. I wanted to create an extensible way to solve constraint satisfaction problems such as Sudoku, Kakuro, cryptarithmetic, coloring problems, and so on. One of the benefits of TableSalt is that it doesn't take input in some special mathematical form or use some crazy graphical interface - it's just pure Lua, and works using objects and is fairly extensible. Due to this, it might not be as fast as one using special math, but it is a lot easier to use!


Sudoku Solver GitHub Link

This was created because I needed something to verify that TableSalt was working correctly! At some point I want to create a dynamic parser and turn this into a sudoku solving web app! But for now, it can solve a couple different sudoku puzzles, mostly taken from Peter Norvig's wonderful sudoku page


Kakuro Solver GitHub Link

It was created after I had gotten TableSalt up to a more usable state and was testing out implementing new constraints and how easy it was to plug them into TableSalt.


Boid Racers GitHub Link

This was Nate Balas and my final project for our Artifical Intelligence class. It was a tool simulating various AI concepts discussed in class including procedural generation, pathfinding, and boid flocking/steering. It was written using LÖVE.
Boid Racers in action


srtrim

A SubRip subtitle trimmer written in golang. It handled trimming and delays in the srt format. This was an early project, and is now lost to the harddrives of computers long gone.