About me
I'm a software engineer and have recently graduated from the University of Manchester with a degree in Computer Science with Mathematics.
Currently, I'm working as a Mobile and Web App Developer for Nuwa, the company behind the smartest pen in the world!
A Linux-only wrapper around the VLC media player that automatically upscales videos to your screen resolution using technologies originally intended for gaming including AMD FidelityFX™ Super Resolution (FSR).
After installing, you can simply open any video file with the "Upscaled VLC" app, no terminal or expertise required.
View installation instructions on GitHub.
An experiment into how far an automated game modder can go.
In comparison to SamsungAppsPatcher,
the patching method is far simpler.
It looks through all the decompiled methods from the APK
and replaces some of them, like making showAd do nothing
or making isPremium always return true.
Because of this, the patcher can be (at least partially) effective on any game that contains ads. But in the intended game, the patcher can do even more like reducing the price of chests and upgrades and increasing the quality of the randomized rewards.
See instructions on using the patcher on GitHub.
Saber is the notes app built for handwriting. It was my first non-trivial Flutter project, and I've been working on it since July 2022.
I'd been writing digital notes since 2020, and the only app that suited my needs was Samsung Notes. Unfortunately, it was only compatible with Samsung's Android devices and select Windows devices. Additionally, it didn't work on Samsung's Android devices with custom firmware, such as LineageOS, which I was using at the time on my Samsung phone. I wanted to be able to access my notes on all my devices, regardless of the operating system or manufacturer.
I'd been wanting to make my own notes app for a while and in the summer holidays of 2022, I restumbled upon Flutter and finally decided to give it a go. Nowadays, Saber has likely* tens of thousands of users, and it's advancing at a rapid pace. (*I don't directly track users, but some partial data is available from various sources.)
Developing Saber was (and is continuing to be) a huge learning experience for me. I've successfully deployed custom GLSL shaders, continual performance optimisations, CI/CD workflows on GitHub Actions, backwards compatibility for new features, adaptive and responsive UIs, reusable packages, and much more. I also made the Saber landing page (GitHub) using Next.js's Static Site Generation (SSG).
Saber is available on all major platforms; find out more at saber.adil.hanney.org or on GitHub.
Ricochlime is a satisfying slime monster shooter game.
The name was originally a portmanteau of "ricochet" and "slime",
but I've since had to switch out the graphics for licensing reasons
so there aren't any slimes anymore! I developed Ricochlime to experiment
with making a game in Flutter using the Flame game engine.
I designed this to be a simple, easy, satisfying game to play. I often like to have something to do with my hands while I'm focusing on something else, and I find that games like this are perfect for that. The music is disabled by default, and the only ads in the app are a banner at the bottom of the screen, which I find is a good compromise between monetisation and user experience.
Ricochlime is available on all major platforms and online. View more on GitHub.
Timing Trainer presents you with a blinking square and you guess the time between blinks. As you play, you'll get better at recognizing sub-second intervals.
I first created this game/trainer as a PWA (progressive web app). Later, since it was a very simple app, I made a cross-platform version as my first foray into Flutter.
The Flutter version is available on all major platforms and online. View more on GitHub.
My BlackboardTheme project encompasses a collection of (unofficial) tweaks and improvements to the University of Manchester's websites including Blackboard.
It does this with the browser extensions Stylus for styles and Tampermonkey for scripts, which inject my custom CSS and JavaScript into the pages.
I've since moved to bundling everything into a single easy-to-install browser extension.
This project was originally only intended to apply Google's Material Design to my university's Blackboard website, but as it grew, I began to theme more of my university's websites and then started adding small scripts to add features or boost usability. Every time I encountered an issue, or saw something that I found difficult to use, I would try to fix it.
One of the most improved areas is the video player. The course content videos were difficult to use as you had to use the mouse to click on the buttons to play/pause, click somewhere on the razor-thin progress bar to rewind, and go through a series of popups and dialogs to configure captions at the start of every video! I emailed the university about this, but didn't get a response, so I decided to fix it myself. I added the standard keyboard shortcuts for play/pause, rewind/fast-forward, volume control, captions, and fullscreen. I also set sensible defaults, including a larger font size, better fonts, and a smaller width so your eyes don't have to move as far to read the captions. I also changed the upscaling algorithm to favour sharpness over smoothness, as the fuzziness of lower quality videos was harder to read.
Another notable area is the course selection screen. The default layout was a compacted list of courses with very long names, which made it difficult to find the course you wanted. I added a grid layout with course cards which stay in the same position over time to help you remember where your courses are. I assigned each of my modules and departments an image which is displayed on the card, and left instructions on how to change the image for your own courses. I also added a feature that dims courses from semester 1 when you're in semester 2, to help you focus on the courses you're currently studying.
It's hard to describe all the changes I've made, so I recommend you check out the GitHub repository which has a more complete list of features, before and after screenshots, and instructions on how to install it.
Nonogram (wikipedia) is a puzzle game where you fill in squares on a grid based on the row/column clues.
I created this web app after enjoying the Android 10 Easter egg and my success with Quintle. You can find it at adil.hanney.org/nonogram.
I later made Super Nonogram (available online) which is a rewrite of this app in Flutter with some new features.
One of the game modes in Super Nonogram is procedurally generated puzzles that get harder as you progress.
The other game mode is where you can input any keyword and it will generate a puzzle based on that. It does this by interacting with the Pixabay API to get images based on the keyword and then converting them to puzzles.
Quintle is my reimplementation of the viral game Wordle from before it was acquired by the New York Times.
The design was inspired by neumorphism, and it's playable offline as a PWA (progressive web app).
The word of the day used to match the official Wordle word, but they've since moved to an API approach where the word is fetched from the server, so I've stuck with the last publicly available word list.
On top of the core functionality, I added a few features:
- The ability to replay previous days' words
- A mode for e-paper devices that uses greyscale colours and improved contrast
Quintle is available to play online or through the Google Play Store.
A demo of the Forward And Backward Reaching Inverse Kinematics (FABRIK) algorithm.
In short, it's a way to calculate the joint positions of a chain of bones to reach a given point in space (like your mouse cursor).
I made this to experiment with the algorithm before using it for procedural animation in my A-Level Computer Science project (a multiplayer shooter game).
In the demo, you can customize the number of bones, their length, and whether they're constrained by gravity. You can try it out online.
A page that contains every analogue clock face.
Every minute, the page will pan over to the next clock face for the current time.
You can try it out online.
A top-down zombie shooter game I made for a Python coursework in university, featuring auto-save, a leaderboard, a "boss key" to quickly replace the screen with an Excel spreadsheet, and cheat codes.
You'll need Python installed to play.
An Office 365 integration for Linux that I took over maintaining.
You could open an Office file on your computer, and loffice-365 would upload it to OneDrive to edit with the Office 365 web apps. Then when you're done, loffice-365 would download the edited file back to your computer.
loffice-365 used a tool called nativefier to make the desktop wrappers around the Office web apps. Nativefier is now unmaintained so loffice-365 could no longer be updated.
You can view the source on GitHub.
SamsungAppsPatcher.md

S20 Debloat
May 2021
May 2021
S20Debloat.md

Collatz
June 2020
June 2020
collatz.md



































Social Media Demo
April 2022
April 2022
This was a working (though inefficient) social media demo I made after I was frustrated by not being able to access my chats across all my devices.
I wanted to make a proof of concept that it was possible to make a social media app completely in the browser, but that acted like a native app when installed as a PWA.
It had a Snapchat-like layout where you could swipe between the camera, chats, and feed. I only implemented the chat functionality and used it to chat with my friends for a while. I tested it with lots of cat pictures as you can see in the screenshots!