Buying Customers: Microsoft and Yahoo is about no more Innovation?

Microsoft and Yahoo potential merger is being billed as the largest tech merger. When such large software companies merge, it worries me.

There are many facets to the merger including markets, web presence, customers, communication tools, employees, work culture, among others. When financial companies that have money in their accounts merge they just become bigger institutions with larger capital to play with. When manufacturing companies (and others who make stuff) merge, they can optimize their making process and put together their product portfolio. However, when software companies merge it means they have figured out they are not able to complement their portfolio by building it themselves.

Most big software houses can afford to build a piece of software in terms of people and development cost. The harder part is stealing customers and mindshare away from products that already exist. You are effectively buying the other company to get the customers. Software companies do not really have any redundant operations to save on except the employees who work on duplicate efforts in both companies.

Everyone including Microsoft, Yahoo, Google, Facebook, Myspace are just fighting for the same crowd of people spending time on their pages for pretty much the same thing – mail, search, news, socializing – and hope to get the rest of the industry to pay for their eyeballs. Microsoft and Yahoo have a large pool of smart people in the house who have built many different technologies. But, they do not expect to put a few hundred people to a project on their own and create something that attracts and retains customers or eyeballs (to get the advertising money). There are not too many ways you can slice and dice and present those same features (at last that is what MSFT and YHOO think if they are merging).

You can hear them thinking: “We cannot really think of do anything else to create to get more customers, let us just put your customers and my customers together and see if we can hold on to all of them

Posted in Technology | Leave a comment

Playing It Inexpensive: At the Trailing Edge of Technology

I was LMAO ROFL (enjoying it immensely) when I saw the announcement of the Apple iPhone price cut to 399 all the way from 599 (or to 400 from 600 as your brain should really see it). Whatever be the reasons for the price cut, the joke is on those guys who stood in line less than two months ago to have the privilege of paying 50% higher price just for the sake of owning it a few days earlier than the rest of the crowd. I bet a whole bunch of them just bought it for the cool-factor than really needing to zoom in and out of their pictures with two fingers instead of pressing keys. I do not remember anything falling so much in price after so much hype like the iPhone. Some call it a ripoff of the early adopters! Snazzy interface with handicapped functionality only extracts so much from only so many lusers users wallets.

I know geeks take immense pleasure in staying at the cutting edge of technology by buying the latest gadgets. Phones are not the only such gadgets where early adopters pay the huge premiums. Computers, Blu-Ray/HDDVD players, Televisions and most other equipment charge a premium when they are the top-of-the-line. I remember someone at the recent Hotchips 2007 conference announcing at the mike that he regularly buys $8000 systems to play games. BTW, he looked more than 50 years old!
I said in a previous post of mine about shopping that I Forget the Features to avoid paying too much to future proof my purchases but focus on what I want in basics. However, I am deeply indebted to sheeple people who pay through their nose for bleeding edge technology since they partly contribute to keeping the technology industry (ergo my job) humming.

I did the whole bleeding edge thingy when I bought my first cellphone, a Sony CMD Z1. I bought it when I was a student (when a dollar is worth more than $1) for more than $200 and after just one year it was priced at $39. My last two cellphones were exactly the type of purchases that vampires vendors hate. I bought the Treo 300 (ugly beast of a phone) when the rebates dropped so low that I made $30 when I bought it on Amazon (and made $50 more when I sold it on craigslist a couple of years later). I realized I did not really need the keyboard as much when it made the phone so bulky. The next purchase was when I bought two Audiovox SMT 5600 Windows mobile phones for $20 each from cingular when it was being phased out.

I reckon I saved about 600 dollars in total by waiting an year from the prime-time of those phones. Dropping the price of an iPhone does not do much for me. My Audiovox plays mp3s very well through its speakerphone speaker. It also syncs very well over my vmware installation of windows to my corporate Exchange. Imagine saying that with iPhone in one sentence – sync, vmware, Exchange! The one I lust after is the HTC Vox (interestingly at the same $400 price point currently as iPhone) with a slick keyboard underneath a candybar form factor. I am still waiting for it to be released and become obsolete…

Posted in Technology | 1 Comment

Signalling on Rails: Tips on Exception Notifier

When you are developing rails apps and you are hacking your way around, it is fine to get a bunch of errors and screen dump of what went wrong. However, when you start deploying it and want to convince users to accept the new system exceptions are like segfaults. You do not want them to see gobs of exception messages on their browser which will be an excuse for them to write it off even if they did not RTM and did something wrong. Another problem is that people will happily hit Back and not save what happened and only bitch about the instability of the system.

Exception Notifier is a great plugin to solve these issues. Basic installation of the plugin is pretty smooth and if you already have emails working from your app then exception notification works pretty easily. There are enough Google results for you to get it working.

One standard problem that almost everyone has is to get it working in your development environment. The following changes did it for me: update your application.rb and update your config/environment/development.rb.

application.rb

include ExceptionNotifiable
local_addresses.clear

development.rb

config.action_controller.consider_all_requests_local = false

More interesting changes are to do with picking specific errors out of all the errors and sending some to the browser and some via email. In my case, I had support for free-form SQL queries in our internal application which could give internal MySQL errors to user queries which I wanted to go to the browser. Here is what you add to application.rb:


# Try to get incorrect SQL errors and show them on screen
def rescue_action_in_public(exception)
case exception
when ActiveRecord::StatementInvalid
render :text => "You have errors in your SQL Syntax. Please try the Back button and fix them before trying again. #{exception.message.inspect}"
when ActiveRecord::MultiparameterAssignmentErrors
render :text => "You seem to have some inconsistent input. e.g. Date like Feb 30 2007. Please try the Back button and fix them before trying again. #{exception.message.inspect}"
else
super
end
end

The ActiveRecord::MultiparameterAssignmentErrors is a very interesting exception which you surely want to get to the user than via an email to the admin. I found out that when forms have incorrect date input (like Feb 31), MySQL generates this obscure exception. I could have borrowed some date validation code but why do extra work when you can rap the users knuckles instead.

Posted in rails, Technology | Leave a comment

Planting Trees: using railstree plugin in Ruby on Rails

I was looking for a quick way to build a hierarchical navigation tool in Ruby on Rails. There are good examples to build your own tree in Ruby when you use acts_as_tree and Single Table Inheritance etc., but nothing very easy to do otherwise.

A little bit of searching led me to the railstree plugin (source). Unfortunately, the documentation and any notes I found were in Portuguese so I thought it will be useful to illustrate how to use it in English. You could just try the Google translation of the Portuguese page and get most of what I have below (and get a few laughs at the translation while doing it).

First download railstree plugin from one of the rubyforge mirrors and install the files into the appropriate directories. You might need to hack the RAILS_ROOT path in the install.rb to correctly install the files using the install.rb script. You could also just repeat what the script is doing by manually copying the files yourself. (The script/plugin method of installation mentioned in the homepage of railstree did not work for me).

Now you have to include the javascript standard files with the two additional lines at the bottom in your view.rhtml file:

(Note that I have not figured out how to show HTML tags inside my snippets so remember to add < and > to HTML tags in the snippets.)

< %= javascript_include_tag ‘prototype’ %>
< %= javascript_include_tag ‘effects’ %>
< %= javascript_include_tag ‘dragdrop’ %>
< %= javascript_include_tag ‘controls’ %>

< %= stylesheet_link_tag ‘tree’ %>
< %= javascript_include_tag ‘tree’ %>

You could always do a simpler version


< %= javascript_include_tag :defaults %>
< %= stylesheet_link_tag ‘tree’ %>
< %= javascript_include_tag ‘tree’ %>

Now you need to construct the tree in your controller. In my RoR project, the navigation tree is displayed in all controllers so I just put it in app/controllers/application.rb:

def create_tree_menu
if (@menutree)
return @menutree
end
@menutree = Tree.new("MyTree", "")
Parent.find(:all).each do |p|
pnode = Node.new
#(p.name, "/parents/show/#{p.id}")
pnode.link_to_remote p.name, {:base => self, :update => 'content',
:url =>{:controller => 'parents', :action => 'show', :id => "#{p.id}"}}

Child.find(:all, :conditions => "parent_id=#{p.id}").each do |c|
cnode = Node.new
#(c.name, "/children/show/#{c.id}")
cnode.link_to_remote c.name, {:base => self, :update => 'content',
:url =>{:controller => 'children', :action => 'show', :id => "#{c.id}"}}
pnode < < cnode
end
@menutree << pnode
end
@menutree
end

Now the explanation: The above code is constructing a navigation tree for a two-level hierarchy with a Parent Model and a Child Model. The Child Model has a parent_id attribute linking to the Parent table. The default action when someone clicks on any node on the tree is to call the show Action for that node. This is done by setting the pnode.link_to_remote and cnode.link_to_remote with the parameters as above. The update attribute points to the div of the view to be updated when the node is clicked in the tree. The base attribute is very important since that reference is used internally in the railstree plugin to callback so it better be not null.

I did not try modifying the images for the icons of the tree but you can do that by using the pnode.icon method. You can also set the open/close status of the node by calling the open method but we will come back to that later.

Now how do you show this in your view?

div id="dtree"
< % if (@menutree) %>
< %= @menutree.to_s %>
< % end %>
/div

div id="content"
Your ERb code
/div

Viola! Now you have the tree just like it shows on the homepage of the project. For an additional tweak, I managed to figure out how to show/hide the tree by clicking on a link. Just add this at the top of the code snippet above (check to make sure the div ids are the same, dtree in the example here):


script type="text/javascript"
//< ![CDATA[
function hideTreeMenu(){
Element.toggle('dtree');
if (Element.visible('dtree')) {
Element.setStyle('content', {marginLeft: "210px"});
} else {
Element.setStyle('content', {marginLeft: "5px"});
};
};
//]]>
/script

a
href="#" onclick="hideTreeMenu();">Show/Hide Tree
/a

The extra adjusting of the Element.setStyle is to just move my content into the space where I had my tree so hiding actually gives more space in the code for the content div. If you do not care about moving the content to reclaim space, you could just do a Element.toggle call. Note that I am a javascript noobie so others might have better ways of doing this.

Also, since I am a javascript and cookies noobie I could not figure out how to set a cookie to save/retrieve the state of the tree when someone actually clicks on a node in the tree. In the current form, when someone clicks on any node in the tree, it updates the content div and then curls up and shows a fully collapsed tree than the last state. I do not think I managed to even save/retrieve the Show/Hide state before and after a click on a node. Other than telling me to try cookies, let me know if you can explain how to do it.

Posted in Technology | 3 Comments

Running Free on Rails: Displaying results of find_by_sql queries

When we construct views of query results using ERb in rails, most of the time we know what we are displaying and how to format it. However, there are a few occasions when we run find_by_sql queries. Even rare are the occasions when we let users type free-form SQL queries into an input box and just take the query string as is and run it on the database (MySQL in my case).

The reason I did the free-form queries in our internal site was to let users crunch the data the way they wanted instead of trying to add more and more views as they kept requesting them. However, this presents a problem in the View portion (of the Model-View-Controller).

Since we do not know what columns the user has actually requested in the query, it is not easy to figure out how to write the ERb/HTML view code. Fortunately, the attribute_names method of the model helps here.

So you do this in your controller:

def sqlquery
  if (!querystr.blank?)
    @results = Model.find_by_sql(querystr)
    @total = @results.size()
     if (@total > 0)
       @columns = @results.first.attribute_names
     end
   else
      @total = 0
   end
end

The attribute_names is very useful since it returns exactly the columns that are requested in the SELECT portion of the query (rather than every column in the Model model). Also, when the SELECT uses a AS clause (please refer to the MySQL SQL documentation), the attribute_names contains the string in the AS clause. e.g. If the query has SELECT name AS ‘UserName’ … then attribute_names returns UserName as one of the columns.

However, I still faced one gotcha that I could not figure out either by searching or by reading the rails source. The attribute_names method does not return columns in the order they were specified in the SELECT clause. It can return them sorted alphabetically, but that’s it! Now, users do not like see columns in random order showing up in the results table. I thought of parsing the query but then realized it was futile since the query could contain recursive SQL and table joins etc. The easiest hack that I found is to just try string matching which surprisingly works for all our SQL queries. I do not see a reason why it should not for all cases. So the new code looks like this:

def sqlquery
  if (!querystr.blank?)
    @results = Model.find_by_sql(querystr)
    @total = @results.size()
    if (@total > 0)
        cols = @results.first.attribute_names
        if (querystring.match(/\s*SELECT\s*\*\s*FROM.*/i))
            @columns = cols
        else
            pos = cols.inject({}) { |h, col| h[col] = querystr.index(col); h}
            @columns = cols.sort { |x,y| pos[x] < => pos[y]}
        end
     else
         @total = 0
     end
end

So what does the code do? First, we check if the query was a SELECT * FROM which will not have any column names in the SELECT clause. Then we just rely on the random order of the columns returned by attribute_names. If not, we compute the position of the strings returned by the attribute_names in the original query (in the cols.inject line). They could be simple column names or even the AS clauses. We can now use the position(index) of the substring as a sorting criteria so that the earlier occurring column names in the SELECT clause is earlier in the @columns array. This seems like a hack but it seems to work everytime. If there is a more elegant way, I am all ears…

Now in the view, we can use the @columns array for our view (do not forget to change the code below from table to <table>, td to <td>, etc.):

table
thead
  < % for col in @columns %>
       td < %= col %> /td
   < % end %>
   /tr
/thead
      < % for item in @results %>
        tr
        < % for col in @columns %>
          td < %= item[col] %> /td
        < % end %>
        /tr
      < % end %>
/table
Posted in rails, Technology | 1 Comment

Marc Andreesen refers to the www.softwareinterview.com website

It did not have the slashdot effect but Marc Andreesen linked to the http://www.softwareinterview.com website in his post on recruiting and the traffic jumped a few hundred visitors the next couple of days. I guess the site showed up in some google search he tried (if he uses google).
See the post here: http://blog.pmarca.com/2007/06/how_to_hire_the.html

Posted in Technology | Leave a comment

Ruby on Rails: Confessions of a Closet Coder

I have been dabbling with Ruby on Rails a little more lately. I have hacked around and figured out solutions for issues that stumped me based on posts from others or from experiments. I will try to catalog some of those in my blog so it is useful for others. Pardon me if some of these seem trivial or violate Ruby idioms. I have been learning Ruby as I wrote an internal application in RoR. Recently, I ended up coding and checking in stuff in Verilog, C++, Ruby and Javascript in a single day so I have valid excuses to muck up all of them.

The first one is a hack I figured out to display find_by_sql results that I could not even get answers from rails mailing list. Stay tuned…

Posted in rails, Technology | Leave a comment

Social Bypass: Online Networking

I sometimes feel like I am living in a cave when I keep reading all the magazines and webzines about social networking sites. It is not that I am not online. I have a web presence, developed a website in Ruby on Rails (the current hot thingy) and show in enough Google search pages. But, I seemed to have completely skipped the whole connected on the web generation.

Other than email, the amount of internet connectedness that I do is pretty low. A little bit of rec.music.indian.music (RMIM) in 1996, a little bit of Yahoo chat in 1999, and currently, a little bit of LinkedIn.

I know all the sites that are talked about all the time like here: Slashdot | Friendster\’s Rise and Fall. Not only have I not been active, but I can also count on my fingers the number of times I have been to MySpace and YouTube.

The only time I went to MySpace was when it was linked off this interesting story about a guy who lost his Sidekick and tracked the people who found it but did not return to him. He found they were taking pictures on the phone that were synced to the online site and he tracked down their MySpace profile. I think I did browse around to YouTube for some fun stuff (Darth Vader videos), but it gets pretty boring after about minutes of video.

I do believe in Networking. I once even religiously read the “Dig Your Well Before You Are Thirsty” book and quote from it often. (The frequent one is that the USC Alumni Network is mentioned as the best example of alumni network). I use LinkedIn for my professional and alumni networking and see some useful professional referral traffic flowing around.

Who are all these people who find time to spend time chatting, sending messages, commenting on myspaces and having a “Second Life” ala Linden Labs? Shouldn\’t professionals be working, students be studying and socialites be dancing at the clubs? Are we too busy to live and party live nowadays?

Posted in Technology | 1 Comment

What’s in a Name: What does Saarang mean

Like any new parents (Saarang is past his first birthday so new is a relative concept), we get the standard question: Saarang. Oh such a nice name! What does it mean?

I don’t remember whether it was Srilatha or I who finally decided on the name but at least I must have proposed it since I have multiple memories associated with it. The oldest one is one of my favorite Mukesh songs of all time: Saaranga Teri Yaad Mein from the movie Saaranga. It was from the golden years of Hindi movies. Or maybe THE golden year for film music, 1960. If you see the list of movies and songs from that year (grabbed from an old RMIM posting).

The other area we had looked for names was in the names of raagas and we did not find too many male names (maybe Yaman). Saaranga is actually a carnatic raaga.

Here is the actual song (corrupted at the end) for your listening pleasure:
Mukesh – Saaranga Teri Yaad Mein

Some movies from 1960

1. Music director Ravi had

- Chaudavin Ka Chaand!! (Guru Dutt, Waheeda) with the songs:

`chaudavin kaa chaand ho yaa aaftab ho’ [Rafi]
`mili khaak main mohabbat jala dil ka aashiyaanaa’ [Rafi]
`bedardi mera sainya shabnam toh kabhi shole’ [Asha]
`balam se milan hoga’ [Geeta]
`sharma ke yeh kyon sab parda nashiha tan ko savaraa karte hai’
{qawwali} [Asha, Shamshad Begum]
`dil ki kahaani rang laayi hai’ [Asha]

2. Roshan gave all that he had for his

- Barsaat Ki Raat!! (Bharat Bhushan, Madhubala)

`zindagi bhar nahi bhoolegi woh barsaat ki raat’ [Lata, Rafi]
`na to kaarvaan ki talaash hain na to hamsafar ki talaash hai’
`yeh ishq ishq hai ishq ishq’ {qawwali}
[Rafi, Asha, Manna, Batish, Sudha]
`garjat barsat saawan aayo re.’ [Suman Kalyanpur, Kamal Barot]
`maine shayad tumhen kahin dekhaa hai.’ [Rafi]
`mujhe mil gaya bahana teri deedh ka’ [Lata]
`nigahen naaz ke maro ka haal kya hoga..’ [Asha]
`ji chaahta hain choom loon’ {qawaali} [Asha,Sudha]

3. Naushad had two movies that year, both with Dilip Kumar.

- Kohinoor! (Dilip Kumar, Meena Kumari)

`madhuban mein raadhikaa naachche re’ [Rafi]
`do sitaaron ka zameen par hain milan aaj ki raat’ [Rafi, Lata]
`dil mein bhaji pyar ki shahnayiaan’ [Lata]
`tan rang lo ji’ [Rafi, Lata]
`jaadugar qaatil haazir hain mera dil’ [Asha]
`zara man ki kewadiya khol’ [Rafi]
`chalengey teer jab dil par’ [Rafi Lata]
`yeh kya zindagi hain’ [Lata]

- Mughal-E-Azam!! (Dilip Kumar, Madhubala)

`pyar kiya toh darnaa kya’ [Lata]
`mohe panghat pe nandlaal chheD gayo re’ [Lata] {raag gaara}
`mohabbat ke jhooTi kahaani pe roye’[Lata]{raga darbari kanada}
`bekas pe karam keejiye sarkare madina’ [Lata] {raag kedar}
`khuda nigehban ho tumhara’ [Lata] {raga yaman}
`jab raat hai aisi matwaali’ [Lata] {raga jaijaiwanti}
`teri mehfil mein qismat aazmaakar ham bhi dekhenge’
{qawwali} [Lata, Shamshad]

4. S.D.Burman and Dev Anand had three block-busters that year.

- Bambai Ka Babu (Dev Anand, Suchitra Sen)
`deewaanaa mastaanaa hua dil’ [Asha, Rafi]
`dekhne mein bhola hai’ [Asha]
`saathi na koi manzil’ [Rafi]

- Kaala Bazaar (Dev Anand,Waheeda)
`khoya khoya chaand’ [Rafi]
`apni toh har aah ek toofan hai’ [Rafi]
`rim jhim ke taraane leke aayi barsaat’ [Rafi,Geeta]
`such huve sapne tere’ [Asha]
`jo maiN hoti raaja.’ [Asha]
`na maiN dhan chaahoon, na watan chahoon’ [Geeta Asha]

- Manzil (Dev Anand, Nutan)
`na banao batiyaan haTo kaahe ko jhooTi’ [Manna]
`chupke se mile pyaase pyaase kuch hum kuch tum’[Rafi, Geeta]
`yaad aa gayi woh nashile nigahen’ [Hemant Kumar]
`hum dum se gaye humdum ke liye humdum ki’ [Manna]
`chaand aur main aur tu’ [Manna, Asha]

5. Salil Choudhry had

- Parakh! (Sandhya)
`ooo sajnaa barkhaa bahaar aayi ras ki puhaar layi’ [Lata]

- Usne Kaha Tha (Nanda, Sunil Dutt)
`aha rim jhim ke ye pyaare pyaare geet liye’ [Lata, Talat]
`machalthi aarzoo’ [Talat?]

6. Shankar Jaikisan had two hits

- Dil Apna aur Preet Parai (Meena Kumari, Raj Kumar)
`ajib daastaan hai ye kahan shuru kahan khatam’ [Lata]
`dil apna aur preet parai.’ [Lata]
`andaz mera mastana.’ [Asha]
`mera dil ab tera o sajana’
[some more?]

- Jis Desh Mein Ganga Behti Hai (Raj Kapoor, Padmini)
`aa ab lout chaley.’ [Mukesh,Lata]
`o basanti, pawan paagal’ [Lata]
`honthon pe sacchai rehetee hai’ [Mukesh]
`mera naam raju’ [Mukesh]
`hai aag hamare seene mein’
`begani shadi mein..’ [Lata]

7. Sardar Mallik gave his masterpiece:

- Saaranga!!
`haan deewaanaa hoon main’ [Mukesh]
`saaranga tere yaad mein’ [Rafi/Mukesh]
`chali re chali main toh’ [Asha]

8. Madan Mohan had

- Bahanaa
`ja re badra bairi ja ja ja re’ [Lata]
`teri nigahon mein’ [Asha, Talat]

9. S.N.Tripathi had

- Lal Qilla
`na kisi ki aankh ka noor hoon’ [Rafi]

10. Kalyanji-Anandji

- Dil Bhi Tera Hum Bhi Tere
`mujhko is raat ki ranhaayi mein awaaz na do’ [Mukesh]

Posted in Parenting | 2 Comments

Ruby on Greased Rails: Adventures in Rapid Application Development

Even though I work in a chip company, I believe in tools that work on the web so creating, updating and maintaining data is a collaborative process (and less personal overhead :) ). Having a spouse who works in web tech is of extra help. I was one of the early adopters of the Twiki at my company (Andy was the initiator). One of the earliest tools that was born out of my pain of having to create work plans, track them and collect status info was the Project Planner Plugin for Twiki (which I also released to the public domain).

I have done a few other CGI scripts to interface databases to the web along the way. But, cgi scripting in perl is not my idea of writing software. It keeps getting in the way more often than letting me do what I want to. Of course, I am not a master of the language. People actually commented on the Project Planner plugin that the code was easy to understand since it was perl written in C style!

So I stumbled upon Ruby on Rails accidentally and that led to making the softwareinterview.com website. I really did it like the 15 minute video on the RoR website and it works! We spent more time on the template and CSS for the view. Yeah, and it is true that getting the first few things up is as quick as 15 minutes but you really do need to understand framework, Ruby, ERb and a few other things to be really up and running. Pickaxe and DHH to the rescue. It helps to read and do some development as opposed to getting dazed with just hacking away and getting stuck on how to take it to the next level.

It also led to me adopting Rails for a cgi script I was maintaining at work. It was a small perl cgi script and was moderately well architected (YAML for config files, serializing and deserializing objects, etc.). However, it was getting a pain to maintain and add any features. I did keep finding myself repeating the same code, trying to abstract it away, refactor it, etc.

I re-implemented the whole thing in RoR and it did make development faster. Since I was not a perl-cgi wiz, getting stuck at RoR and perl-cgi was pretty much similar overhead in trying to search for an answer. It was easier in RoR once I found the answer since it was so much more succint in RoR as opposed to perl-cgi. The application though small does use many features:

  • multiple tables
  • foreign keys
  • ActionMailer
  • acts_as_versioned
  • observe_form AJAX for searches

And as you can guess I did run into several itty-bitty problems throughout (especially since I was a Ruby Nooby too). Surprisingly, web search seems to provide many answers since there are many new rails pages and not too much noise. I find that searching for many topics on the web finds more noise than answers.

About that list of small issues:

  • collections in forms
  • AJAX for form vs fields
  • choicebox selection list and selected value

Oh! As a side effect to the whole thing, I love Ruby! A fortune sample reads, “Computers do what you tell them to do, not what you want them to do.” The way I see it, I have always had a language that let me tell the computer what to do – C. It is pretty close to really thinking in terms of a processor chip.

add 1 to i, mov i to memory at location m

I have never really found a language that really lets me write software that I want to do. Ruby seems to come pretty close to writing code the way we write pseudo-code when writing algorithms.

for each of the elements in the array, slice ‘em, dice ‘em and cook ‘em.

Really! That is how I feel writing in Ruby. I am neither a master of languages nor a novice. I have written and graded a few programs in LISP, COBOL, Perl, Prolog, etc. to understand concepts behind computer languages (PCP did teach us the wonderful lambda calculus in undergrad). Perl seems like sed+awk and I haven’t written anything in python but I do not like white spaces dancing around me in my nightmares. I had enough of those with COBOL (spaces and nightmares while sleeping in the undergrad computer lab).

I design processors (albeit writing a lot of software) and not web sites. Even if I do not use RoR a lot, at the least RoR gets credit for my stumbling onto Ruby! When I have a choice, I will be scripting mostly in Ruby.

Posted in rails, Technology | Leave a comment