Skip to content

Large projects and commissioned work

Discord Anti-Spam and Compromised Account mitigation: In my free time, I am the admin of a large science-oriented community. After noticing repeated issues with spam accounts joining the community and compromised accounts spreading malware, I worked on a bot (and an associated ‘account verification’ website) that uses behavioural heuristics to automatically mitigate threats to the community and reduce much of the day to day moderation. The bot was built using Python, and the website was built using JavaScript/pug.js, PHP/Laravel.

Cognitive Bias Modification internal research site using Attention Bias Modification (ABM) dot-probe training. Built using CodeIgniter, Bootstrap, jQuery, PHP.

User report management tool for a shooter video game published by Nexon Europe S.a.r.l.

The tool allowed a user to report another player in-game, by entering their username, clicking on a few checkboxes or manually entering a report reason, and attaching evidence (a video or screenshot). The report would then be queued, processed, uploaded, and added to an internal database, with easy to use buttons to export the report code into a ticket or automatically submit a ticket on behalf of the user, so that Nexon Europe S.a.r.l. staff members would be able to verify or ban the reported player(s).

Reported players in the user’s private database would be occasionally checked to see if they were active or banned, to provide feedback to the user.

Built using Python, GTK, FFMPEG, Tesseract OCR, and used the Youtube and Imgur APIs to handle user content storage.

Response AI bot to answer support requests for the giffgaff community. Based on the Bayesian “Bag of Words” classification model.

The project consisted of three complementing components; an intake tool, training tool and a response tool.

The intake tool was used to automatically access over 100,000 support threads to download original question text and the “best answer”(a selection made by the question asker of the most helpful response). These question text and best answer pairs were added to a database (in addition to some auxiliary data for debugging and analysis) for future use by the training tool.

The training tool was used to teach the AI model how to classify content by assigning a ‘model answer group id’ to a question, then adding it to an internal database. Each model answer group id contained a reference response of how to answer a particular question. The training tool was built using Python, and GTK to create a desktop application.

The response tool was used to feed live, unseen text into the trained model and was capable of operating in semi-supervised and supervised modes (with a human operator). The trained model would return a series of model answer group IDs and a probability score indicating the statistical likelihood of a match.

The response tool was built using Python, Keras, Selenium, GTK.

The tool was quite successful- with only around 200 reference responses, over 95% of newly submitted questions could be rapidly answered, indicating that the majority of user questions from giffgaff customers were clustered around relatively few, but common queries.

Micro-projects and hobby code

PHP Psychometric Evaluator: I converted Dr. J Johnson’s IPIP NEO-PI R evaluator into a Big5 PHP Evaluator class. This Big5 evaluator was later incorporated as part of a back-end psychometric testing library.

Python Game Emulator: I reverse engineered the network protocol of a multiplayer game to make a game-client emulator that is capable of connecting to the game service, handling authentication, data and command submission, including obtaining status data such as the server information.

Server availability ‘sniper’: I made a simple application that monitors the OVH, SoYouStart, and Kimsufi server inventories to make an alert when high-demand (and normally out-of-stock) resources have become available for purchase.

Python Computer Vision Game Interface: I used OpenCV and the Pillow Image Library to visually identify objects and interface elements in a video game, and processed the data using Tesseract to read text (such as usernames) without directly injecting code or tampering with the runtime process of the game.

Private WordPress Plugins

WordPress Encryption Plugin: I developed a client-sided encryption plugin to securely provide access to areas of a website that may contain sensitive or confidential data, when there is a known Man in the Middle (e.g. where an operator is bound by healthcare processing/GDPR laws while simultaneously depending on a reverse-proxy CDN that might decrypt traffic). The project used libsodium as a high-performant, secure and vetted cryptographic library.

WordPress Localisation Plugin: I developed a Dynamic Pricing plugin that adjusted prices based on Visitor’s Geographical Country. Woocommerce doesn’t offer out-of-the-box support for multiple currencies, and available plugins required the user to select the appropriate currency.

WordPress Plugin Feature enablement: I deleted the feature-limiting restrictions on a free GPL licensed version of a plugin as per a client’s request.

Ariya is incredible to work with. Whenever I need a custom software tool he’s always the one I go to. If I ever have problems with a tool, I always ask him and he always provides a lot of after support. I would recommend him again and again (and again!).

Schmitgen Solutions

Client