The Personal Blog of Bradon Kanyid
Musicbot for Hangouts

This project has been a lot of fun. The point of it is to assist in conversations in a music-related Hangouts group chat. I’m not sure why everyone settled on Hangouts as the chat standard for our group, but people like it because the barrier to entry is so low.

Zenith TV Interface

Back in December, my buddy Epitrope moved to NY, and was trying to get rid of the things he wasn’t going to transport across the entire US. One of these things was an older 720p plasma Zenith TV. He is a hacker extraordinaire, and after doing a bit of looking at the manual, saw that the protocol for the serial interface on the back is documented. He created a set of programs to communicate with this port to do some TV automation, which I thought was really cool. After doing him the favor of taking the TV off his hands (I’m an altruist at heart…), I decided I wanted to use the same programs, running on a dusty Raspberry Pi 1 I had laying around instead of using a full computer like he did.

Atari 7800 UAV Installation

This is my most recently completed project. “Complete” is a fairly subjective word though, as the likelihood that I pop the top on my Atari 7800 again soon is fairly high. The point of this project was to install the Atari UAV board inside my 7800 in order to get a much better video signal out of it.

2017 New Years Resolutions

Wow, it’s really been like two and a half years since I’ve made a new post. That’s no good. Oh well, can’t change it now. It’s a new year, and I’ve got a bunch of (hopefully realistic) resolutions, one of which is to blog more. As a way of getting back into it, I’m just going to write about my resolutions, and start from there. I believe my readership is like zero, so this is mostly for personal reasons, but hopefully next year I can come back to this and be happy that at least 50% were accomplished. We shall see…

Here they are, in no specific order:

Blog More

At the start of this post, I mentioned one of the resolutions would be to blog more. This is multi-faceted for me. When I say ‘blog more’, I’m actually hoping to:

  • Write More
  • Make a better blog
  • Put Myself Out There
Noppoo Choc Mini Guide

Well, I finally did it; I bought my first mechanical keyboard, a Noppoo Choc Mini 2M with Cherry MX Blue switches from Massdrop. As this is my first mechanical keyboard, I really didn’t know what to expect. I knew that there would be a few function keys to control some of the features, but I didn’t really take the time to read up on them, past noting that there was no way through hardware to rebind the Capslock key to Escape. After looking at many keyboards and failing to find this feature, I’ve made my peace with it. But I digress…


Once it arrived, I immediately took it out of the box and plugged it in. There was only some bubble packaging, the rubber keyboard cover, a piece of paper with a serial number or something, and a small bag containing a USB cable, a wireless USB receiver, and a keycap puller. Upon plugging in the keyboard, it immediately went red and I could start typing. I really like the feel of the Cherry MX Blue switches, both the tactileness and the feedback from the clickiness.

Tech Book Club List

Over the summer, some friends and I are planning on reading some computer texts that are considered required reading. I’ll be adding to the post as we come up with other interesting books.

Using Songkick API in Javascript

Songkick is a music service that finds local concerts based on your personal tastes. You give it some info about what you like, either through an exported iTunes library, Pandora playlist, or scrobble history, tell it where you’re interested in going, and it lets you know who is playing and where. I’ve been a happy user for at least two years now, and it’s a really good tool for tracking tours and concert history.

Requesting an API Key

For all the aspects I enjoy about Songkick, I found it somewhat difficult directing people to my Upcoming Events calendar. They don’t seem to offer any pre-configured way to embed the content in other places, but they do offer an API now. I requested an API key, and went to work trying to embed my Upcoming Events calendar into this blog post.

Dynamic Content on a Static Site?

Initially, I thought I would do something similar to Mopidy-Subsonic and start working on some Python to decode the JSON I get from Songkick. However, I want to put it on this website, and my website is static content only. If I want any dynamic content, I’ll have to resort to client-side Javascript, similar to how Disqus works for my blog comments. I am no Javascript expert, especially for client-side content, and I am no DOM expert either. However, I saw in the documentation that the right kind of request would generate JSONP, which I could then assign to a callback to do all the parsing and generating work. I imagined that at that point, I could fill in something like an empty div tag on the page with the generated HTML. My initial research on how to generate the API call bore interesting fruit. It was difficult to find much in the way of doing this without a library. Everyone uses JQuery or Prototype for this, it seems. I like libraries, but I don’t want to add an entire library for one small feature, and I want to have an understanding of how it works before I rely on the library. I don’t like magic. I found an article on requesting remote JSON without JQuery on Stack Overflow, and modified it to support the JSONP callback convention. I later found an article on the differences between JSONP and JSON, which gave a similar snippet for attaching the JSONP as a script.

HTPC Build - Part 1 - Hardware

I’m finishing up my yearly summer stint here in Craig, AK, and I thought it might be a good time to actually build that Home Theater PC that I’ve been dreaming about for the last 3-4 years. For those unfamiliar with HTPCs, the basic idea is to have an all-in-one computer that is good for all media duties that you may have relating to your television. In my case, that means being able to watch movies and TV shows from many sources, including Netflix and Hulu (because I don’t have cable), as well as being able to play videogames, both old and new. As I said above, this has been a dream of mine for a few years, and after seeing Sauerkrause’s build, I felt the need to finally spend some of my hard-earned money and commit to the project.


While I was in school, my apartment slowly succumbed to the bachelor lifestyle. It didn’t take too long until I moved my desktop computer out into the living room next to the TV. I’ve been using a dual-monitor setup, with my normal monitor on my desk and my TV acting as a secondary. This works fairly well, but leaves something to be desired. Navigating the desktop feels strange when either display is off, and AwesomeWM leaves a bit to be desired for dual-screen use (I could probably configure this better, but I haven’t spent a lot of time on it). Also, I’ve had a lot of problems trying to get vertical syncing working correctly between the two displays, as they are running at different refresh rates. For playing the occasional movie or tv show, this has worked pretty well. However, as my desktop is a Linux-only system that I run a few always-up services on, watching Netflix and Hulu becomes difficult, and playing modern games is an exercise in futility.


My solution to this problem is to build a small computer with enough horsepower to play modern games, while also being capable of running Netflix and Hulu, as well as playing local media through XBMC. To meet these requirements, it seems that Windows becomes the only option for operating system. I don’t hate Windows, but I also like to see what can be done with Linux, and I’m very comfortable in the Linux environment after the last 5 years. With Steam releasing a client for Linux, I should slowly be able to play modern games as they become available. That may be idealistic, but I do consider myself an idealist. That being said, no amount of idealism is going to allow me to run Crysis 3 in Linux today. Also, there is still no acceptable way to use Netflix within Linux. All the solutions use Wine and are browser-based. Browser-based solutions mean that a mouse is required to use the system, which does not meet my minimum requirements. The default answer to this problem is to use Windows exclusively or to dual-boot between Linux and Windows, because Windows supports a Netflix plugin for Windows Media Center. Dual-booting is not an option for me. It totally breaks the user’s experience. So the only option is to use Windows exclusively, right? Well, not quite.


More info can be found at the Mopidy-Subsonic Github page.

Graduation! Time for more learning!

Now that I’ve graduated from Portland State University with a Bachelor’s degree in Computer Engineering, I will be using my new free time to work on fun projects, including this site!