December 2013 - January 2014
Teeveed is a natural language interface for the media center. I built it as my winter break project in 2013.
You talk to it with your smartphone’s web browser. You say “Okay TV, play Game
of Thrones episode 3,” and
teeveed will open that media in VLC on your media
Teeveed is made up of three components:
A coordinator daemon, which runs on your server. It indexes your files for quick search and fuzzy name matching. This process also hosts a webserver with an API, and a remote control client UI.
The remote control client UI. This is a webpage that uses the Chrome Speech APIs to receive user input and pass it on to the coordinator.
The HUD, which displays user intents and matched entities on the big screen. It also opens VLC to play movies. This process controlled by the coordinator.
The intents you see here are parsed from the user’s plain-text input by Wit.ai, then handled by the coordinator daemon.
Development has ceased. I quit working on this early in the Spring 2014 semester as my classes became more demanding.
What went well
I’m very happy with the progress I made on teeveed in the limited time I gave it. I learned a ton.
Leveraging my newly-aquired Java skills from my Winter 2013 classes to build a JavaFX GUI was was fun! I don’t really get the Java hate.
Postgres is really flexible, and has some great extensions for things like full text search.
Chrome has a ton of very cool proprietary APIs, like the speech-to-text API I used for voice.
Wit.ai. I built my app in the early days of the service when the Wit team was making daily improvements. It was fun discovering how powerful the service could be. They also gave great support on Twitter. I’d definitely recommend Wit.ai to a friend.
What went poorly
JRuby. The biggest productivity drain on this project was waiting for JRuby to compile my Ruby code into Java bytecode during app boot. There’s some kind of AOT compilation step you can do to speed this up, but I couldn’t find good documentation for this in 2013. At the time, all the JRuby expertise was locked away inside enterprise users.
As an extension, Maven, the Java build and packaging thingy. Maven is inscrutable to a new user (eg, me), and the slew of plugins I used to build my artifact didn’t help any. Where JRuby was a producitivity drain because it increased my iteration times, Maven setup was just a single massive time-suck.
Complicated architecture. I designed the system to be complex to test my ability to coordinate different components, but I ended up trying to build too much flexibility and configurability. I should have hard-coded more.
You can find the code at github.com/justjake/teeveed. I still find the development notes interesting.