Alexander Collins

Software Engineer
Computer Science Graduate

Portfolio


This is the website I built to host personal projects and anything I'm interested in enough to write about and share.
A few highlights below:

  • tralloc - An experiment into a method of tracking the size of allocated memory blocks in C. The method works, but the library is purely a proof-of-concept and not intended for development (it relies on unsafe behaviour).
    I also wrote an accompanying article which describes the idea and aims to explain my thinking and alternative different solutions.

    Links:articlecode

  • Git Server - I setup my own git mirror server on a Raspberry Pi 1 B+ I had lying around. I documented the process so I'd have something to go back on for future reference.
    It updates every 24hrs from more reiable servers (like GitHub) that I push commits to.

    Links:articlesrc.gearsix.net

  • txt2html - A parser/generator to convert text to a subset of Markdown.
    I wrote this to challenge myself to try writing simple parser/generator for Markdown after a growing curiosity that resulted from writing mdoc (a cli stream interface to cmark).

    Links:projectcode

  • shuntyard - An implementation of Djikstras Shunting Yard Algorithm. I found the wikipedia page on it and thought it sounded cool. It uses a stack to convert mathematical expressions written in infix notation to their equivalent in polish notation.

    Links:code

  • pagr / dati - This is a static site generator which I used as a learning project for the Go language. It went through several iterations but now I'm happy enough with it to use it for building gearsix.net from Markdown and HTML templates.
    It also gave me a chance to try out Test-Driven Development as Golang has great builtin testing.
    It also gave me a tool to do this.

    Links:code

  • xpm - A shell script that provides a generic interface to the host system package manager.
    It doesn't do anything smart but except providing a single set of commands to the multitude of package managers that all do (roughly) the same thing from a user-perspective.

    Links:project code

  • dotfm - A Python cli tool I wrote out of the frustration of managing my dotfiles. It allows you to install/modify/remove files whenever required using symlinks and set aliases to remember them by. It also knows where the dotfile should be, so you don't need to remember the filepath of it.
    I tend to use this day-to-day, it's great.

    Links:article code

  • Piece Chain - I was researching different text ditors and discovered a text buffer algorithm that I really loved: the Piece Chain/Table/etc. This resulted from a rabbit-hole that eventually landed at Niklaus Wirth and his Oberon OS, which was a text-based OS that made heavy use of this algorithm.
    I implemented the algorithm in C, using part of a paper Wirth had written on Oberon, where he describes th algorithm and am currently writing an article on the algorithm.

    Links:code


During my final year at university, I joined a series-A startup company named AppSecTest where I was one of two engineers in a 5-man developing a product that provided on-premesis and cloud deployment of a static analysis engine (with a frontend webapp) which decompiled android apps to check for security & legal compliance. We worked together as a single unit for four years, before our team & technology were acquired by OneTrust in 2022, where we spent 4+ months re-implementing the the engine as a tool in their "OneTrust cloud" model.

Some work I did at the company:

  • Wrote a section of the analysis engine which decompiled ARSC files, an Android compressed XML format which contains metadata about the app. This involved a lo of starting at hex and bit-fiddling but was very fun.
  • Re-wrote the runtime of the analysis engine to work with cloud deployments and accept input & send output to a remote server usng HTTP calls.
  • Developed & maintained two backend NodeJS (express) servers, which communicated with a PostgreSQL database. One of these servers managed a the I/O queue for the analysis engine(s). Another of these servers managed the frontend web application, user-management and authentication, compiling results, etc.
  • A React/Material-UI web application, which provided users an interface to: upload files, view results, compare results, generate HTML reports, plug-in to JIRA and create issues based on results, etc.
  • I wrote several algorithm on the backend which did interesting things to the results data in an (eventually successful) attempt to sell the value of that data. The most interesting of these was the comparison algorithm, which created deltas of elements for multiple analysis results of multiple versions of an individual application.


A full-stack Internet of Things demo, which I initially took over development for from the intern previously in my role. This was my learning experience for gaining knowledge of full-stack IoT development, from the microcontroller upto a server and then to an end-user in a web/android application.
Near the end of my internship, the demo was re-purposed as research project and showcase for the LoRa(WAN) technology.I was able to research LoRa & the LoRaWAN protocol in-depth, prototype and showcase mutliple LoRa devices, justify the re-worked demo design to my team and fully build the demo.
The research was in-depth enough that it went on to form my dissertation.

The demo itself measured item stock on store shelves using infrared distance sensors & the Intel Quark D2000. This data was sent back to a server via a HP gateway router that was deployed with a WindRiver system. The data was then displayed to the end-user in an web/android app.

Links: IoT LoRa Quark demoSmart Shelf 2 slideshow


I studied a Computer Science (Honours) degree at the University of the West of England, with an 14-month internship at Intel inbetween my second and final years. During my course we studied several interesting topics, some highlighted modules: Computer & Network Operating System, Artificial Intelligence, Internet of Things, Ethics and Professionalism, Data Structures and Algorithms

  • IoT LoRa(WAN) SDK - In my final year I produced a dissertation that carried on from research I started while doing my internship at Intel: an IoT LoRa(WAN) SDK. It resulted in a C library for microcontrollers to interface with the RN2483 LoRa module and an extendable plug-n-play C++ framework for Seeed Studio Grove sensors.
    Both libraries were designed to be easily ported to multiple microcontrollers, with all non-portable I/O kept to two individual read/write functions.

    The research was the most important part and it allowed me to gain a understanding of LoRa(WAN) v1.0 (from the PHY-APP layers).

    Links: RN2483 libraryGrove Sensor frameworkResearch

  • SNTP Server & Client - This was a for the Computer Network Operating Systems module. The aim was to produce a working, RFC4330-compliant SNTP server & client with unicast and multicast addressing modes and provide working proof with wireshark. The project was written in C using POSIX sockets.
    This project was a very useful lesson in reading & interpreting documentation, since it was my first time reading an RFC.

    Links: source

  • MorseBit Protocol - This one was for the Internet of Things module. The goal was to create a Single Wire Protocol that could transmit data between two devices across a single wire via GPIO pins on either side with a working demonstration on a BBC Micro:Bit.

    Our method of translating Morse Code to digital values that could be sent in a short amount of time was to interpret (based on button-held time) a dot as 0 and a dash as 1; this set of 1's and 0's would be interpreted as a byte which was used as the index of lookup table that translated morse code letter to it's ascii equivalent using a binary tree.
    This way we only had to send (at most) 6 HIGH/LOW signals for any characters in the table.

  • BitIt - A university project that created a game based on Bop It using the BBC Micro:Bit built-in sensors. The idea is the consecutively carry out the actions displayed on the LED matrix animations within a narrowing time window and see what the highest score you can get is. The game's a lot of fun and works quite well on the device.

    I also wrote a small library that helped with displaying animations on the devices LED matrix.

    Links:BitIt sourceMicroIMG source

  • Genetic Algorithm - The Computer Science department of the University had several AI specialists, consequently we had several AI modules. My favorite of these was Biocomputation: The natural world has often provided inspiration for solving complex problems.

    The Genetic Algorithm was a project where we built said algorithm and used it to find patterns of data in provided data sets. I used it as an opportunity to learn Python (since it was the data science language at the time).

    Links:source