Collar City Stories: Late Night Customer Service

Collar City Stories is a blog series about my time in Troy, NY from 2009-2013.

One of my favorite restaurants in downtown Troy is a Pakistani-Indian restaurant called Shalimar. When I lived in Blitman during my junior and senior years at RPI, I often found myself ordering some Chicken Tikka Masala and Onion Naan to enjoy within the comfort of my room or the Center of Gravity.

It wasn’t because of the food that kept on bringing me back. Sophomore year, several members of the Senate were looking for a place to eat after a Senate meeting. One of the members of this party suggested Dinosaur BBQ. However, we discovered that it was not open for business yet (due to some bad intelligence from one member of the party) after we drove down. Tired and starving, we struggled to find a place that was open at 10PM. (Keep in mind, that this was before the boom that occurred downtown.)

We went walked past Shalimar and looked at the hours posted on the window. It was closing in 15 minutes, and we look at the hours dejectedly when a man inside opened the door and stepped outside.

He asked us if we were interested in dining in. We told him that we were interested, but didn’t want to cause any trouble if they were closing up. He told us not to worry, and after a little bit of back and forth, we stepped inside.

He took our orders and within 10 minutes, we were enjoying our very late dinner. He didn’t seem annoyed that we were staying past closing time and even provided us with some complementary naan while we were enjoying a very delicious dinner.

After we were finished, we paid our bill and left. However, that wouldn’t be the last time I go to Shalimar. A year later, I found myself visiting quite frequently as a result of that excellent customer service experience.

RMagick installation issues on Mac OS X

While I was trying to set up my new Mac OS X Mountain Lion installation for Ruby (on Rails) development, I encountered an issue installing the RMagick gem using the latest ImageMagick from Homebrew.

If you’re getting the following output:

checking for Ruby version >= 1.8.5... yes
extconf.rb:128: Use RbConfig instead of obsolete and deprecated Config.
checking for clang... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... yes
checking for InitializeMagick() in -lMagickCore... no
checking for InitializeMagick() in -lMagick... no
checking for InitializeMagick() in -lMagick++... no
Can't install RMagick 2.13.1. Can't find the ImageMagick library or one of the dependent libraries. Check the mkmf.log file for more detailed information.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

After a lot of searching, this GitHub issue reveals the source of the problem (ImageMagick <-> RMagick incompatibility).

Fortunately, downgrading the Homebrew Formula for ImageMagick does the trick.

brew uninstall imagemagick
cd /usr/local/Cellar 
git checkout 834ce4a /usr/local/Library/Formula/imagemagick.rb
brew install imagemagick

Raspberry Pi – Send SMS with external IP address on boot

I recently bought a Raspberry Pi for “research and development purposes” recently and I needed a way to get it’s current external IP address on boot.  I was inspired by this post on Reddit and wrote my own script to send my IP address via SMS.  This script uses the Twilio API for SMS, icanhazip.com for IP address detection and works with both IPv4 and IPv6 addresses (for those that use an IPv6-friendly ISP).

You will need a Twilio account (trial accounts work, but they’ll prepend text before your messages).  Just substitute the account id, token, originating number, and destination number.

I have put the code up on GitHub.

To get this code up and running, you will need to follow the follow instructions.

  • Copy the script to your Raspberry Pi and save it at /etc/init.d/sms-ip
  • Insert your Twilio account information and phone numbers.
  • Set the proper permissions on the file: chmod 711 /etc/init.d/sms-ip
  • Configure the script to start on boot: update-rc.d sms-ip start 99 2 .

I hope you find this code as useful as I did.

Concerto Con Moto: Deployment

This week marks the start of deployment preparation for the first Concerto Con Moto demo. Due to the unstable/unworkable solutions currently used to build Concerto Player images, I am building this image from scratch.

The current Concerto hardware architecture relies on CompactFlash cards combined with a IDE-CF adapter to boot the player. This flexible approach allows for a new image to be deployed by simply switching out a memory card. I am currently working on installing a base Ubuntu Linux system and the dependencies required to run con moto.

Stay tuned for more developments!

Concerto con moto: Full Swing

Work on Concerto con moto is going into full swing.  With only several weeks remaining, there are only a couple of tasks that I need to complete before release:

  • Finish motion overlay (Hand-gesture friendly UI)
  • Build Chromium-based LiveUSB image
  • Polish configuration wizard
  • Refine Kinect integration
Concerto Con Moto logo

RCOS: More DepthJS, a new name, and more work.

After various attempts to test the DepthJS plugin after building the NPAPI plugin, I discovered several additional bugs that prevented DepthJS from working correctly.  After resolving those issues, I returned to designing a logo and developing Concerto Motion Con Moto.

Concerto Con Moto logo

Concerto Con Moto: Adding motion to digital signage.

Deriving from the Italian music terminology, “con moto” translates to “with motion,” reflecting the objective and goals of this project.

Currently, a mock-up of the special overlay is checked in.  Stay tuned for more updates!

Concerto Motion: DepthJS

Concerto Motion relies on a plugin called DepthJS to receive gesture events from the Microsoft Kinect.  In my attempts during the past two weeks to compile it from the GitHub repository, I discovered that it was built against an outdated libfreenect (the open-source driver for the Kinect).  This weekend, I have worked on several patches to allow DepthJS to be built against the latest libfreenect, as well as contributing a Linux build script.  Those changes have already been merged upstream!

With the help of the OpenKinect community on FreeNode, I have successfully accomplished my weekend goal and look forward to returning to Concerto Motion development!

Concerto Motion: Getting Down and Dirty

This week’s challenge has been trying to comprehend and rewrite Concerto’s signage.js for use with Concerto Motion.

The current signage.js in the repository is based off the original Concerto 1 code for rendering content.  It works in a loop, doing the following:

  1. Fetch screen data.  If data is new or has changed, clear the document, re-render the template, and create the fields.
  2. Iterate through each item in the fields array, rendering each item one at a time.

This approach has worked well in the past, but currently does not allow for external events to interrupt this process.  If I wanted to pause this loop, render an overlay explaining how to use Concerto Motion, and listen to gesture events, it would be very hard to do.

I’m working on rewriting the loader and signage.js to allow this loop to be paused and restarted programmatically.

Concerto Motion: How It Works

Concerto Motion integrates gesture recognition using DepthJS with the powerful Concerto digital signage system.

After much consideration into its design, I’ve decided to use Google Chrome as a base for Concerto Motion.

The software consists of a modified Concerto Player LiveUSB image using Google Chrome, the DepthJS plugin/extension, and a custom packaged Chrome Web App that replaces the traditional Concerto renderer, allowing displays to gracefully handle network connection issues, a weakness of the current system.

A very rough concept of how Concerto motion will work is now available on the GitHub repository.  This is based off of the current Concerto’s Player’s rendering engine, and does not have any gesture recognition as of yet.  Stay tuned for more updates!