In the spring of 2016, I took an advanced programming course for engineers. This mostly covered programming in C++. For my final project, I chose to do something quite ambitious. I decided I wanted to write a program that would compose music on its own and save it as a MIDI file. I'd written a similar way less sophisticated program in Java when I was in high school. The program I had written before generated music and played it back. It sounded alright, but not great, and there was no way of saving it. For this project, I wanted the music to sound fairly good, ideally as if a human had written it. I wanted to incorporate the ability to generate different styles and the ability to open the generated files in music notation software and a way to listen to the files after the program was closed. I also wanted the ability to use multiple instruments, rather than just the generated tones used by my high school program. This was quite a challenging project, but it ended up being a lot of fun to work on, and although I met all my goals for my course and got a 100 plus extra credit on the project, I still do not feel I am done with it yet. The current version can be found in its github repository. Challenges faced in this project included learning how MIDI files work, and getting C to write proper MIDI files. MIDI files are actually fairly complicate and very particular, and the timing system used is even more complicated. Although I already made the MIDI generation side of things pretty modular, I plan to make the composition side of things more modular so that others can more easily code their own genres that can be used with the rest of my code, or even included in a release. This has been a fun project, and one I really want to further develop!
IBM PC XT Restoration
An ongoing project of mine has been to restore my grandfather's IBM PC XT. The IBM PC XT was the second PC released by IBM and was the first personal computer to come with a hard drive. This particular XT was my grandfather's when he was the cheif engineer at RCA Astro Electronics. So far, I have cleaned it up, including the bulky Model F keyboard and fixed a short by replacing one of the capcitors. Currently, it will not boot, though the power supply runs indicating no short is detected. The RAM has been replaced, and the Intel 8088 processor has been verfied to be working. The issue has been narrowed down to a fault somewhere on the motherboard. My next plans are to test every capacitor on the board and replace faulty ones.
The Orange Bot
The Orange Bot (Twitter username @TheOrangeBot) was a twitter bot written in Java using the Twitter4J libraries as well as APIs for other services such as Wolfram Alpha. The Orange Bot would read tweets directed at it and would figure out what type of response to generate and tweet back at the user who tweeted at it. There were two iterations of The Orange Bot, both have since become obsolete due to changes in Twitter's API. I have plans sometime in the future to revive this project once again, however school keeps me busy at the moment. The first version was my first dip into using external Java libraries and taught me a lot about how to use the Twitter APIs, however, it was primitive and had to manually update every fifteen minutes or so. The second version was built from the ground up and instead had tweets pushed to it allowing for much quicker responses without being rate limited by Twitter. This second version gave me a lot more expereince working with libraries and APIs and was quite a bit more advanced.
0range.xyz is not my first website. It is, however, the first website I have created from scratch. The purpose of 0range.xyz was to be both a place where I can express myself and to be a learning experience in HTML and CSS. Starting with no experience with HTML or CSS, I aquired a domain name, started a github.io repository and followed this excellent tutorial by Shaye Howe. The tutorial was excellent and helped me create this site and learn some new skills!