This is a sample of the kind of projects I've worked on over the years, it is by no means an exhaustive list.
As a jack of all trades, I've worked with countless technologies, languages, and platforms. If you have
specific questions, want to know more, or ask if I've used something before just reach out
and get in touch with me. Now, on with the shiny!
Source code is available upon request unless otherwise noted.
ilvlbot is a Discord bot that can dynamically pull World of Warcraft character information.
Written in 100% C#, ilvlbot was my first serious tiptoe into the Discord API, as well as my first .NET Core project.
My goal for this project was to not only provide quick, easy-to-access character information for our gameplay, but also
to explore a few different aspects of the Discord API I hadn't before. I was also interested in consuming a public API (Battle.net), via HttpClient,
as well as handling the real-time request loop to fetch the info and return it to the caller in Discord. This was especially interesting
to me, as it was the largest use of async/await in a project I'd done to this point.
While I was already familiar with git, this was also the first project that I wanted to get on GitHub, rather than hosting my own svn repos like I had in the past.
Future improvements I'd like to implement include better caching support, fail/retry policies, and per Discord server settings.
"Is There A Queue" is a single-function website that started off a bit as a joke.
When I was actively playing World of Warcraft, every time a new expansion came out,
my guild's server would constantly fill up, resulting in wait times up to hours!
Some guild-mates joked that it'd be nice if there was a quick and easy way to check
our server status so we could know if we needed to log into the game ahead of time,
in order to try and not get caught in the queue. Thus, isthereaqueue.com was born.
As one of my first PHP projects, taking a look back at the code leaves a lot to be desired. I'm not sure if I'll revisit this project, (other than to begrudgingly make sure the Battle.net API keeps behaving,) but if I do, a complete rewrite is probably in order.
bitcoinbot was a Discord bot that could be used to retrieve the value of Bitcoin and Etherium on demand. It served as a proof-of-concept application to first try Discord.Net, bitcoinbot started life as a very tiny always-on-top WinForms application. This project was an exercise to move its logic to be accessible via Discord instead of a standalone application.
This website itself is also a small project of mine. Created as a mini portfolio as well as contact card it also
serves as a test environment for tinkering with different web technologies.
I'm not web designer by trade but I do like to keep up with some of the latest technologies; for example, this site makes use of Open Graph style metadata. This results in a clean and usable embed on Twitter or Discord.
While I have experience with managed hosting providers from shared hosting to cloud platforms such as AWS, I still occasionally enjoy dabbling in
hardware and software (both consumer and professional) at home. When I needed to host my Discord bots, as well as any other content I
wanted to make available from my personal network, I decided to take a mildly enterprise look at running things. Using an older,
headless micro desktop, I configured a VMware ESXi Hypervisor to run two virtual machines.
One of the VMs ran Red Hat Enterprise Linux (RHEL), to run Apache httpd, as well other Linux-based flavor-of-the-month projects. It also served temporarily as my personal Linux development environment but I quickly discovered the low memory allocation coupled with attempting to use X11 via SSH was more frustrating than it was worth.
The other VM runs Microsoft Windows Server 2016, and is the hosting environment for my C#/.NET/.NET Core based Discord bots.
In the past, the Windows VM often found itself in charge of handling dedicated game hosting, for the games my friends and I were playing at that time. Provided that the CPU/RAM wasn't too limiting.