libstephen– A C Library
This library extends the standard C library with dynamic lists, hash tables, regular expressions, command line argument parsing, several string-handling utilities, logging, and lightweight unit testing. It’s an experiment in making an API as well as sharing code. Several of my other C projects depend on it already.
lsh– A Simple Shell in C
I wrote this to illustrate the different system calls and mechanics that underlie one of a programmer’s fundamental tools: the shell. I also wrote a tutorial about it.
NOSJ is a simple JSON parser written in C. It focuses on simplicity, especially with respect to memory allocation.
For our Software Engineering project, my team (me, Jeff Copeland, and Kyle Deal) created a web application that helps people create simple static web sites. It uses Pelican under the hood, and it’s implemented in Python using the Django web framework. Unfortunately, Corvid is no longer deployed. However, a few friends are working on a sequel for their senior project – stay tuned.
Hacker’s Society hosted an event called “Python and Pie” for incoming freshmen during Fall 2015 orientation. I gave an intermediate Python tutorial, which was all about writing a Twitter bot using Python. As a result, this bot and the accompanying tutorial are now on GitHub for others to learn from. The bot responds to any @mention with a randomly chosen Taylor Swift lyric.
tswift– A Python MetroLyrics API
Get your Taylor Swift lyric fix with this quick’n’dirty tool for downloading song lyrics from MetroLyrics. Or, you know, any other artist’s lyrics.
PyWall– A Python Firewall
My EECS 444 project group (Jeff Copeland, Andrew Mason, Yigit Kucuk) implemented a firewall in Python. While obviously not practical for normal use, this firewall illustrates the basics of packet filtering (including TCP connection tracking) in a high-level lanugage, which is much easier to understand and extend than C.
yams– YAMS: Awesome MIPS Server
My EECS 314 project group (Jeff Copeland, Andrew Mason, Thomas Murphy, Katherine Cass, Aaron Neyer, and myself) created a HTTP 1.0 web server, written entirely in MIPS assembly. In addition to serving static pages, it also comes with “dynamic content” courtesy of a Brainf*** interpreter also written in assembly.
lisp– A Lisp-y Language with Garbage Collection
A simple implementation of a Lisp like language. This was a fun opportunity to
create a lexical analyzer out of my
libstephen regex implementation, as well
as try out a simple garbage collection system.
A 24 hour Tetris implementation written in C, using the
ncurses library. I
wrote an accompanying blog post about it, which also touched on how important I
find my personal projects, even if some are reimplementations.
A minesweeper game written entirely in C, with both a command line and graphical interface. This was a fun and short project to apply my C knowledge, as opposed to my more ambitious, long running projects above.
A fun little challenge - write a functioning IRC bot in C! This little guy was a great excuse to use Libstephen’s regular expressions in the real world, as well as learn all about dynamic loading of modules and the IRC protocol. CBot currently has the basic functions necessary for a chatbot, and I’m sure I’ll return every now and then to expand on his available plugins.
caseid– Python module for Case IDs
This Python module aims to provide a plain and simple way for a programmer to retrieve information about the owner of a Case ID. It supports scraping CWRU web services, as well as accessing the public LDAP server in order to find people by their Case ID, and vice versa.
wepa-linux– A CUPS Printer Driver
WEPA is a printing system used at my campus. Users ‘print’ documents to their service, which stores them online to be printed at a kiosk. Drivers are available for Windows and Mac, but not Linux.
This driver, created at HackCWRU 2014, is a solution to that problem. It is a CUPS printer driver that allows rudimentary printing to WEPA. While the solution is not elegant (the security model of CUPS seriously limits what a driver can do), it is effective.
chat– A Quick and Dirty Chat System
This is a quick chat client/server implementation in Python (and a little C).
It served as my introduction to socket programming in both languages. It is
intended to be used as a local chat server over SSH, instead of constantly
wall messages to other logged in users.