Projects

moonbook

python pdf reportlab booklet printing
A program to create and print 2-up PDF booklets from comic books, manga (supports RTL binding), pamphlets, and other materials. With a duplex printer, one can print a 16 page booklet using 4 sheets of paper (2 pages front, 2 back). This allows folding the booklet, then binding it in the center with a stapler. moonbook can assemble booklets from images in a directory, from zip/rar/cbr/cbz archives, and PDF documents. Multiple sources can be specified on the command line-- moonbook will sort and assemble the final output according to the filename ordering (this includes filenames inside of archives).

Kago

c php extension pecl zend
Audit and security extension for PHP. Kago hooks internal PHP calls (such as fopen, file_get_contents, mail, etc.), then logs the calling parameters, along with other contextual information (such as HTTP request information) to an audit log. Kago can also be configured with rule sets. Hooked application calls are then matched against these rules, and blocked if a positive match. Compatible with Zend Engine 2 and 3 (PHP 5.2+, PHP 7+).

Tsukimi

electron nodejs compass media mongodb video
Networked media browser built with Electron and Angular. mpv is used for high-quality video playback. Tsukimi uses XBake for media library scanning and scraping, and also has its own builtin scrapers to allow the user to perform manual scraping in the UI. Autodiscovery via mDNS is supported, which will allow additional clients to connect to a master machine to view its videos. Tsukimi is still in active development, but currently is able to import, browse, and view TV shows.

rainwatch

python2 flask torrents rss rtorrent deluge xmlrpc paramiko
Tool for managing downloads from torrent clients. Currently supports Deluge and rTorrent. rainwatch runs as a daemon receiving notifications when downloads are complete, then queues them for transfer from the seedbox to another machine. Paramiko is used to open an SFTP channel to a remote machine, and tasks are queued via Redis. A Jabber client is also used to send notifications to a user when transfers are complete, as well as the progress of running transfers (via XMPP's presence notifications, by changing the client's status line).

mori.moe

nodejs javascript express graphicsmagick mongodb
Website to display random screenshots of anime; also allows searching by series title. Upon startup, new screenshots are parsed from a source directory, converted with Graphicsmagick, and entered into Mongo. This was a test project started for the purpose of familiarizing myself with Node.js and Express.

ycplay.tv

php redis mongodb ffmpeg video media streaming rtmp
Web-based media browser and player for TV shows, utilizing XBake as a backend for handing scanning and transcoding tasks. Once media files have been scanned by the XBake command-line client, the XBake chooser interface can be used to select files to add to each series, which are then queued with XBake for transfer and transcoding. The nginx-rtmp-module is used for streaming pre-encoded video streams to the viewer in various qualities (480p, 720p, 1080p), but allows HTTP fallback using Nginx's MP4 psuedostreaming module (used on mobile devices to allow playback via MX Player and other media players).

XBake

python2 flask redis mongodb video transcoding ffmpeg
Multi-purpose tool for managing, cataloging, and transcoding video files, as well as baking subtitles (hardsubbing). It supports running as a daemon, and accepts scan information from authenticated local and remote hosts, as well as managing job queues for file transfer and encoding. Jobs can be submitted to the daemon via the HTTP API, or directly via Redis.

hotarun.co

nodejs javascript python2 express mongodb redis neo4j japanese data-mining jmdict
hotarun.co is Japanese-language resource website for English-speakers learning Japanese. It utilizes JMDict, KANJIDIC and associated dictionaries from EDRDG as the source for kanji and word information, as well as various other data sources. The frontend is built using Express and AngularJS, and the tooling is written in Python.

Atlas DAQ

c mysql plc melsec allen-bradley mitsubishi mc-protocol scada
System for monitoring industrial control devices, such as PLCs. Uses a modular driver framework which allows the addition of new device drivers easily. Includes a wrapper for TuxEip for communication with Ethernet/IP-based Allen-Bradley ControlLogix devices. The MC Protocol driver allows communication with Mitsubishi MELSEC devices with built-in TCP/IP connectivity, or using a QJ71E71-100 expansion card. Data is probed, then logged to a mySQL database at a set interval. This data can then be used by a frontend application to display production stats.
opengl 3d rendering c windows cpython
3D rendering engine using OpenGL, and associated tooling. This was a large project, and it helped solidify my understanding of C and OpenGL, as well as writing and dynamically loading shared libraries on Windows (DLLs). It includes four programs: bfw, the core Bluefire library; bfconv, a command-line conversion tool used for importing resources such as textures and models; render_ogl, the OpenGL rendering DLL; and bfeditor, which served as both a test program for the bfw and render_ogl libraries, as well as an editor that could be used to manipulate objects in the environment.