Alec is an experienced embedded software engineer who has experience building Yocto Linux based embedded systems. Alec graduated with a BS in Computer Science from Western Washington University in Bellingham, Washington. Since graudating Alec has been working on automotive IVIs for Polaris. During this time Alec has worked in a range of embedded domain areas including kernel work, system daemons, drivers, cyber security, and more.
Personal Github
Github
Professional Github:
Other Github
--A power sports automative system that provides mapping, multimedia, and vehicle systems to the user
--Wrote hardware control systems for this system including GPS, Cellular, and CAN control
--Maintained RTOS Coprocessor for CAN processing and camera control
--Maintained and Updated custom Yocto layers
--Worked with manufacturing team on any production issues
--A novel form factor of a motorcycle IVI. This was a digital adaptation of motorcycle gauges that doubled as a mapping systems
--Wrote hardware control systems for this system including GPS, Cellular, and CAN control
--Maintained performance on a system that had about 35-40% of the performance of the flagship IVI
--A motorcycle connectivity unit that allowed interfacing between a phone and vehicle systems
--Maintained the secure boot inphastructure
--Worked on a chip update for EOL parts
I'm trying to get more involved in the open source work. I have a long history of working with open source and modifying it for personal reasons. Until recently none of the work I did were things I thought would be useful to the community. However, recently there's a few things I've worked on that I've recently could be bennefical to the community. As of writing I'm in the process of upstreaming these patches and features to the Linux Kernel.
Pericom has a serious of I2C expanders. Recently I had the opportunity to write a driver for this because it was on a board and there did not seem to already be a driver available. It's a 16 pin IO expander and the driver integrates it into the Linux GPIO subsystem just as any other GPIO device would.
Pericom DriverTo keep logical seperation and the potential of the previous patch going out of date this is the patch of the driver into the build and conf system.
Pericom Driver Build PatchWhen working with the PWM system on an Exynos chip I found an issue with the vendor driver. There was vaiable overflow when going to a 100% duty cycle. This issue seemed to have been around for the entire history of the driver.
Exynos PWM Driver Patch--A project that reads historical stock market data from an SQl databse and performs analysis of various
trading strategies over various historical intervals, comparing them to sector moving averages
Created using
Java and Java SQL libraries
--An implementation of an encryption setup on top of an existing server based chat program, including secure
negotiation of symmetric key encryption using A-symetric encryption (public/private key encryption), and
identificaitons of clients using certificates.
Created using python and python socket
--Creation of a panorama stiching tool using inverse warping to warp image keypoints together. Uses OpenCV to find keypoints.
This project is a recreation of Atari pong built using OpenGL. I didn't spend too much time worrying about recreating the game perfectly, but was more interested in using the basic idea as a project to learn OpenGL and a windowing toolkit. The project was made using the C++ implementation of OpenGL.
The OpenGL details are just as simple as the project looks, each square is made up of two triangles meaning the entire project consists of 6 triangles. There is an effect written into the shaders that makes every other line transparent to give it a classic scanline look. The project uses SDL as a windowing system, which simplifies cross platform support. SDL was chosen over other multi-platform windowing toolkits because it provides support for audio and native joystick support which reduced the number of libaries the project relied on.
There are several active plans for this project. Firstly, I am looking into porting this to webGL and exploring the possiblity of hosting playable version here. Another thing I'm exploring is the possiblity of adding networking to allow online multiplayer support.
--Common systems exploits, securing programs, encryption
--Public/private key encryption, symetric key encryption, diffie-hellman encryption
--Image processing and blending, panorama stiching, stereo reconstruction
--Machine learning applications in computer vision, training neural networks for image recognition
--Database use, management, theory, queries, and java implementation in databases
--Using SQL with java libaries, building programs around database interactions, securing programs from SQL
injections
--Time complexities, order of growth, analysis of algorithms
--Strengths and weaknesses of search trees, heaps, and hashing
Natural Language Processing is a field of computing that deals with processing Language in the form of how human speak. Think Siri or Amazon Alexa, that's the idea behind Natural Lanuage Processing. The image is from a project to create wordclouds. A more in depth explanation of the process is available here.
The projects for this class were heavily based in machine learning algorithms. This is something that is at the core of Natural Language Processing. Most approaches to creating Natural Language models involving training a model with a dataset. One such project used a dataset of spam emails, the goal was to train the model with the spam set and then test the model with a testing set. This project used one of the more straight forward models, known as an n-gram model which trains the model by using n number of preceeding words.
This class covered many of the introductory topics in Natural language processing using Python and NLTK(Natural Lanuage ToolKit). From N-gram models, to Markov chains, and TF/IDF scores. The course concluded with an opened ended project to which I decided to write a proof of concept article recommendation system. Pratical results were mixed, but provided intriguing results.
A writup is available to read in PDF form
-- Working on implementing the basic features of a game/graphics engine in OpenGL and SDL
-- Implemented cross platform build system using cmake
-- Full support for object and camera rotation, modification of movement systems depending on object rotation
-- Basic gravity, working on implementing colliders
-- Object & texture loading, global lighting
The NetBSD is one of the 3 major forks of the original BSD, alongside FreeBSD and OpenBSD. I'm working with a small team of seniors to add new kernel and userland functionality to NetBSD.
The project consists of several different sections. The core of the project is the kernel API we're developing. This API is going to enable the features ability to interact with real time clocks on systems that support booting from the clock. Alongside the API we're expanding the NetBSD clock driver to allow for the new functionality. Additionally, to allow system programs and users to directly use the feature we're creating a syscall and modifying the userland program halt to take additional flags.
To be consistent with the NetBSD enviroment we are going to continue using their programming standards. This means all programs will be written in C and syscalls and halt modifications will be properly documented in manpage format.
C
C++
Python
Working knowlege of additional languages
Git
Yocto
Numpy, Scikit-learn, and OpenCV
SQL & Databases
NLTK (See NLP showcase)
Experience with using Python socket library
Experience using Python cryptography library for networking
Experience networking with C using send, recv, accept, and close system calls
Experience using OpenGL to build a Pong clone (see pong showcase)
Experience using SDL and GLFW as windowing toolkits for OpenGL
Experience using Java Swing and Java AWT