Hi, I'm Stephen!

A Bit About Me

Stephen James

Hello! I'm Stephen James, a Computer Science major (sophomore) at UB. Outside of Computer Science, I can say that I'm an aviation enthusiast, and I generally enjoy travelling by air (even though I don't get to do it as frequently as I'd like).

Here's some of what I've been doing throughout the semester (Spring 2017):

Personal projects

I hope to update this list in the near future, but until then, I'll introduce you to some of my personal projects.

Aviation Weather

I've recently built an aviation weather parser in Python (source code on GitHub). It is able to parse raw/encoded weather reports (METARs/SPECIs) and forecasts (TAFs), as well as their individual components. It can therefore identify values such as the time of observation, the wind direction, the visibility, the cloud ceiling, and even the cloud cover, whether you supply an entire report/forecast or just a specific component!

This parser can also be accessed from the web, as I have also created a RESTful API for it using the Flask web framework.

Elevator Simulator

Have you ever thought about how elevators work? Me too! I also went ahead and created a simulator (source code on GitHub)! I know that it isn't the most efficient, and I'd work on that if I wasn't too preoccupied with classes and other projects, among other things.

This simulator allows you to not only operate single elevators, but also multiple elevators within a single controller. Imagine being in a building with two or more elevators beside each other, but only one set of buttons from which to call them on the outside. Depending on the direction you wish to go, you press the corresponding button and wait, while one of the elevators will be delegated to handle your call in order to take you to your desination. I have created logic to simulate how that may happen, along with allowing the user to specify particular floors for the elevator to visit (as if you were pressing the buttons on the inside).

CS Ed Week 2016

The initial version of this software was written entirely in Python, using Tkinter to render the GUI. Considering the highly multithreaded design, I became a victim of Python's Global Interpreter Lock.

Before demoing this at the CSE Department's 2016 Computer Science Education Week (CS Ed Week) event, however, I decided to rewrite the front-end to be web-based. I retrieved updates about the state of the simulator in JSON (after setting up the backend as a Flask server, and I used the data binding in Vue.js to render the updates. By having a browser handle the rendering, I was able to reduce the number of threads running, therefore reducing the effects of Python's Global Interpreter Lock.

Still being dissatisfied with the speed, I converted the entire backend to use the Go programming language just before demoing in April 2017 for Accepted Students Day at UB. This allowed for faster response times from the server (over 500 times, in fact). In addition, with Go being great for concurrency, I also achieved better scalability.

Unit Converter

Using Java, I put together API and GUI for converting between some commonly-used units of measurement. It currently supports conversions for units of length, mass, and temperature (and again, off to GitHub you go)!


While we're still on Java projects, I may as well mention KeyBricks (as you might have expected, the source code is on GitHub). This project initially emerged as a class project I was assigned, but I have since refactored it and added a few new features.

KeyBricks is an actual game, but my version was not intended to fully recreate it, or to even function in entirely the same way. In a nutshell, you'll get points for removing (or "breaking", as the original game says) bricks (for some reason, we called them tiles throughout the class project... I might want to rename that). The more bricks you break at a time, the more points you get. What's your high score?

Next on the agenda should be to list two PHP web projects I did, but I'll probably be back to talk about those later. One thing I should probably mention before you run off to search my GitHub account for them is that they have not been open-sourced (as yet?). Even if I don't open-source them, I may be willing to share pictures or a demo, so if you want more details, send me an email.

I'm currently working on other projects, but I'll give more details at a later stage.


If you'd like to get in touch with me, I recommend that you send me an email.