avatar

Hi, I'm AgentTroll

Welcome to my personal site
About Me

I'm an 18 year old programmer from Seattle, Washington.

I'm currently a student at Northeastern University, studying Computer Engineering. My future aspirations are to work on spaceflight, bringing science back to Earth and humans closer to the stars.

I first took an interest in programming from playing Minecraft. I started programming initially out of desire to recreate something like the survival games from The Hive servers. I never did actually get around to doing that. As a matter of fact, I've completed maybe 2 actual published Bukkit plugins. Regardless, I think that I've come a long way since 2013. Although programming was more or less of a side activity when I first started, I've realized that it's become much more than that for me.

What I Do

I have 6 years of experience working with the Java language. I try to do a little bit of everything, whether it be GUI design, building APIs, writing applications, Bukkit plugins, 3D games, you name it. Most of my work is published on GitHub, at least the ones I think are worth publishing.

The vast majority of what I do involves Minecraft in some way. I contribute to a few open-source projects, such as the EssentialsX project and smaller APIs some of my friends have written.

I think many people will probably have heard of me from either the Bukkit Forums (the account to which I inadvertently deleted a bit back) or the SpigotMC Forums. Since I'm not terribly good at coming up with project ideas, I like to browse the forums to look for interesting problems that other developers run into. There's a particular thrill with having to get your hands dirty and having to look around the server source code. Writing a short, elegant solution is just the cherry on top. I help other people solve their problems, people can benefit from reading the source code and picking up on what I've learned, and I get a blast of dopamine from doing some detective work.

Although I've dabbled into a wide array of different projects, I am especially passionate about investigating performance and analyzing multithreaded programs. I think that your code shouldn't just look good, it should be fast and safe as well. It's always interesting to see lock-free data structures or looking at how other people have worked around different obstacles to optimize their program.

I've also done some work involving the C and C++ languages. It feels liberating to be able to use lower-level constructs and writing closer to the hardware once one is used to writing high-level Java abstractions all the time.

I'm familiar as well with HTML, but I need a lot of hand-holding to work through it. I don't really take a particular interest in web languages, and the look of my website is just an unfortunate side effect from that I suppose.

My Work
Professional Experience
  • I am currently contracted with Skytropia, not in active development.
  • I am a former developer at SpaceDelta. I wrote and did the majority of maintenance for the species plugin. I left in September 2019 because of disagreements I had with management.
  • I am a former senior software developer at Intermissum Limited. I worked for a time on the reboot of the HCGames server, CryptoMC, as well as the highly successful MineSaga server network. I wrote the original minions plugin, the generators plugin, the kits plugin, the gambling plugin, the original bosses plugin, and worked on several other plugins that I can't even name off the top of my head. I also worked on server performance, and made major modifications to the server jar to optimize the player experience. I left in January 2019 to pursue my own interests, and returned in September 2019 to assist development.
  • I also did some preliminary work for the Project Mayhem network prior to it actually shutting down. The server came back a few months later and had great success, although I did not was not involved with it the second time around.
Current Works
  • My top priority is always getting my job done first and foremost. After that, I'll often work on other projects. Since I'm currently working, that doesn't leave much time for myself, but I do try my best.
  • Going along again with the -ate ending project names, a currently empty repository for gate is a placeholder for a new project which aims to extend upon my work on the fate project (discussed below) and track even more bodies - planets, stars, etc. It's a pretty ambitious undertaking for me personally, so I'll have to be sure to finish up what I want to get done before really diving into it. As of the last update to my website, I've gotten pretty far along and I'm proud to say that it has been a hugely rewarding experience seeing something like it come to life.
  • When I get the time, I work on my blog, linked above, on the side. I am a firm believer that one should always be adapting, moving forward, and learning new things on a consistent basis. I think that having overcome many problems in the world of software development, it is my duty to pass on some of what I've learned so that I can help other people learn as well. I don't think that I'm a big-time blogger or anything, but if the odd someone who either has the same problem as I, or someone who wants to learn more stumbles upon my blog out of the blue, I would consider that mission accomplished. Like I always say, you already proved that you are mildly interested by getting this far into the thick of whatever I'm writing, so it can't hurt to also look at whatever else I've written as well, since you couldn't be bothered to spend your time doing something else of course :)
Recent Works
  • I've also been working on this particular project, pbft-java for a long time. I actually had a lot more work done in 2018, but I recently decided to remove everything and start from scratch again in 2019. I over-thought the design, and didn't consider usability in the place of flexibility. Trying to conform to the protocol established by the PBFT whitepaper is one of the challenges I'm familiar with from working on the TridentSDK project, it's just that this time, I don't really have anything to test with to make sure I did everything right.
  • One of the more recent projects I've published is the instantskull project to resolve an issue with player skulls not being updated on the clients side. This inspired by a question on the SpigotMC Forums, and I enjoyed being able to write the lagger project to help me out in the process of debugging the problem as well.
  • I am particularly pleased with the calamity project, which I wrote to help reduce the complexity of writing an accumulating buffer. I succeeded in writing a highly modular API that I can use in the future in case I need a ByteArrayOutputStream. By reducing the amount of garbage produced to buffer bytes and transfer them for encoding or decoding, I believe I can write lower latency networked applications in the future.
  • One of my C projects is the fate project that I wrote to track objects in orbit around Earth. Because the Air Force publishes datasets that track the location of objects around earth in TLE format, I read up on the Space Track report and decoded that information to determine the position of objects in the sky. I was hoping that I could use this to connect to my telescope somehow, but I have so far been too lazy to get around to that.
  • Finally, another Java project that I think turned out well is my molarmass project. I was really frustrated by having to look up the masses of each individual element on the Periodic Table all the time to complete my Chemistry assignments, so I decided to write a little tool to help me out. The JSON parsing part to get all the mass data downloaded from the Internet was relatively trivial, but my best work is in decoding the actual elements from the input. I thought that the state machine design and the treeified form of the molecular formula was especially clever. I was also able to use Cucumber to perform behavioral testing on it, which I found to be an interesting take on the development process.
  • I can't put everything that I've done into a single webpage, so if you are interested in checking me out, you can browse the README files for all of my projects by clicking on my GitHub link at the top of the page.
Early Works
  • One of my earliest works was TNTIgnite, a plugin I wrote to learn the Bukkit API. This was followed by my attempt to write a Battle Dome plugin, which failed spectacularly.
  • I believe my first real work that was of decent quality was the BukkitCommons library, now called TrollCommons. I was really proud of the work that I did in performance testing collections and reflection. I wrote a post talking about it on the Bukkit Forums here.
  • In 2014, I dropped almost every Bukkit project to work on the TridentSDK project. This turned out to be not as successful as the team had hoped, and it's been more or less abandoned since I left the project to work at Intermissum in 2017. I learned a significant lot about the Java language, including the networking internals, multithreading, and performance testing during my time working on TridentSDK. In addition, the experience working with the protocol as well as learning how the Mojang team solved problems with their server in recreating the Minecraft server was a valuable learning experience for me.
My Tools

I frequently use IntelliJ IDEA and Maven to write my Java programs. I've yet to learn all the features that Java 9+ offers, but I use JDK 11 and run Java 11 to test my programs.

I also use other JetBrains IDEs like CLion and WebStorm to write C/C++ and this website, respectively.

My main OS is a Debian Bullseye machine running i3wm.

I am a huge fan of using Vim. I have neovim installed on my computer, as well as the IdeaVim plugin installed on all the JetBrains IDEs I use.

I prefer using Fira Code in my IDE. My theme for all IDEs is the Earthsong contrast color palette from the Rainglow themes plugin.

As far as development environment goes, I use SDKMAN to download the JDK and Maven.

I believe in the importance of digital privacy and I actively try to use privacy-respecting services and software where possible.

Debian neofetch
Other

Outside of programming, I enjoy studying astronomy and spaceflight.

I often do solo bike rides to destress. It's a chance for me to get out of my chair for once and get some fresh air.

I play an unhealthy amount of Team Fortress 2 in my free time.

I'm a big fan of Star Wars. I also enjoy listening to Coldplay.