About Me

Some information about me, what I do and have done.

Blake Rain profile picture
  • Blake Rain
22 OCT 2018

I like to believe I'm a software engineer. The languages that I use in my everyday work are primarily Rust, C++, and Haskell, although I also end up writing a lot of Python and JavaScript. My current editor of choice is neovim, although I sometimes use vscode and the venerable emacs for those irreplaceable modes. Linux has almost always been my main operating system both personally and professionally, with some Unix thrown in for variety. Recently I've moved to the Apple M1 for my daily driver.

I currently work at Neo Technologies as the Technical Director.

Projects I've worked on

I have had the fortune of working on a wide range of projects in different industries: from film processing to industry automation to property management.

  • We built some accelerated post-processing software during the emergence of digital footage in the film industry, where we produced a suite of effects tools that delivered high-fidelity at real-time speeds.
  • Industrial automation: design and prototyping of control boards and embedded software development. This projected was concerned with fluid control in chemical and waste processing, and included both user interfaces and custom controllers.
  • A tool to assist in the sale of commercial properties. The dominant element of this project was a calculator for commercial property investment which could perform goal-seeking of multiple variables.
  • Automated investment opportunity set optimization for commercial property investors. This involved searching a large set of opportunities, constrained by various parameters such as capital, preferred yields, LTV preferences, rent cover and so on.
  • Contact centre automation, driving two contact centres in the UK. We built an adaptive dialler and campaign solution for the full automation of the contact centres at Inchora Home.
  • A PCI-DSS de-scoping solution.

These projects have led to a fairly wide ranging experience:

  • Lead system design: both small, resource bound embedded systems and medium-scale information systems.
  • Low-level system development, including graphics pipeline optimization, JIT and assembly.
  • I've built a few custom Unix (and later Linux) kernels for custom and proprietary hardware.
  • Electronic design including schematic capture and PCB layout for prototype devices.
  • Network development, mainly with Ethernet networks spanning the physical and link-layer to transport and protocol design.
  • Firmware development for embedded systems: working with microcontrollers and FPGAs.
  • Working with higher-order functional programming languages (mainly Haskell) and some work with automated deduction tools.
  • User interface development in terminal applications and GTK; later moving to web-application development for my sins.