JOREL ALI
Software Engineer
![Jorel Ali](images/avatar.png)
Jorel Ali
Software Engineer
Hi, I'm Jorel.
Since I was young, I was always fascinated how lines of code in Notepad could create simple programs in Windows if you save a file with the extension .vbs
I rediscovered my passion for programming when I was introduced to Minecraft and the Bukkit server implementation which allows you to write addon content using Java. This formed the basis for my exploration into computer science which I pursued at university.
Currently, I work in business intelligence and tinker and maintain my own personal projects, which can be found on my GitHub.
Education
-
University
2017 — 2020Completed a Bachelor of Science Degree (First Class Honours), studying Computer Science at the University of Warwick. University coursework projects included:
- Creating a compiler that compiles a subset of C code into LLVM IR in C++C++
- Creating a clone of Tetris using OpenGL in C++C++
- Creating a packet sniffing and filtering system in CC
- Using the Keras library to predict numbers from the MNIST datasetPython
- Working on a pair programming project to make a mobile robot explore a mazeJava
- Creating a web-based CV analysis and recommendation system using machine learning in a team of 5 peopleJava
- Creating a multiplayer LAN based mastermind game written in HaskellHaskell
- Creating a transcompiler in Haskell which converts Blockly code to HaskellHaskell
Third year dissertation about creating an implementation of System P, a package calculus designed to eliminate dependency hell, in order to verify the claims outlined in its paper.
Abstract
The use of libraries in contemporary programs has been ever increasing as programs become more and more complex. Package managers play a pivotal role in the process of dependency resolution which consists of determining the set of independent program components that are compatible with each other. Traditional package managers rely on the use of version numbers to determine compatibility between libraries, however, these can lead to overly restrictive constraints.
In 2016, a draft paper proposed System P, a calculus for packages, which aims to solve the dependency issues that traditional package managers face. In this paper, we create an implementation of System P in order to verify the claims that the draft paper proposes.
(Dissertation is available on request: dissertation@jorel.dev)
-
Senior School
2015 — 2017Completed A-Level qualifications in Maths, Further Maths and Computer Science, achieving A*AA grades.
Additionally completed Physics at AS-Level, achieving an A grade.
Work Experience
-
Software Engineer
2020 — PresentCurrently working as a Software Engineer for a company that creates powerful Business Intelligence solutions.
-
Database administrator assistant
2016Performed a work experience placement as a database administrator assistant for an osteopathic clinic. Helped transfer a desktop database to a cloud based database. From this, I gained an insight of database systems (both local desktop based and cloud based) being used in the real world.
-
Sales Representative
2014Performed a work experience placement as a sales representative of John Lewis in their Electronics Department. I advised customers on the best products to suit their needs and improved my confidence in communication skills.
Languages
-
Japanese
2017 — 2018Studied Japanese at the University of Warwick for one year, learning the basics of the Japanese language.
-
2018
- Attended a month long Japanese Language and Culture Seminar in Hiroshima:
- Improved my Japanese which was previously studied at Warwick
- Presented the cultural differences of foods to an audience in Japanese
- Visited two World Heritage sites: Miyajima and the Peace Memorial Park
- Participated in a student exchange program with a Japanese student
Other
-
-
2023
- Registered FIDE Chess Arbiter 2021
- Registered Level 2 ECF Chess Arbiter 2020
- WSET Level 1 Award in Wines 2018
- Registered Level 1 ECF Chess Arbiter 2018
- University Chess Society Vice President
- Vice President of the largest university chess society in the UK 2018
- University Rock Climbing Green Card
- Proficiency in rock climbing permitting ability to rock climb without an instructor
-
CommandAPI
Aug 2018 — NowJava | Bukkit/Spigot plugin
The CommandAPI is a Bukkit/Spigot plugin which provides an API for developers to use Minecraft's in-game command interface that was introduced in Minecraft 1.13.
This project is my largest and most popular open source community project, amassing over 20,000 total downloads. After this project gained some traction, I created a Discord server which currently houses over 150 community members. I've recently published this project to the Maven Central Repository, the largest collection of Java open source components, which is accessible by millions of developers.
Highlights of the CommandAPI include:
- A compile-time Java reflection usage annotation processor, which checks for fields at compile-time to eliminate runtime reflection errors
- Multiple API designs to meet the needs of developers so they are comfortable with writing code how they want to
- A server administrator-facing API to provide compatibility for legacy plugins to use newer Minecraft features
The CommandAPI consistently encourages me to:
- Communicate and collaborate with a large cohort of developers to design new, innovative features
- Implement a powerful Minecraft library, with an easy-to-use and intuitive developer-facing API
- Write exceptional documentation for a variety of target users, both developers and Minecraft server administrators
- Maintain high quality code that meets Java standards and adheres to the Maven Central Repository requirements
- Provide continuous support and advice for new and veteran users using the CommandAPI
-
Elm Brainfuck IDE
Nov 2019 — Dec 2019Elm | Single Page Application | Functional Programming
Elm Brainfuck IDE is a web-based Brainfuck editor and interpreter. It builds on the knowledge of my previous Brainfuck projects, such as my Java based IDE and my NodeJS based interpreter.
This project uses Elm, a purely functional domain specific programming language that compiles down to JavaScript. I chose Elm for this project as it allows the user to declaratively create HTML and CSS in a typed environment that is much safer than raw HTML and CSS. In addition, I was able to improve my functional programming skills whilst learning the basics of the Elm architecture.
By using Elm to create this project, I learnt:
- How to write typed HTML and typed CSS in Elm
- How to create an easily extensible single page web application
- How to create a basic interpreter using a functional programming language
- The fundamentals of the Elm architecture and how to effectively use the model-view-controller software design pattern
-
Setup Elm GitHub Action
Oct 2019JavaScript | GitHub Action
Setup-Elm is a GitHub Action that provides a means for continuous integration for Elm projects by using GitHub Actions.
From this project, I learnt:
- The importance of standards for a public community project
- How to effectively use Continuous Integration in a project to enforce good software engineering practices
-
ForteLang
Aug 2019Java | JavaCC
ForteLang is a purely functional and dynamically typed programming language. It is created using the Java Compiler Compiler (JavaCC) which I encountered briefly for a Formal Languages coursework project at university.
By creating this programming language, I learnt:
- The fundamentals of creating a compiler
- The importance of analysing and researching design choices
- Various ways to evaluate complex data structures, such as nested function calls
-
Safe Reflection Annotations
Jul 2019Java | Annotation Processor
Safe Reflection is an annotation processor which aims to provide safer reflection methods to a project which uses multiple conflicting libraries. It provides compile-time checks to ensure that methods and fields which are accessed by a project are indeed valid, in order to prevent common
NoSuchFieldException
s andNoSuchMethodException
sBy creating this annotation processor, I learnt the basics of creating compile time annotations in Java, as well as learning how to load classes from other Jar files to inspect their structure.
-
PluginCreator
May 2018JavaScript | Java
The PluginCreator is a web-based interface concept which allows anyone to generate Java code for a Minecraft plugin. The web-based interface is a visual programming language, similar to Scratch, based on Blockly.
More information about this project can be found in my blog post, Programming for non-programmers, where I summarise the creation of the PluginCreator and the aims for the final product.
-
Doodle Jump Wii
Apr 2018C | Wii Homebrew Application
Doodle Jump is a platformer game created for mobile devices. Doodle Jump Wii is my first homebrew application (an application that is not licensed by Nintendo) for the Nintendo Wii.
From this project, I've been able to explore the C programming language and gain an understanding of how it can be used to create a simple 2D game.
-
PoemCreator
Feb 2018Java | Java Swing Application
I created a Java Swing application which helps create 3D ASCII Stereograms. It creates a formatted 3D stereogram given a body of text and a list of words to "hide" inside the text.
From this project, I learnt the importance of planning projects beforehand, creating requirement specifications for an output result and the use of pseudocode to aid in generating algorithms.
-
DevRantWear
Jan 2017Java | Android Smartwatch Application
devRant is a community of developers which share posts of life as a programmer. Frustrations and successes are discussed together in this community.
I created a smartwatch application to display these posts on the smartwatch face. From this project I learnt:
- How to use Google's GSON library to parse JSON from a web API endpoint
- How to retrieve information from a web API endpoint using the HttpURLConnection class
- How to use the Wearable DataApi to send information between a phone and a smartwatch
- The basics of making a smartwatch app (including app design)
- The concept of a ring buffer
I give extra credit to my father who suggested the ideas of using a ring buffer to store multiple "rants" on the watch instead of requesting a single rant when desired. In addition, I give him credit for suggesting the use of the gesture features on the watch for a better user experience.
-
Oodler
Oct 2016HTML | JavaScript
Inspired by an internet post, I created a web application which replaces vowels with the word "oodle" for comical effect. It is powered by JavaScript and HTML and doesn't require a server (it is standalone).
From this project, I learnt how to use JavaScript to manipulate strings and add elements to a webpage. I learnt about the speech synthesis feature and the use of Bootstrap to make a webpage look more appealing.
For extra comical effect, I employed the use of the Konami Code to add a new feature to the webpage. This led me to discovering the use of adding a keydown event listener to make the webpage change dynamically when text is inputted into a textbox.
-
Superfight
Apr 2016HTML | Node.js | AngularJS | Pair Programming
Superfight is a multiplayer card game about creating characters to fight with absurd conditions.
I created an online system with my cousin to allow players on a network to play against each other. We used Node.js to host the a server and AngularJS to interact between the server and the client. In our end result, players could join "rooms" where they would be paired up against a single opponent and be dealt random cards from a file.
-
Project Euler Solutions
Oct 2014 — Nov 2018Java
Project Euler is a website dedicated to a wide array of complex computational problems. These are my Java solutions to these problems.
From solving these problems, I have learnt to apply knowledge I have previously accumulated from my education (for example, dynamic programming to solve Problem 67). I have gained a better understanding of creating efficient algorithms and discovered many fascinating mathematical topics.
In particular, I am most proud of my Newton-Raphson nth root method which I created to solve Problem 80, after learning about the Newton-Raphson method from A-Level Mathematics.
Whoops! It appears you've gotten lost! My blog is located here!