Category Archives: Work

Ray’s work

Clouds As Business Services (CABS)

Snow is again falling in Munich. The sky is covered with real clouds. One cannot see the sun.

snow in munich

Today, cloud computing is one of the most discussed IT agendas. (Along with social, mobile, and big data.) Many of my friends are playing important roles, i.e. directors, evangelists, program managers, and helping to define new directions, … Everywhere I turn, I see and hear about it: one company offering SAAS solution, another with PAAS, another offering fusion cloud, yet another with private cloud, …

Is it spring already? If not, cloud is certainly breeding like rabbits!

I just came back from a trip to Bonn, Germany. I flew into the Köln-Bonn airport this past Monday. Because my hotel could not beforehand confirm room availability during my entire time there, I decided to rent a car at the airport, in case I needed to move. However, when I got into the hotel, the front desk told me that there is room availability for the entire week. Hence, my rental car sat in the basement garage for the entire week. All together, it accumulated 30 KMs. On my way back, I thought how nice it would have been, if I just took a cab from/back to the airport. It would have been cheaper and certainly a lot less hassle.

Pure Product Strategy is heading toward a dead end

Similar situation applies to enterprise computing. Despite all the fluffs around utility computing, what companies really need are solutions that address their needs. The problems with cloud computing nowadays are:

  1. Every IT vendor wants to be the cool kid and offers one or more cloud PRODUCT(s).
  2. Hence, there are too many cloud PRODUCTs out there.
  3. A lot of efforts are required to adapt existing business processes to fit PRODUCTs.
  4. Many times, those PRODUCTs overpromise and under deliver.
  5. Hard to measure if one PRODUCT really produces better ROI than another.
  6. No formal PRODUCT standards & portability. Vendors prepares nice labels; but, they are apples and oranges apart.
  7. Since your data lives in the vendor cloud, it’s pretty hard to swap PRODUCTs.

Yes, I have capitalized the word PRODUCT in every sentence. Vendors want to appear savvy. Hence, all their marketing departments are marching in the same direction. Maybe, the font is different, the marketing logo is bigger, and the punch line is sexier. Yet, they all want a piece of your IT budget.

Debunking Gossips

When all rushing to the door, funny things happen. I remember people telling me following myths:

  1. Freemium product is the best business model.
  2. Being Lean will reshape the product innovation process.
  3. Product companies have higher valuation than service companies.

Let’s check the facts.

  1. Oracle bought Eloqua last year for $871 million. Both offer pretty expensive softwares and are doing quite well without having freemium. SAP, Microsoft, Apple. Somehow, big names live pretty well without freemium.
  2. Apollo program took the man to the moon. Was it cheap? Definitely not. It was one of the most expensive endeavors in the human history, costing $23.9 billions (http://en.wikipedia.org/wiki/Apollo_program#Program_cost). Even the SpaceX Dragon costs a cool $800 millions – $1 billion. Being fat works pretty well.
  3. Google won because they provided one of the best searching experience / services. Even their website reads it. (About Google Product & Services)

Obviously, grapevines have been debunked.

  1. The markets are willing to pay for premium quality – iPhone, iPod, iMac, …
  2. Complex engineering requires extensive planning & design – BMWs, airlines, yachts, …
  3. Winning services company really pays attention to user experience – Lexus, Mövenpick hotels, Tiffany, …

Better Services Excel over Lame Products

When companies take a pure product orientation, they become really very inward looking. (Just read Steve Blank’s blogs – http://steveblank.com ) People sitting in black rooms would spend a lot of efforts (money, time, and resources) guessing what the market will look like in 1 – 5 years from now. Then, the marketing department would go on blitzkrieg advertising campaigns. 9 out of 10 times, those efforts would fail and products would be shelved. Bunch of $$$s needed to be written off.

I was in LA a few years ago and saw lots of impersonators on the Hollywood Boulevard. It’s hilarious to have photos taken with the fake Bruce Willis, who never died in any action films & only getting senile slower and slower (Stirb Langsam). There are lots of starving movie-star-wannabes who are getting nowhere. Meanwhile, on NYC streets, the demand for cab drivers remains high. Some of those drivers may one day become famous, as in the case of Chevy Chase. Cab drivers were talkative & seemed pretty content on my trips.

stirb langsam

The point is: The market always demands better solutions. When IT companies think in term of providing superior services, they will look at one customer’s problem at a time and provides services people need; in contrast to product companies, who maybe too ambitious and forgot about the details.

Successful companies share common DNAs.

  1. They really know what people want, down to SERVING the need of a single customer. (Detail oriented)
  2. They are extremely focused on providing SERVICEs where the customer will use once, love, and come back for more – customer loyalty. (Focused)
  3. It’s better to SERVE one client really well than making garbage products where none of the 100 customers like. (Process-driven)
  4. Value creation through understanding and SERVING customers’ decision-making process. To SERVE, one must know how something makes sense to the customer. (Know-how)
  5. A good SERVICE is useful and provided only at the right moment. Otherwise, it would be a luxury. (Timing.)

Closing Thoughts

While cloud computing is already here and will becoming increasing important. The winners will be the ones who understand the value creation process and deliver solutions from customers’ point of view. This is what I call CABS (Clouds As Business Services).

Next time, I go back to Bonn, I will definitely hail a cab than driving in the snow on AutoBahn!

My Presentation @ the University of Burgundy

OK, today, I gave my 2nd presentation of the year at the University of Burgundy, France, on following topics.

  1. Lean Start-up Methodology
  2. General Project Management techniques, i.e. Waterfall, Agile, Lean, SCRUM
  3. State of Cloud Computing industry, latest news, i.e. mergers and acquisitions, the evolution of cloud computing platforms, coolest technologies, i.e. NoSQL, Functional Language, …
  4. Microblogging &  Liberalization of communication mediums
  5. Methodology to manage risk

Yes, it was done in French again to a stadium of ~100 students. Since yesterday, I have shared with students my experience of starting company, and providing cool technologies to IT giants, i.e. Salesforce, Amazon, Oracle.

So, here is my presentation on SlideShare.

http://www.slideshare.net/rgao2009/lean-start-cloud-computing-methodology-in-french

Use Ruby 1.9.2 on Lion

The process for installing Ruby 1.9.2 on Mac Lion + IDE is as follows:


# 1. Could have used homebrew. But, MacPort still works. And, RVM does not play nice with Netbeans 6.9.1
#install rubygems for 1.9 is already included in this port, no need to do a separate install.

sudo port install ruby19

#2. Change the symbolic links

cd /opt/local/bin

sudo ln -s erb1.9 erb
sudo ln -s gem1.9 gem
sudo ln -s irb1.9 irb
sudo ln -s rake1.9 rake
sudo ln -s rdoc1.9 rdoc
sudo ln -s ri1.9 ri
sudo ln -s ruby1.9 ruby
sudo ln -s testrb1.9 testrb

#3. Add /opt/local/bin in front of the $PATH in .bash_profile file

# MacPorts Installer addition on 2011-05-08_at_20:54:13: adding an appropriate PATH variable for use with MacPorts.
export PATH=/opt/local/bin:/opt/local/sbin:$PATH

# 4. install gems

sudo gem install rails

# 5. install debuggers

sudo gem install ruby-debug19
sudo gem install ruby-debug-ide19
sudo gem install linecache19

# 6. fix the defect in the ruby-debug-0.4.12  per http://noteslog.com/post/netbeans-6-9-1-ruby-1-9-2-rails-3-0-0-debugging/

The detailed instruction for fixing the gem is here. Recap as follows

line 142 (optional error) /opt/local/lib/ruby1.9/gems/1.9.1/gems/ruby-debug-ide19-0.4.12/lib/ruby-debug-ide.rb


# error line: $stderr.printf "Fast Debugger (ruby-debug-ide 0.4.9) listens on #{host}:#{port}\n"

$stderr.printf "Fast Debugger (ruby-debug-ide19 0.4.12) listens on #{host}:#{port}\n"

line 78 (serious error) /opt/local/lib/ruby1.9/gems/1.9.1/gems/ruby-debug-ide19-0.4.12/bin/rdebug-ide


#78 Debugger::PROG_SCRIPT = ARGV.shift
#replace with following:

script = ARGV.shift
Debugger::PROG_SCRIPT = (script =~ /script([\\\/])rails/ ? Dir.pwd + $1 : '') + script

Otherwise, you will get missing file error in Netbeans or other types of IDEs, when you try to debug.

Finally, if you are using Macport version of Ruby 1.9.2, you need to added the CA certificate. Otherwise, Ruby will complain with following error

OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed


#solution

sudo curl http://curl.haxx.se/ca/cacert.pem -o /opt/local/etc/openssl/cert.pem

Ruby Meta programming + autoload

Ruby Meta-programming is complex. Here is a good tutorial for that:

http://www.vitarara.org/cms/ruby_metaprogamming_declaratively_adding_methods_to_a_class

The syntax is:

module YourModule
  #Add new class method
  def self.included(base) # :nodoc:
    base.extend ClassMethods

  #Alternative to add class method
    class << base
      def public_method_2
        puts "public method"
      end
    end
  end

  module ClassMethods
  # Define class methods here.
    def some_class_method
      puts "In some_class_method"
    end
  end

 #Add new instance method
 def some_instance_method
   puts "some_instance_method"
 end
end

class YourClass
 include YourModule
end

YourClass.some_class_method

y = YourClass.new
y.some_instance_method

whereas, “obj.extend(mod)” pulls in the instances method from the added module. As a result, it may overwrite the method in the current object.

And, “self.included(base)” is a callback, when the current module is included by another class or module.

Continue reading