Kevin Spacey motivates the Touch of Class Show Choir before their performance

April 6th, 2011


Kevin Spacey motivates the Touch of Class Show Choir before their performance, originally uploaded by Americans4Arts.

Dave and Katie and their fellow Touch of Class performers meet Kevin Spacey back stage prior to their performance and his keynote speech at the Americans for the Arts 24th annual lecture.

Katie’s Welcome to Touch of Class 2010-2011

November 2nd, 2010


Katie’s Welcome to Touch of Class 2010-2011, originally uploaded by Haole Punk.

Chantilly High School’s Touch of Class Show Choir made the rounds to welcome the new recruits. As has become a tradition in our household, the welcoming committee formed a high-energy starburst to commemorate the occasion.

Mahekal Beach Resort in Playa del Carmen, Mexico

October 25th, 2010


Mahekal Beach Resort in Playa del Carmen, Mexico, originally uploaded by Haole Punk.

One of the most scenic beachfront hotels I’ve seen, and backed by 3 miles of shops, restaurants and night life on the 5th Ave of Playa del Carmen. Cozumel is a ferry ride away, and can be seen off the coast.

Votridea – Online Video Contest Platform

July 2nd, 2010

Exchanges Connect Recent Video Contest Runs on Votridea

Our Rails team at work is busy with the launch of Votridea, an online platform to run video contests, from concept and advertising to voting and judging, and on to announcing contest winners. Videos can be hosted on YouTube through their developers API, or to several other popular video hosting back-ends. The voting controls are all configurable so we support multiple quality categories, star votes, thumbs and like. Our custom contest timeline lets the customer set the duration of each contest phase, and they can determine if the winners are judge voted, community voted or both. A lot of hard work is paying off, as we have several large clients knocking on our door ready to launch contests.

How can anyone make a buck with the Ruby Language?

March 26th, 2010

At a movie theater a few weeks back, I saw a fun fact on the screen that stated: Did you know that there are 293 ways to make a dollar using US coins? I wondered how a programmer-type like myself would calculate that, and devoted a rainy morning to write some ruby code. Turns out the solution was harder than I thought. My original version was very brute force, was really slow, and dedicated to the US coin set and single dollar amount.

After many refinements, I came up with the Changer module below. This module’s classes lets you set up a currency system and calculate and list the coin permutations that sum to the specified amount. The Currency class not only allows you to work with US coins, but with some monetary research, develop versions for Russian, Swedish and Euro currencies. Using some optimizations, I was able to increase the speed at coming up with all the coin permutations by a factor of 100 over the original version. Calculating permutations for large dollar totals can take a very long time. (try: ruby usa.rb – 10000)

Another enhancement was allowing a subset of coins to be specified on the command line, and also using a total dollar amount other than $1.00.

So, if you’ve ever wondered how many permutations of pennies, dimes and quarters can make $9.75, then this ruby code was written for you.

module Changer
  class Currency
    attr_reader :tender, :name

    def initialize(name)
      @name = name
      @denoms = []
    end

    def add_tender(name, face_value, plural=nil)
      @denoms << Tender.new(name, face_value, plural)
      @denoms.sort! {|e1,e2| e2.value <=> e1.value}
    end

    def make_change(face_value)
      @tender = @denoms.select {|d| d.value <= face_value}
      unless @tender.any? {|d|
           (face_value/d.value)*d.value == face_value}
        puts "#{face_value} cannot be changed with those"
        exit
      end
      @tray = [0]*@tender.length
      @regmax = @tender.length-1
      @cntr = 0
      permute(face_value, 0)
    end

    private

    def permute(sub_tot, rind)
      div = sub_tot/@tender[rind].value
      div.downto(0) do |v|
        @tray[rind]=v
        nsub_tot = sub_tot - @tender[rind].total(v)
        if nsub_tot == 0
          res="#{@cntr+=1}: "
          @tray.each_with_index do |q,i|
            res << @tender[i].to_s(q); break if i == rind
          end
          puts res
          break if rind == @regmax
          next
        end
        permute(nsub_tot, rind+1) if rind < @regmax
      end
    end
  end

  class Tender
    attr_reader :name, :value

    def initialize(name, face_value, plural=nil)
      @name = name
      @value = face_value
      @plural = plural || @name + 's'
    end

    def to_s(quantity)
      quantity>0 ? "#{quantity} #{quantity == 1 ?
                    @name : @plural} " : ''
    end

    def total(quantity)
      return @value * quantity
    end
  end
end

A US Currency driver for the above changer.rb module.

require 'changer'

DENOM = [
  ['penny',        1,   'pennies'],
  ['nickel',       5,   nil],
  ['one-dollar',   100, nil],
  ['quarter',      25, nil],
  ['dime',         10, nil],
  ['half-dollar',  50, nil],
  ['five-dollar',    500, nil],
  ['ten-dollar',  1000, nil],
  ['20-dollar',  2000, nil],
  ['100-dollar', 10000, nil]
]

#
# Usage:
#    make change for a dollar
#        ruby usa.rb - 100
#
#    make change for $12.75 using only pennies, nickels
#    and quarters
#        ruby usa.rb pnq 1275
#
#     note:   use first char of DENOM coin name to specify
#                coins
#
s=ARGV[0]
if s.nil? || s == '-'
  selections = DENOM
else
  selections = []
  s.scan(/./).each do |c|
    e = DENOM.detect {|n,v| n[/^./] == c}
    raise "invalid denomination of coin" if e.nil?
    selections << e
  end
end
m = Changer::Currency.new('usa')
selections.each { |name, val, plur|
  m.add_tender(name, val, plur)
}
m.make_change((ARGV[1] || "100").to_i)

Snowmageddon D.C. Aftermath

March 1st, 2010


Snowmageddon D.C. Aftermath, originally uploaded by Haole Punk.

What 35″ inches of snow looks like in Northern Virginia.

Is Your Idea Truly Original?

February 11th, 2010

In a recent debate at work, we discussed Picasso’s famous quote ‘good artists copy, great artists steal’.  While thinking of a way to join the debate,  I was reminded of product idea I had at AOL, a web-based, navigable time-line of your life in pictures, text and videos.   The idea grew out of my practice of finding the best digital photos I took at the end of each year (an exhausting process of browsing my hard-drive photo by photo), creating a music-backed slide show using a desktop product called ‘PhotoJam’, and sharing this with relatives and friends.    Add to that the fact that in 2003, Google launched their finance.google.com that had a nifty little stock chart navigator that you could scroll left and right, and adjust the time-scale to scroll year-by-year or day-by-day with ease.    Furthermore, I was huge fan of the power of ‘tagging’ photos in Flickr.

Out of those three ideas, I synthesized scrolling through a time-line of your uploaded photos month-by-month or year-by-year, and if you tag them with ‘best’, voila!… add a song, and out would pop your music-backed slide show of the years best photos.   Original idea?   Debatable.

I was lucky at AOL to secure funding and actually build this product (now defunct circavie.com).   At launch time, we actually made a minor splash, getting mentions in Mashable and by other Web 2.0 bloggers.   (check out the Mashable Posting, and you can see Kelly Gifford’s timeline and pups).

However, we soon discovered about 3 or 4 other time-line sites that had already launched months before us and were crying foul that our site was getting so much attention, and that we weren’t doing anything new or original.   We also soon discovered that there were 9 other identical time-line sites in the works and ready to launch.  And a few months after launch, AOL was contacted by no fewer the 3 attorneys representing parties who had the ‘patent’ on computer based time-lines, and wanted to ’strike up a deal’ (apparently a common occurrence at AOL when a new product is launched).   I read some of the patent applications written a year prior, and they read like the functional spec for circaVie, plus additional features we hadn’t though of.

So what does this all mean?   I suppose I learned a couple of things.

  1. Ideas are cheap and easy to come by.   Acting on them and trying to better people’s lives with them is really hard.
  2. There are no original ideas, only original experiences.   Ideas grow out of synthesized thoughts derived from experiences.
  3. If you do come up with a idea that is truly a ‘good’ one, know that many other people are also thinking the same thing.  (Before, during and after you did)
  4. Don’t worry about who thought of an idea first.   Worry if you’ll have the drive, passion and perseverance to realize the idea and use it to change your life or other people’s lives for the better.
  5. Really good ideas don’t always start out with the grandest of intentions.  Facebook grew out of Mark Zuckerberg’s idea for a website to let his fellow dormies vote on photos to find out the best looking girls on campus.

New Video Contest Widget

December 3rd, 2009

Cool video playlist widget created by former AOL colleague, Corey Lucier

Animoto can make art of your life

November 27th, 2009

Animoto continues to amaze me with the quality of its photo transitions. These are my personal favorite photos from Flickr, taken over the last 10 years. The story doesn’t really flow perfectly, but even when you’ve viewed a photo hundreds of times, it takes on new life when you change its angle and put some music behind it. Fantastic Result!

Change Your Climate, Change Our World

November 17th, 2009

Hey, this is pretty cool.   Our MetroStar Ruby on Rails team just launched a Video Contest website for the U.S. State Department Bureau of Education and Cultural Affairs.    The site leverages the youTube developers API.   Built in only 3 months, our Rails team (Winnifred Tse, Kelly Gifford, Dave Keener and Dave McVicar) utilized all the Agile Scrum best practices.