Alec Jackson


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

See the short form resume

Professional Projects

  • Polaris RideCommand
  • --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



  • Indian Motorcycle Digital Round
  • --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



  • KTM Connectivity Control Unit
  • --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



    Experience Showcase: Open Source - Kernel

    Background

    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.

    Patch 1: Pericom I2C GPIO Expander Driver

    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 Driver

    Patch 2: Build integration of Driver

    To 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 Patch

    Patch 3: PWM Driver Bug Fix in Vendor Driver

    When 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

    University Projects

  • Ticker Tracker
  • --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

  • Secure Chat
  • --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

  • Panorama Sticher
  • --Creation of a panorama stiching tool using inverse warping to warp image keypoints together. Uses OpenCV to find keypoints.



    Project Showcase: Pong

    Background

    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.

    Technical Details

    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.

    Future Work

    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.

    OpenGL Pong on Github

    Coursework

  • Computer Secuity (Python)
  • --Common systems exploits, securing programs, encryption
    --Public/private key encryption, symetric key encryption, diffie-hellman encryption

  • Computer Vision (Python)
  • --Image processing and blending, panorama stiching, stereo reconstruction
    --Machine learning applications in computer vision, training neural networks for image recognition

  • Database Systems (Java)
  • --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

  • Analysis of Algorithms
  • --Time complexities, order of growth, analysis of algorithms
    --Strengths and weaknesses of search trees, heaps, and hashing


    Experience Showcase: Coursework - Natural Language Processing

    Background

    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.

    Projects

    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.

    Technical Details

    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

    Ongoing Projects

  • OpenGL Game/Graphics Engine (C++)
  • -- 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

  • More coming soon...

  • Senior Project: NetBSD Kernel API

    Background

    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.

    What we're doing

    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.

    Technical Details

    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.

    Languages & Toolkits

  • Languages
  • C         8 out of 10
    C++       5 out of 10
    Python   6 out of 10
    Working knowlege of additional languages

  • Tools & Programs
  • Git
    Yocto
    Numpy, Scikit-learn, and OpenCV
    SQL & Databases
    NLTK (See NLP showcase)

  • Networking
  • 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

  • Graphics & User Interface
  • 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

    Contact

    Alec can be contacted at alec.git@jatas.org or by using this link here