Profile picture
Paul Abrams
Software Engineer
Home
Software development
DevOps
Personal projects
Blog
CV / Resume
LinkedIn
GitHub
Back

Personal Projects

Side projects, open-source contributions, and things I build for fun.

Chess Attack Visualization

A specialized chess training app that visualizes white and black attackers on any square. Built with my fork of chess.js and integrated with the Lichess.org API.

When solving mate-in-1 problems, the app automatically shows a visualization of exactly how the enemy king is restricted. Over time, this helps burn checkmating patterns into the brain, solidifying neural pathways so you never miss the pattern during competitive play.

The “x-ray” attacker support (pieces attacking through their own and the opponent’s pieces, the foundation of battery analysis) wasn’t in upstream chess.js. I diagnosed the gap by setting a React-lifecycle breakpoint to capture the FEN at the moment of incorrect rendering, wrote a failing unit test against the upstream library, and opened PR #572 implementing it. Published a fork to npm as @pabrams/chess.js so the visualization could ship without waiting on the upstream merge.

  • Live Demo
  • Source Code
  • Earlier exploration of the same idea: marked-chessboard
Technologies & tools
React
TypeScript
Lichess API
OAuth2
REST
Chess Attack Visualization

Chess.js (Fork)

My published fork of chess.js which extends the popular chess library with features for analyzing board control:

  • X-ray attack detection: identifies pieces that attack through other pieces
  • Piece battery analysis: accounts for aligned pieces when determining the number of attackers on any given square
  • Comprehensive test suite with Jest

The same x-ray support is also proposed upstream as chess.js PR #572. The fork was published so the Chess Attack Visualization app could ship without blocking on the upstream merge.

  • npm Package
  • Source Code
Technologies & tools
Node.js
TypeScript
JavaScript
Jest
npm
Chess.js (Fork)

A Hierarchical Genetic Algorithm for the Traveling Salesman Problem

My Honours Project for my Bachelor of Computer Science at Carleton University. This project explores a hierarchical approach to genetic algorithms applied to the classic Traveling Salesman Problem (TSP).

The algorithm uses a multi-level representation that evolves both the grouping of cities and the tour order within groups, allowing it to discover structure in the problem that flat representations miss.

  • Project Paper
  • Live Demo
  • Source Code (Java original)
  • JavaScript re-implementation (Ga4Tsp)
Technologies & tools
Java
Artificial Intelligence
Genetic Algorithms
A Hierarchical Genetic Algorithm for the Traveling Salesman Problem

Code Monkey From Space

My alter-ego’s blog about software development, technology, and the occasional tangent. A space for longer-form writing about things I find interesting in the world of code.

  • Visit the blog
Technologies & tools
Blog
Writing
Code Monkey From Space

Open Source Contributions

Steady stream of pull requests across web, tooling, embedded, and government projects. Highlights:

  • chess.js: PR #572 adding x-ray attacker detection (the foundation for piece battery analysis), with a published fork on npm as @pabrams/chess.js so dependent projects could move without waiting for upstream.
  • Microsoft vsts-team-calendar: PR #207 — merged fix for Promise is not defined errors in IE, adding an es6-promise polyfill to Dialogs.ts. Additional contributions to Microsoft’s broader Azure DevOps tooling ecosystem including azure-devops-node-api PR #159 and azure-devops-extension-hot-reload-and-debug PR #3.
  • Microsoft TypeScript-Website: small documentation fixes to the official TypeScript site (PRs #3477, #3478).
  • MicrosoftDocs / microsoft-authentication-library-dotnet: PR #317 clarifying PowerShell support documentation.
  • physicshub: three bug fixes to the physics-simulation site, including a fix for energy conservation and a boundary-collision edge case.
  • canada-ca / platform-security: contributions to the Government of Canada’s central platform-security repository.
  • Dygmalab / Bazecor: commits to the configurator for the Dygma split keyboard family.

Public contribution history at github.com/pabrams.

Technologies & tools
TypeScript
JavaScript
C#
PowerShell
GitHub

Early Projects & Freelance Archive

Pre-government work and university projects, mostly from 1999–2008. Kept here for the record more than the relevance.

Paul Abrams Software Services (freelance, via Rentacoder).

  • Euchre for mobile phones in C using the Binary Runtime Environment for Wireless (BREW), sold to Air Strategy LLC. First commercial software sale.
  • A Twx proxy script GUI in C# for a script-based MMO of the Trade Wars 2002 lineage.
  • Various smaller utilities and contract work delivered through Rentacoder.

University projects (Carleton, BCS).

  • Hierarchical Genetic Algorithm for the Traveling Salesman Problem — honours project, published separately as its own entry. Later re-implemented in JavaScript as Ga4Tsp.
  • Graphical 4D tic-tac-toe in C on Linux.
  • A Java chess engine with an ASCII interface.
  • Java applets exploring emergent behaviour: Conway’s Game of Life, Langton’s Ant, and an Ant Colony evolutionary-programming simulator.
  • Team-of-four ATM software project in C++ using Rational Rose under a waterfall process — useful in retrospect mostly for what it taught about waterfall.

Most of this code is lost or unrecoverable; a few pieces still have working demos, but for the most part these are listed for completeness and to ground the long arc of “things I have built.”

Technologies & tools
Java
C
C++
C#