James Hansen
Canada (Metro Vancouver)
Welcome
I'm James Hansen, a software developer near Vancouver with over fifteen years of professional experience in data analytics, video processing, cloud platforms and database systems, most of it in security software. In my current role I work across a networked-security product line, from a C#/WPF desktop client and C recorder firmware to a Docker-based, multi-region cloud platform with a Python/Flask backend and an Angular/TypeScript frontend.
Projects
All projects →





“A dedicated, experienced software professional… friendly and kind to anyone in the group, which makes him a great team leader. I learned a lot from James. Definitely would want to work with him again.”
Skills
Current Technical Skills
TypeScript
Typed JavaScript across large front-end and full-stack applications, keeping components, state, and API integration maintainable as a codebase grows.
Strong typing with interfaces and generics to catch errors at compile time and keep refactors safe.
Python
Data analysis, automation, and backend services using Pandas, NumPy, and Flask.
Strong data-structures and algorithms foundation: hash maps, sets, heaps (heapq), stacks, linked lists and 2D grids; two-pointer, sliding-window, greedy and hashing techniques.
Comfortable designing custom data structures from scratch (O(1) min-stack, randomized set, hash set with collision buckets) with attention to time/space complexity and edge cases.
Backend Systems, Docker & Cloud
Design and development of containerized microservice architectures with Docker and docker-compose, fronted by a reverse proxy, using Python web frameworks (Flask and Django) served under gunicorn.
Integration across service boundaries and async workflows: Redis caching, Celery background workers and scheduled jobs, and OpenSearch for search and log analytics, including hardening service-to-service permission checks and building REST APIs that span multiple services.
Real-time media infrastructure, including WebRTC video streaming with a RabbitMQ/STOMP signaling layer and TURN relays for NAT traversal.
Visual C# .NET
Commercial .NET applications and DLLs, spanning standalone WinForms and WPF desktop apps to .NET MVC web platforms.
Object-oriented design with classes, interfaces and inheritance; data querying and transformation with LINQ.
Database modelling and data access with Entity Framework; dependency injection with Microsoft Unity.
C & C++
Native C and C++ development, including camera-side firmware and daemons.
Video capture and computer-vision modules built with OpenCV.
PHP & Javascript
Commercial websites and web applications with PHP and Laravel: server-side application logic, routing, and database-backed features.
Front-end interactivity with JavaScript, jQuery, and Node.js.
Angular
Single-page applications in Angular and TypeScript, including data-heavy dashboards and charting and visualization UIs.
Component-based architecture with reactive data flows, API integration, and attention to performance in large views.
Relational Databases (MySQL & SQL Server)
Data modelling and schema design across MySQL, Microsoft SQL Server and PostgreSQL, hand-written SQL and T-SQL scripts, and ORM-based access with Entity Framework (.NET), SQLAlchemy (Python) and Drizzle (TypeScript).
Managed schema evolution in production through versioned Alembic migrations, and designed a database, caching layer, and API for an access-control system.
Built analytics queries over large metadata datasets, with attention to indexing and query performance.
AI & Automation
AI-Assisted Development
Daily use of coding agents with Local/Cloud LLMs to speed delivery, with review and oversight, so I spend more time on architecture and less on boilerplate.
Collaborative AI Agent Environments
Setting up a single agent environment that more than one developer directs, rather than each person running their own assistant. On FSVR that is Hermes Agent running Claude Fable 5.1 in a container holding both repositories, the Ghidra database and the capture tooling, taking instructions from a shared Discord channel so my collaborator and I work through the same agent from different countries.
Local & Cloud LLMs
Self-hosted and cloud-hosted language models set up for private AI workflows, including the small model behind the "Ask AI" feature on this site and the Ollama cloud models running the agents and summaries in Agenda.Delivery.
AI Workflows & Agents
Custom autonomous agent frameworks with a tool registry and streamed activity, including the self-healing scraper agents behind Agenda.Delivery that discover councils, build their own scraping logic, and repair themselves when sites change.
Automated document and transcript summaries with the Google Gemini API, and voice agents wired to real systems.
Computer Vision (OpenCV)
Object and face detection video-processing modules built with OpenCV and detection models, including a privacy filter that blurs and erases detected people.
Analytical Skills
Data Analysis
Statistical methods, regression, survey design, and descriptive analytics.
Data Engineering & Visualization
Reproducible analysis pipelines, dashboard development, and geospatial analysis.
Program Evaluation
Theory of change, logic models, indicator development, and formative and summative evaluation.
Qualitative Research
Interview design, thematic analysis, and mixed-methods integration.
Public Finance & Microeconomics
Applied to municipal and policy contexts.
Technical & Analytical Writing
Policy briefs, evaluation reports, and stakeholder communication.
Legacy Skills
Borland/Codegear Delphi
Developed own project and limited commercial programs in Delphi.
GrafX Visual Objects
Maintained and ported functions from legacy commercial applications written in GrafX Visual Objects, which uses similar syntax to Delphi.
Scripting
Familiar with various scripting languages including BASH scripting on Linux, and LUA and PAWN game scripting languages.
Community
Volunteer civic-technology and open-data work in Langley, BC.
Langley Urbanist Society

Giving back to my community matters to me. Outside of work I co-founded and direct the Langley Urbanist Society, a registered British Columbia non-profit, where I build civic-technology tools that make public information open and accessible, the same open-knowledge spirit I value in software. I lead the technical side alongside the other directors: the website, email newsletters, automation scripts, and analytical tools.
I also lead the annual Jane's Walk in Langley, a free community walking tour exploring how our neighbourhoods work and how they could work better.
This runs alongside my engineering career rather than apart from it. The projects are a chance to keep practising my craft on real-world problems, particularly data analysis and visualization, in service of my own community.
Langley Urbanist Society Projects
Value per Acre
Council Meeting Summaries
The Telraam Traffic Counter

One project I am especially fond of is a Telraam traffic counter: a small device that mounts inside a window and automatically counts the pedestrians, cyclists, cars, and larger vehicles passing by, publishing the totals as open data anyone can view.
It began with a simple question, whether removing the gates on a local trail would change how many people walked and cycled there. Counting by hand was not practical, so we ran a fundraiser, the community covered the cost within a day, and after some door-knocking a resident with a clear view offered to host it. It now runs from a weatherproof box beside the trail, the first Telraam installed in British Columbia, with live counts anyone can follow over time.
Work History
Fortinet
Inchol Solutions

“James is a dedicated, experienced, software professional with vast experience in all aspects of software engineering. He is friendly and kind to anyone in the group which makes him a great team leader. I learned a lot of things from James. Definitely would want to work with him again! Highly Recommended.”

“James is very passionate and has great vision for his work. His focus keeps everything moving smoothly, he makes sure all the deadlines are met, and working with him in the same Project as a QA, am sure that whatever project he is working on meets the highest standards.”

“I found James to be creative in terms of software development. He can see the whole picture, understand interrelation of system components and make decisions based on every detail. James is also an independent and customer focused strategist. He always comes up with long term solutions for small problems to avoid any repetitious reworking.”
Zoombucks
CompuMAX Systems Corporation
Policy
I completed an MA in Public Policy online between April 2025 and April 2026, studying alongside full-time work at Fortinet. I took it because I was genuinely curious about how effective policies, both governmental and within companies, can be formulated, bridging the gap between my political interests in the community and my career.
I completed twelve modules:
- Theories of Public Policy
- Program Design and Evaluation
- Statistical Methods and Data Analysis
- Qualitative Analysis and Survey Design
- Microeconomics
- Macroeconomics
- Public Finance
- Law, Governance and Public Policy
- Democratic Governance and Policymaking
- Complexity and Public Policy
- International Organizations and Policy Regimes
- Urbanization and Development
Auditing, visibility, observability, governance - these terms are used in Enterprise level Software Engineering, but directly parallel theories and frameworks in Public Policy.
Many developers have ran into concepts like Complexity Theory, which applies to policy and systems architecture, particularly with systems at scale. A good example I have ran into is a bug only appeared when hundreds of recorders were connected to the desktop app, and identifying the cause across hundreds of lines of logging and code was a huge challenge.
Developers can follow best practices for complex systems - a targeted approach, making small changes while making observations. Scholars like Jane Jacobs referenced this when it came to city planning and the same applies to development.
The logical framework used in Program Design is a matrix of goals, outcomes, outputs and activities, and for each one an indicator, a means of verification, and the assumptions and risks it depends on. No objective is allowed to exist without a stated way of knowing whether it was met.
The course also focused on theory of change and theory of action. Theory of change states what you believe will happen and why: if we do this, then that follows, leading to this outcome, because of these assumptions. A theory of action is the delivery model that carries it out. This is a toolkit in development process.
The statistics and qualitative methods modules covered the evidence underneath all of that: sampling, significance, regression, coding interview data, and how to write a survey question that does not lead the respondent. Most of it applies directly to reading telemetry and running user research without manufacturing the result you expected.
The thread through all of it is that a system is not only its code. Good systems and good public policy are both centred around people, human nature, and what works effectively.
Education
Jindal School of Public Policy
Kingston University
Gloucester College of Arts and Technology
Weston College
Broadoak Community School
FSVR
For this project, AI agents were used collaboratively via Discord, allowing effective team collaboration with the benefits of frontier LLMs.
Bundle the capture work into fs1r_capture_session3.py with a companion .md, and have it orchestrate the recordings too. Anything outstanding should be in there, so there is no confusion about what needs capturing.
Pushed. The record stage waits for Enter, then plays each outstanding .mid through the same MIDI port, skipping any that already has a .wav so a partial take reruns cleanly. Six files, nine minutes.
I updated the capture of flteg and lfo2. Please proceed to analyze and implement the improvements from the data.
Pulled and done, clean data. Attack times of 52 ms to 3.0 s fit t = 1.33e-4 · 2^(word/15.5) to 1.2% rms, so FEG_RATE_K is 42.9 where it had been a 0.67 guess. Exponential, not a ramp.
FSVR, the Formant Synthesizer Virtual Rack, is a software reconstruction of the Yamaha FS1R, a 1998 rack synthesizer. It runs as a VST3, a CLAP and a standalone on Windows, macOS and Linux, with all 88 FM algorithms, the 1408 factory voices, 384 performances and 90 formant sequences read out of the ROM, and the FS1R's own front panel as the interface. Free and open source under the GPLv3.
This is a collaborative project. In 2025 Zhiyuan Wan (rgwan) started taking a real FS1R apart, reading the SH7044's 256 KB internal flash out through a hooked UART, dumping the 2 MB EPROM and the PLG150-DX ROM, capturing the board's own UART traffic, and publishing all of it as rgwan/fs1r_firmware_RE with a Ghidra project that already had the boot, loader, flash and LCD code named. Progress went up along the way on the yamahamusicians.com forum. None of this exists without that work. I found it in September 2026, started reading the decompiled firmware to see whether the CPU side could be rewritten rather than emulated, and opened this repository. We work on it together now: Zhiyuan runs a patched firmware on the unit to poke memory and read registers back, and records the hardware measurements the engine is calibrated against. The repository passed 20 stars in its first week, and Zhiyuan and I coordinate through the musica.studio Discord.
I have composed music with FM synthesis for a long time, my initial interest starting with the music on the SEGA Genesis/Mega Drive console, which used FM synthesis on its primary sound chip. My interest in this particular synth was piqued in 2010, when I first saw musictrackjp's demo and review of it, below. The FS1R is the only Yamaha synth that pairs eight-operator FM with formant operators, which shape a spectral window instead of putting out a sine, and that is why nothing else sounds like it. It was built for two years, its tone generator (the YMP706) shipped in exactly two products and was never documented, and a working unit now costs more than most people will spend on a box with a two-line display.
FSVR is a rewrite, not an emulation of the board. The SH7044 is not emulated and its firmware does not run here. The note-on path, the 192.3 Hz tick pipeline, the parameter conversion tables and the 88-algorithm routing table are read straight out of the decompiled firmware and ported to C++, so patches, performances and formant sequences load and play with the same parameter interpretation the hardware uses, because the same logic computes them. Nobody has register semantics for the two custom chips, so those stay models, and every constant behind them sits in one namespace in the source where calibrating against a recording of a real unit is a single table edit.
Much like FM8.plus, the tooling is why this is possible at all. The firmware was disassembled with Ghidra into a database a coding agent can query, and the first working recreation was written with Claude Fable 5.1 reading 1998 SH-2 firmware at something close to source level. The analysis and engine work have carried on with each model since, and anyone working on the project can reach the same tools through the Discord. rgwan ran a debug monitor over the whole capture set on the unit and read the voice image back segment by segment, 240,476 checks across 802 segments with no mismatch, so the CPU side is verified byte for byte against the hardware.
Most of that work happens in one shared agent environment rather than on either of our machines. Hermes Agent runs Claude Fable 5.1 in a container that holds both repositories, the Ghidra database and the capture tooling, and it takes direction from a channel on the Discord, so Zhiyuan and I are giving instructions to the same agent from different countries. Zhiyuan has the hardware, plays a capture request into the real FS1R and reports where FSVR diverges from it; I manage the project, design the frontend and developed tooling for managing the disassembly; the agent does the reading, the edits and the verification in between. It also keeps its own notes: when a technique costs it several attempts, it writes the recipe back into its skill files so the next session starts from it. This is one exchange, condensed.
Built in C++17 with CMake and JUCE, with Python tooling for the Ghidra work, the table and preset extraction, and the hardware capture and analysis scripts. Every push builds the VST3, the CLAP and the standalone for all three platforms through GitHub Actions, so a build for an OS you do not own is one Actions run away. No Yamaha firmware or ROM image ships in the repository, and the tools that regenerate every extracted table from a dump you make yourself are in it. Yamaha and FS1R are trademarks of Yamaha Corporation, and the project is not affiliated with them. What is left is fidelity work: the effects, the unvoiced pedestal above 4 kHz, AM sensitivity at deep modulation, and the last decibel of the filter envelope.
Contact & Bio
Get In Touch
Send me a message and I will get back to you. You can also find me on GitHub and LinkedIn.
About Me

I was born in the mid-1980s and grew up during the peak era of accessible programming on personal computers, when switching a machine on dropped you straight into a BASIC prompt. Being born in the UK, my first language was BBC BASIC, which I started writing at eight years old on the Acorn Archimedes.
When getting my first PC in 1998 with dialup internet access, I installed the Netscape Suite, which included Netscape Composer. This was my first introduction to making websites using HTML. I made a few websites for programs I had made on the Acorn, as well as about my favourite video game, Sonic the Hedgehog.

This interest in programming and web development continued, particularly as I became involved in online communities. Even while studying Music Composition at university in London, I still kept tinkering with PHP websites and making small utilities, often based around modding video games.
Shortly after graduating I moved to Canada, and I began my first job making websites at CompuMAX, using my knowledge of web development. Working there was a fantastic learning opportunity as I was able to sign the company up to the BizSpark program, and get Visual Studio for free, allowing me to learn C# to work on software.
After several years working in various roles, I landed at Fortinet. Building analytics dashboards, customizable charting tools, camera metadata and detection analytics, access control systems, and Docker-based cloud video infrastructure. You can see some of this in my software projects and work history.
Working at Fortinet has been a wonderful experience, with a great product manager and team. I've had the chance to learn the WPF framework while working in C#, to working on a cloud-based system, to more recently experimenting with AI technologies like Frigate.
Following the Covid pandemic I found myself more interested in policy and decision making, especially as I became more involved in community projects. Additionally, the work I was doing sat at the overlap of analytics, privacy, and regulation.
This led me to complete a Master of Arts in Public Policy online, studying alongside full-time work, with training in statistics, program evaluation, public finance, economics, governance. The economics module in particular changed how I view the world, while the Program Design module gave me useful tools for project planning.
Alongside work I have built a number of open-source projects, a webcam privacy filter, a Laravel booking platform, a CRT-emulating media player, and a voice agent for my kitchen. You can see the work on my projects page and on GitHub.

My life has benefitted from the belief that computing should be open and within everyone's reach. I like to think I'm keeping that tradition alive with my love of Raspberry Pi machines, which are sort of a spiritual successor to those old BBC Micros. While my son likes it mainly for Minecraft right now, it's simple, friendly nature invites the whole family to tinker and experiment with computing.






