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. I was able to clean up the PC along with its Model F keyboard, however there was a fault somewhere on the board. With the help of Minus Zero Degrees, I managed to track this to a certain capacitor and remedy the issue. With the system powering on, I was able to boot only into BASIC. As is too common with these older Seagate drives, this hard drive was not functional anymore. I ended up using an XT-IDE Adapter and am currently able to boot this system off a 2GB Compact Flash card. This is the highest capacity supported by PC DOS 6, which is what I ended up installing. Unfortunately, the Tandon floppy drive is also non-functional. The belt is tight, but the motor doesn't spin. Therefore, to install DOS, I needed to install it to the CF card mounting it as a file system for Virtualbox. This worked, and now DOS is fully functional. Another area of concern was the IBM Model F keyboard. While nearly indestructible, these keyboards do have an Achilles heal. That is, the inner foam, which disintegrates over time. I was able to cut a new foam mat, but the assembly of this keyboard is very difficult without the proper machinery. Nonetheless, I managed. It was, however, an experience I wouldn't wish upon anyone else. While I had the keyboard apart, I gave the rusting backplate a nice scrub and fresh coat of paint. Overall, I am very happy with the restoration of this IBM. I'm currently working on creating a PS/2 to Serial mouse adapter using a Teensy 2.0 microcontroller that should allow me to attach an IBM PS/2 mouse. While not period correct, it looks good with the rest of the system. As well, I am trying to configure an 8-bit IDE Ethernet card I obtained to connect to the internet.
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! I recently launched a new personal site, and will be converting this site into a more in depth documentation of my projects.