A Bit About Me
Hello! I'm Stephen James, a Computer Science major (junior) at UB. I have some experience with web development and cybersecurity, and have served as a teaching assistant and tutor for a few Computer Science and Mathematics classes. 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 did two semesters ago (Spring 2017):
- BrickHack 3
- Information Security Talent Search (ISTS 15)
- Northeast Collegiate Cyber Defense Competition (NECCDC 2017) (placed third in the region; see article)
- Networking & Systems Infrastructure Competition (NSIC)
- Lockdown v2 (organizer, red teamer)
I spent my summer as an Engineering Practicum Intern at Google on an engineering productivity team within Ads. I worked on a full-stack web application (using Java and Angular Dart) that served as an interface to a sandbox management tool that, among other things, greatly reduced the time taken for running integration tests and made the results more reliable and consistent.
The majority of my time was spend on facilitating a way for users to graphically create and/edit sandbox configurations, reducing the need for them to be familiar with the associated configuration languages.
Sandboxes are comprised of components that could have their own dependencies, so I also implemented validation to ensure they have all the dependencies met, suggesting components that can be used where possible. The final selection had to be made by the user, because there could be multiple components that can satisfy each dependency. Therefore, I provided the most relevant information about each component to allow them to make decisions more easily.
The team I worked on was considered an engineering productivity team; our customers were other engineers and engineering teams. I certainly enjoyed the experience, and learned a lot throughout my stay.
I hope to update this list in the near future, but until then, I'll introduce you to some of my personal projects.
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.
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).
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.
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.