If only

“If only I had ____ I would succeed.”

These simple words will kill your dreams faster than anything else you could say or think. There are so many self-defeating thoughts that an entrepreneur can have, and they often take this very simple form.

While Garry takes it in the direction of getting your hands dirty and building, and the recent HN discussion talking about whether one should sell or not, reading these compels me to take it in a different direction this morning before work–I’d like to speak a little about mental blocks.

There were many reasons why you’d want to sell your company.  Your business deals with fads and the market will go away.  You’re done with this thing and want to move on.  But there is a bad reason I want to focus on:  “it’ll give me freedom to do what I want”.  I think when people say this, they mean two different things: 1) if I have lots of money to take care of life’s annoyances like bills and college tuition, then my mind will be free to work on anything 2) if I have lots of money, I can fund whatever I want to work on.  The latter, I find to be an unconvincing reason.

My dad is retired. He talks about starting a foundation to help education in Taiwan, and seems rather passionate about it.  He spends a lot of time watching and reading Taiwanese news.  Given a chance, he’ll talk your ear off about it.  However, he says, “if only I had a million dollars”, he could start his foundation.  And the way he usually thinks of getting the million dollars is through the lotto.  Now, my dad is no fool.  He knows the odds.  And I don’t know if it’s a generation gap in the way jokes are told, but if he’s serious, it’s a mental block that I see in some friends also.  It’s an excuse to do nothing because of the preceived notion that the external world hasn’t given you permission.

By contrast, a couple years back Oprah had some special on TV about a new school she was building in South Africa.  Though she put in a hefty sum, I was surprised to find out that she didn’t put in all the money herself.  She had other people help her with donations.  That’s why she had Nelson Mendela, Maria Carey, and others visit the school–to help donate.  Even when she could pay for it all herself, she enlisted other people to help. In a more recent example, Breadpig and xkcd joined forces to put a school in Laos.  They’re putting in the work, yes, but as far as I can tell, it’s none of their personal money. 

Just because something takes a million dollars to do, doesn’t mean it has to be your million. 

Perhaps this is obvious to some of you, but I was a little bit surprised when I realized this.  Growing up, I never thought about it too much, because in movies like Batman, Bruce Wayne funded his own crazy toys.  So I naturally assumed that if you want to do huge things, you do it all with your own money. As a kid, I thought:  If I wanted to build a Mechwarrior, I’d have to do it with my own money.  If I wanted to build a loop-de-loop highway, I’d have to do it with my own money.  If I wanted to build a giant chicken slingshot, I’d have to do with with my own money.

Of course, this comes with some amount of responsibility and constraint.  Pissing away other peoples’ millions is a sure way to get your legs broken, especially with money from a loan shark (or its million dollar equivalent).  But I believe constraint in business and philantropy, as constraint in design, is a good thing to focus your efforts.  Sometimes, personal money projects fail because they’re not as readily subjected to market forces.  A bad idea is kept afloat because there’s a huge chunk of personal money that keeps getting dumped into it.

In the end, I just want to say, you have a choice.  Don’t let a little thing like not having a couple million stop you from doing what you want to do, as there’s always more than one way to skin a cat.  But if you want to build a pyramid for your burial site, then yes, please do that with your own money.

rake task with arguments – Ruby Forum

Of course csh is evil! That’s nothing new.

This works just fine with bash:

rab://tmp $ cat Rakefile
namespace :foo do
   desc 'lol'
   task :bar, :num do |t, args|
     puts "num = #{args.num}"
rab://tmp $ rake foo:bar[123]
(in /private/tmp)
num = 123

Hey look. Arguments in Rake. I’ve been looking for this for a while now. No more using env variables.

Another bad data visualization

(click image to enlarge)


This is one of the worst data visualizations I’ve seen.  Problem is it looks pretty, so people send it around, but it’s not very informational.  Nor does it allow easy comparison of the data.  First, it’s not apparent that the light green and the dark green sections are the same thing until you realize it’s an “O” from “Google”, and actually adds no information.  Second, what do the size of the circles represent?  Is it combined daily spending or average daily spending per advertiser?  It takes a while to find the circumferencial text, which you’d guess that it represents the amount of revenue from top N advertisers.  Then the chart also mixes terminology.  While spending by advertiser and revenue by google are the same thing, you need to do extra work to figure that out.  Then, what the heck, the list of logos on the side is distracting.  It’s suppose to be the advertisers in the blue circle–the top 10 advertisers–but it sits firmly in the red section, which is the long tail of advertisers.  Even more confusing, the $59,184,783 is red, but points to the blue list of logos.  Lastly, the average daily spending is colored with the same position and weight as the combined daily spending, but it doesn’t represent the size of the circles, which adds even more confusion.

The only thing they did right was to match the size of the circles with the amount of combined daily spending.  Often times, people will draw these sorts of graphs using the diameter as the basis for comparison, which is misleading.


Using HTML attributes as a mini-DSL for AJAX


Sometimes, this is ok, but when html elements change, the controller methods break, and the effect cascades from the views through the controllers.  That’s a code smell that our code is tightly coupled.  Of course, we can refactor it to a separate .rjs template file, and justify it to ourselves that it’s the same as having an .html.erb file.  However, because .rjs files are often so short, the cognitive shift to find that other file is often distracting, and it still doesn’t solve the problem of code coupling.

Consider the following:  You want to have a link that makes an AJAX GET request to get a list of comments for the post when clicked.  It gets the response as HTML and then dumps it in the target DOM.  You also want to fade in an indicator feedback when the ajax is loading and fade it out when it’s finished loading.  Lastly, there’s to be a slidedown effect on the target comments DOM element.  

For the situation above, if we were to do it with render :update or with rjs files, you’d have code that is coupled with DOM elements as I said earlier.  What if we can contain it all on the client side, and leave the server side for business logic?



I went to the local Ruby meetup, and remembered that Ben Johnson of Authlogic was mentioning something about “data-” attributes in HTML5 and its relation to the problem I described above.  I wasn’t entirely sure what he was talking about, until I looked around for the “data- attribute” and found good ole Resig blogging about it (last year, no less).  

What this allows us to do is basically insert data into our HTML elements.  And because jQuery events let us separate the “how” in javascript from the “what” in html, we can declaratively use it as a mini-DSL of sorts.  

The basics are pretty easy to implement.  I didn’t do the data-indicator and the data-effect because I’m lazy and it’s left to the reader “as an exercise”.


There are some advantages to doing it this way.  
  1. Server response can be faster, since we wouldn’t have to rely on the server to generate the proper html link.  The UI effects and behavior can be all done on the client side, where it should be.
  2. I think it’s a bit cleaner to be able to say things declaratively, more aligned with how html is declarative.
  3. The DOM elements wouldn’t couple the controller and the view.  Everything that refers to DOM elements would be in the view and be easier to change without cascading effects.
  4. You can work in the same level of abstraction while in the HTML views and won’t have to jump between layers of abstraction.

Pretty neat.  So why use the class attribute as the method “call”?  Perhaps it’s better to find some other attribute.  I’ve seen facebox use the rel attribute instead.  That lead me wonder if other people have thought to do this before.  And of course, there’s something similar called AHAH microformat, based on JAH from 2005, which is demoed here.  

JAH does something notable, in that it uses the form:

to order to execute the javascript, instead of binding an event to the DOM.  This removes the extraneous href=”#” in the other way I showed you above (more succinct), but it breaks the declarative nature, and cannot be unbound and binded with something else easily–one would have to change all instances it’s called, instead of re-adjusting the DOM selector element (as rare as that may be).  I personally don’t think it’s as easy to read, especially when the method call has parameters, but the implementation would be shorter.


(Apologies if there are typos above.  It’s late, and I haven’t had my ramen)

Getting all attributes of a DOM element in Javascript/jQuery


$.each($(".hello"), function() {  alert(this);});

In this context, the “this” variable is actually not the jQuery objects. According to the docs:

Whenever you use jQuery’s each-method, the context of your callback is set to a DOM element. That is also the case for event handlers.

This is helpful when you want all the attributes of a particular DOM element. You can call attributes property on the “this” variable (this.attributes) inside of the each() method to get all attributes of each element with the class hello.



Testing Named Routes in the Rails Console


include ActionController::UrlWriter
default_url_options[:host] = 'whatever'


This entry was posted on Tuesday, January 8th, 2008 at 1:58 pm and is filed under Programming, Ruby.You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

I’ve always just worked around this by trying it out in the templates. Should keep looking things up on google. I learn much more that way. Anyway, thought the rest of you should know also.

A tiny empty shortcut

I think I've written about this before, by monkeypatching an empty method on the Array class that takes a block and executes it only if the array is empty.  But anyway, for some of you, you might see something like this taking place often:

<% if @messages.empty? %>
  There are no messages
<% else %>
  <% @messages.each do |m| %>
    <li><%= m.body %></li>
  <% end %>

To clean it up a little, you can do:

  <% if @messages.each do |m| %>
  <% end.empty? %>
    <li>There are no messages</li>
  <% end %>

Or else if each of your items is a partial, use the :collection method.