I studied Computer Engineering at the University of Alberta. The courses that I have taken cover a broad range of topics in software engineering, embedded software design, digital electronics, and integrated-circuit design.
Throughout my degree program, I have worked for a number of companies as part of my school's co-op program: GE Intelligent Platforms, EMC, Avigilon, and Microsoft. With these companies, I had the opportunity to work with industrial automation software, high-performance distributed storage appliances for data centers, embedded device firmware, and cloud-based communications infrastructure.
In addition to the work I did as part of the co-op program, I have also been involved in the development of open-source software, and I have built a number of software and hardware projects. Some of the projects I have worked on are detailed below.
My formal educational background consists of the following programs:
In addition to the above, I have some degree of experience in the following:
As part of my degree Capstone Project at the University of Alberta, I worked with Mason Strong and Stefan Martynkiw to produce a system capable of displaying simple graphics using an Altera DE2 development board.
Our system used a Nios-II soft-processor (similar to MIPS) combined with custom CPU instructions written in VHDL to accelerate simple graphics operations such as drawing rectangles, lines, or circles, as well as copying pixel buffers around in the device's memory.
Over a period of approximately two years, I designed and constructed an interface board to connect a 5-inch LCD with capacitive touch from Newhaven Display to a PC via HDMI and USB interfaces.
This project involved a wide variety of tasks from hand-soldering fine pin-pitch surface mount devices to designing microcontroller firmware to behave according to the USB HID specification. In addition, it also required interfacing with a DVI interface chip. Various soldering techniques were used to assemble the board, ranging from hot-air reflow to soldering with a hand-iron.
In the first picture, an early prototype is shown, with an LCD module partially wired up to a DVI controller.
To date, I have produced a prototype circuit board, which allows the display to connect to a computer, and supports 5-finger multi-touch. There are a couple of minor issues with this initial design which arose from some misunderstandings of the microcontroller being used, which should be ironed out in a future prototype. I also forgot to put mounting holes on the circuit board, which are somewhat important for when designing an enclosure.
Some of the notable devices being used in this project are the NHD-5.0-800480TF-ATXI#-CTP LCD display, a TFP401a DVI display driver chip, the PIC18F14K50 microcontroller, and a TPS61165 backlight driver.
The circuit board for this project was designed using Eagle, and produced by OSH Park. All of the code and schematics are available on GitHub.
By the end of the competition, we produced a site capable of generating random calculus problems, selected such that they are easy to solve mentally. The site used MathJax to pretty-print the questions, and used MathDox Formula Editor to provide math input.
This sounds pretty straightforward - we had three libraries: a symbolic math calculator, a LaTeX to HTML engine, and a math input provider. Unfortunately, things didn't go as planned. MathDox FE can only produce XML output, and SymPy could not parse that. Searching the internet, there was no known way to coax SymPy to understand MathML (probably the most horrendous use of XML I have ever seen).
Through this, we discovered the XSLT MathML Library written in 2002. This xsl transform can supposedly turn MathML into LaTeX, but it uses some matching syntax that neither Python nor PHP's xslt libraries can interperet. After a few hours, I managed to coax Python to use this transform to generate LaTeX. Unfortunately, SymPy also cannot understand LaTeX. However, this xsl transform was so complete and well documented that I was able to modify it to turn MathML into something SymPy could understand (for the subset of solutions we needed to read).
As a result, we were able to demonstrate a funcional prototype of our web-app, and it even generated some random stick-figure comics which occasionally were actually funny! With this project, we placed third in the competition. You can see the source code for this project on GitHub.
Copyright © 2016 Stephen Just