Richard Lee's blog

A blog about programming, tech, startups and Taiwan.

Why I love Vdio more than iTunes Store

Today Rdio announced the public beta of its video streaming service Vido to Rdio subscribers.

Really nice job of Rdio team. I personally uses Rdio for almost everyday not only because it provides high quality music streaming, but also its social feature just works.

Vdio screenshot

By social, I mean:

  1. I could easily find what others are listening to at the same time
  2. There’re lots of nice curated playlist available to subscribe
  3. I could also send songs or albums to friends’ inboxes

And now, they all come to video as a service.

For pricing, iTunes Store is still competitive, but I would rather like to pay more for Vdio as I could easily discover good contents with its powerful social features.

Obviously Google will soon provides something similar as they owns both Google+ & Google Play, and already made certain integrations.

What’s wrong with you Apple? Ping was an acknowledged failure, but there’re no new attempts as replacement of social features. Limited Facebook integration in iOS 6 is nice try, but that’s not enough.

Why is web design so bad for Japanese websites? »

Many different aspects from the discussion. But I believe:

  1. This is cultural differences
  2. Asian tends to browse the web for infomation
  3. Usually there is over-reliance on Flash
  4. There are still some beautiful Japanese web pages

In Taiwan, the things become even more interesting.

Taiwanese users are familiar with Facebook / Twitter / Instagram and many other global SNSs. However, the traditional web design here is much similar to those you can find on the link above.

i.e. Lots of big and colorful texts / promotional images, and the page is usually occupied with Flash ads banner (even fullscreen one!).

So confused.

Play by your own rules. »

This is my most favorite article of the month. Gowalla ex-CEO described their journey to build Gowalla, grow it, lose the check-in game, and exit.

A Look Inside Design at Airbnb »

Though this is a designer interview, it’s also true for developers.

What is the most frustrating aspect of design?

Presenting to others who aren’t directly involved in the day to day design process is always a challenge. Everyone always has very different ways of thinking and approaching problems because they’re not as used to it, and everyone likes it a different way.

From my startup experience, the difference between a bad programmer and a good one is how one presents his ideas to the team.

Educational Account for GitHub »

In case you haven’t heard this, there is a free micro plan of GitHub for every student to use for class projects or research.

While I was a student, I heard many of my classmates say that they really love GitHub for OSS, but use BitBucket for private projects because they can’t afford GitHub’s paid plans.

Thanks guys from GitHub for making this world better.

Computing for Data Analysis »

Today I finished the online course “Computing for Data Analysis” by Roger D. Peng from Coursera.

This is a 4 weeks long course as an introduction to R programming language, which is widely used for data analysis and related topic.

From the simple syntax and graphs to advanced topics including regular expression and OOP in R, this course well covered almost all aspects of R, and provided students a solid foundation to use R as data analysis tool.

Just like other Coursera course, there’re weekly quizzes and programming assignments as evaluation, and I really enjoyed these assignments because it was usually based on real-world data like Baltimore Homicides or Hospital Compare.

I’ll recommend this course for everyone interested in R for data analysis.

Why isn't iTunes shuffle random? »

I came across this discussion on the Internet today, the summary version is that:

It is random, but the order is only shuffled once, when you turn random play on. If you want to re-shuffle the order, turn random play off and then on again.

This remind me that few years ago, I took my first iOS consultant of an app for online music streaming service.

Obviously, I also needed to implement the shuffle feature as well, and I naively designed the system to randomly pick a song after a song played. Of course, as described in the post, this will lead to so many troubles that I finally decided to rewrite the shuffle logic.

Customize Propane with Gasoline

Propane is one of the apps that I keep opened for every moment.

Customized Propane

Campfire for everything

That’s because our workflow is basically Campfire-centered, which mean that lots of notification and messages are pushed into Campfire rooms, and once we keep hanging out in the rooms, we won’t miss anything about site operation, and code changes.


Propane is my favorite OS X client for Campfire, and gasoline is a wonderful Ruby gem to help customize it.

Though since Propane 1.1.2 they’ve added a way to add some JavaScript to augment or customize the user interface, it still lacks a management system for those scripts.

To use gasoline, just simply type:

gem i gasoline
gasoline ignite

and that’s done. You can found some other “drops” on the project website, including one I wrote for embedding SpeakerDeck slide inline.

Signup Google Apps for Free

Updated: The right steps to signup free account.

Though Google announced they no longer provides free plan for Google Apps, they still leave a free single user signup option.

It’s for those who needs Google Apps for configuring domain for Google App Engine apps, but you still can use it for other services like Gmail or Calendar.

Just go to this signup link filling out the form.

Following the steps below:

  1. Go to Google App Engine website, and click “Create Application”
  2. Then click “Application Settings” under sidebar “Administration” section.
  3. Type the domain you what to register as Google Apps under “Authentication Domain” text field.
  4. Click Save Settings

Switch to Ruby 2.0 right now on OS X

At RubyConf Taiwan last week, Matz, ko1 and Akira gave talks about Ruby 2.0 features and implementation details.

There’re tons of new exciting features including refinements, keyword arguments, Module#prepend and many others.

In addition to the new features, Ruby 2.0 is 100% compatible with Ruby 1.9, and the improved GC performance provides immediate benefits.

As Ruby 2.0 will be release soon at 2013/02/24, you should now test your production codes on Ruby 2.0, and help report bugs if possible.

Ruby 2.0.0-preview2 with rbenv

In Polydice, we used rbenv for both development and production Ruby version management.

To install Ruby 2.0.0-preview2 (the latest preview version available currently), you might just simple type:

rbenv install 2.0.0-preview2

Things went well until you start to install gems where you’ll find the OpenSSL module is missing.

This is already a known incompatibility issue for Ruby 2.0 and OS X’s builtin OpenSSL library, and thus you need to install newer version of OpenSSL to compile Ruby’s OpenSSL module.

brew install openssl
export CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl`"
rbenv install 2.0.0-preview2


Also, You need to install the 1.3.0 prerelease version of Bundler, as the current stable version is incompatible with Ruby 2.0.

gem i bundler --pre