Adventures in geekdom

31 Dec 2012

Yet Another New Project

In typical Erik fashion, I’ve found yet another project I want to do. For Christmas my parents gave me a 26” LCD TV that I’d wanted to use to watch TV in my office since I’d been using my 3rd LCD for that and I wanted to be able to actually use that LCD. For awhile I’ve been looking for a way to raise the new TV off my desk high enough to reach over my current LCDs, but all of the arms I’d found wouldn’t raise the TV high enough. I finally decided that I’d have to go with a wall mount (I was avoiding it because I didn’t want to put holes in the wall, bother finding studs, etc), so I went to Best Buy the day after Christmas to get one. They had some wall mount brackets on sale that supported 15-37” TV’s, so I picked up one of those. While I was thinking about it, I thought I might as well get two and set up a second wall mount screen since I had to get it all set up for one anyway.

Meet my new office setup, dubbed “The Command Center”!

I have the bottom 3 screens hooked up to either my desktop, my Macbook, a linux server or an open port I have for hooking anything up. The top left screen is hooked up to my U-Verse DVR for current TV, an Apple TV for Hulu or recorded stuff and a Bluray player because I’ve always hated the existing Bluray software for PC’s because it’s so crappy and bloated. That leaves the top-right screen and my new project.

As you can see in the picture, it’s currently hooked up to one of my 2 Raspberry Pis. Since I don’t like having a bunch of different keyboards and mice sitting around and I want a port on my 4-port KVM open I won’t be able to have the Pi hooked up to any input. Therefore, I’ve decided to make that screen into a dashboard. In the past I’ve seen pictures of companies who have a “build” dashboard, or a “support” dashboard and thought it was a cool idea. I can’t seem to find any pictures of the ones I’ve seen in the past, but they were basically screens that displayed any recent build errors, support requests sent, active tickets, things like that. Since I don’t have any active tickets that I care about, I think I want to make one that shows things like the current news, weather, incoming emails and the like.

The Beginning of aphboard

Once I’d decided I wanted to make a dashboard I naturally thought of writing it in Go. I was able to find Go-SDL for doing the graphics and everything, but before I really got anywhere with it I thought about how much time it would take to develop each individual module I wanted and decided not to write all the graphics stuff myself. I had the great idea of just making each module a mini website, so that’s what led me down the path I’m currently on.

I’m going to use an embedded version of the open source part of Chrome (Chromium) called the Chromium Embedded Framwork (CEF) to handle the rendering of the sites. It supports HTML5, canvas for anything graphical and V8 for a fast Javascript engine so I feel like it could handle anything I’d want to do with it at this point. To handle my “mini website” idea, I’m going to split the screen into multiple tabs without any kind of divider and each one running its own CEF frame. I’ll probably end up writing the main dashboard application in C++ and make each module (mini site) in Go, node.js, whatever. As long as it can serve a page it can be used to populate a frame. At some point I may even make it so each frame can run its own graphics if it needs to do something that a web site can’t do.

Cross-Compiling for Raspberry Pi

The biggest problem I’m running into right now is the matter of cross-compiling CEF for the Pi. Chromium can run on an ARM processor so I know CEF will run, but there aren’t any pre-built ARM packages that I can use so I have to build my own. Apparently people don’t like doing cross-compiling on OS X because I’m having a hell of a time finding one. I’ve given up and created an Ubuntu virtual machine with an ARM toolchain and managed to get CEF for the VM compiled, but haven’t tried doing an ARM version yet. I figure I’ll do it in steps so I don’t lose interest in the project. I’ll get CEF built, make a very basic dashboard that runs in the Ubuntu VM and then try to get that running on the Pi.