I am Paul Durbaba, a Third Year Computer Science student at Cambridge. Welcome to my website. This is mainly intended to be used as a resume, with links to some of my past and present projects. Feel free to have a look around, and don't hesitate to contact me if you have an issue.
This summer I had the opportunity to intern at Arm, working on the verification team of a next generation interrupt controller. I chose to work there as my computer design course last year made me enthusiastic to explore the hardware side more, and I quickly picked up the teams tools - working with UVM, SystemVerilog and ModelSim, all of which I had very little prior experience in (only from my compdesign course).
Working within a large team on functional coverage of several blocks, I had regular meetings with designers and scoreboard owners (the scoreboard verifies that a block is behaving as it expects) to figure out which inputs and internal signals would be interesting / useful to cover.
I also had the opportunity to learn a lot more about Git, including the great joy of splitting a commit in two which involved having to manually edit hunks. In addition, I learned about code reviews on Gerrit and making issues on Jira.
In second year every computer science student undertakes a group project where they are randomly paired with 5 other students and given a client who defines the project. My team's project was about designing an AR game to keep (gaming) conference guests entertained as they walked about a conference.
I worked on the admin website, which allows organisers to add maps, locations and events to the conference, as well as track statistics such as how many people were using the app, and which achievements had been earned in the game. I designed this using React, but I chose to use TypeScript over JavaScript as I prefer statically typed languages. TypeScript with React introduced it's own challenges however, for instance TypeScript treats an object not having a field and the object having the field set to undefined as equivalent, while React makes use of that difference.
Last year I was the computer officer on the Robinson College Student Association (RCSA). I was responsible for the upkeep of the website, and initially when I became the officer I had to contact all of the other committee members and manually update their details on the website.
Hence I designed a system that allowed RCSA members to log in using their student Raven account and update their details on their own. This was written in PHP using forms. When the new committee took over, they were able to get their details up to date within a week of the handover thanks to this.
I have been running a minigames Minecraft Network where I have developed the Minigames plugins myself using Java and the Bukkit API.
In particular, I designed a system whereby a single Minecraft server instance can handle multiple instances of different minigames simultaneously. This is achieved by adding another layer of abstraction over the Bukkit API achieved through my MinigamesBase plugin. But the tradeoff was that I had to develop all of my minigames to use this API, rather than being able to use pre-existing Bukkit minigames. In addition, I developed a control server which handled communication and scheduling of minigames between the different Minecraft servers.
The network has a Discord server available to join here if you want to get involved.
I have done many programming projects in my free time over the years. Here are some of them.
This site is running on Express, which I have now made use of several times. Originally I threw myself into the deep-end with this (now not-so-new) remake of my website, which uses Node, Express, Jade (Pug), Stylus, and Bootstrap, all of which I had little to no previous experience in when I started working on it.
Previously I have worked with the Canvas element to produce games and demos like the web version of YellowQuest, an Android app I made back in 2014.
I permanently switched to Linux in December 2014, and switched my desktop to Arch Linux in April 2015. I run several servers, such as this webserver and my Minecraft Server, which all also run on Arch, although I used to use Ubuntu server. I now prefer Arch as I find it much easier to keep everything up to date if you update gradually than if you have big updates twice a year.
This server is run through a Nginx server to manage virtual hosts, although I previously used to use Apache2. This particular virtual host proxies to a Node instance running this, but there are other virtual hosts available such as those I use to host my Nextcloud and GitLab sites.
Java is the language that I most experienced in. I have made two Android apps, YellowQuest and GravSquare, both of which were developed in pure Java without a game engine. YellowQuest took about a month to develop back in 2014, while GravSquare took about two months in total as I had first to develop a level editor to allow me to make the levels for the game.
I have also developed several Bukkit plugins, some of which are available to the public (e.g. RewardsTime) while others are restricted to my Minecraft Network, although I am in the process of uploading them to GitHub as I now see more value in making them public than keeping them private.
These are the other things that I like to do in my free time.
I am a member of both the board games and video games society at my college, and attend their events weekly. At board games I enjoy games such as Carcassonne, Catan and Bang! At the video games society we usually play Switch games such as Smash Bros, although I like to bring along my old Wii and enjoy games such as Mario Kart Wii and New Super Mario Bros which I enjoyed in my childhood
Last year I was involved in a campaign with a few of my friends. I played a half orc called Nysturuk who was a warlock for the god of undeath, and the campaign played out over a series of arcs which culminated in fighting a giant robot called the "Brass God" and the evil wizard Kirgagen who controlled it and was attempting to use it to slay the first dragon and make himself a god.