Logo

Microsoft TechFest '09

about 1 year ago | Erika Santos: Santos on Technology and Life

Social Desktop





Some cool improvements on the Surface. If it ever makes its way into the market...



For more info on TechFest.

Any Harvard MBA fans here? Read this...

about 1 year ago | Rajesh Rathod: Uncommon "Common Sense"!

An interesting MBA bashing article...

MBA: the letters that spell financial ruin at Harvard

The author has done a good job of listing down all bad things about Harvard MBA and MBA in general -as if he has completely nailed the root cause of the current global economic crisis!

Since I am undergoing a business management program, it would not be justified for me to comment on this topic. However, I would be interested in knowing your views on this...

Donate to a cause on your mobile phone

about 1 year ago | Amy Grandov: Technology for Social Innovation

Even in this recessionary environment there are exciting startups pressing forward with new uses for technology. One NYC startup worth a look is Mobile Commons, which provides mobile phone/text messaging applications for non-profits.

There are a variety of creative ways a non-profit can take advantage of mobile devices. One example is to solicit and accept donations via text message. (Mobile Commons works with the Mobile Giving Foundation to help develop the capabilities of mobile donations.)

Another use of mobile devices is to grow their contact list by inviting users at a rally or other public event to text their email address, as was done at the Save Darfur rally in NYC.

An advocacy group can use mobile devices to reach contacts about an upcoming congressional vote. Supporters who reply to a text message can listen to some background about an issue before being forwarded to the congressional switchboard to talk to their representatives.

Mobile Commons uses Ruby on Rails and develops/leverages open source software.

Traits of a great ScrumMaster

about 1 year ago | Suman Thareja: suman thareja

As I watch the First Presidential Address To Congress I can't help but drive parallels in Obama and a great SCRUMMaster. Yes, perhaps a glorified one...:)

He is inspirational, an excellent communicator, puts the responsibility and decision making back on his team (and a large one for that; his cabinet, congress, the country), has the ability to remove impediments, focuses the team to the vision, a solid listener, finds ways to get the best out of this team; a true servant leader.

The Meta-Cloud

about 1 year ago | Lalatendu Das: Interpretations of Technorealism

There is a buzz around Cloud computing these days. Amazon leads the pack and many start-ups are lapping on to the services offered. However the big question remains, are the enterprises tuning in? Answer is 'Not Yet'.

There are still concerns on the data security, cloud availability (more so after the GFail episode). There are question marks on near infinite storage space claim and the need for maintaining redundant sites for fail over. More so, not all enterprises will be willing to put all their data with a single cloud vendor.. So where do we go from here?

In comes the concept of 'Meta-Cloud'. How about having a service which let's enterprises 'pool infrastructure resources from multiple clouds' - giving you near infinite storage space? How about having a portability layer, which can become a neutral cloud management ? How about having an option to move your data from one cloud to another..seamlessly - ensuring that your infrastructure is available always?

Sounds interesting? keep a watch on the following companies as we will hear more from them in near future
- Elastra
- RightScale
Welcome to the fourth dimension of the cloud.

Agile disease or sour grapes?

about 1 year ago | Rajesh Rathod: Uncommon "Common Sense"!

LD shared with me Jonathan Kohl’s blog post – The Agile Disease.

Jonathan’s argues that:

  • the good parts of agile are just common sense
  • agile is a fad-diet, religious-cult-inspired, money-making exercise it is for a group of consultants

To me, it seemed like he has more problems with agile consultants than the principles of agile software development itself. Also, his admission of being “an original signatory to the manifesto” makes me wonder if this is case of "sour grapes".


I must admit that this is not first time I have heard people arguing that agile principles are common sense. But, hey who said it’s a rocket science? And why it has to be complicated to be useful? Common sense really is not very common :-)

I liked Bob Martin’s comments:

  • Do some of us make money from the effort? Of course. I imagine even the author of this screed makes some money from his screeding (whether directly or indirectly). So what? Making money is an honorable activity."
  • "As for Agile being “Common Sense”, gosh _we_ thought so too! It turns out, however, that there are a lot of folks out there who have been taught and trained otherwise, and who need their common sense perception refactored."
  • "Sorry if I sound harsh, but I’m not feeling particularly charitable at the moment..."

What do you think about Agile, common sense and the arguments of Jonathan?

The power of really good software - part II

about 1 year ago | Mark Mintz: Mark Mintz

My exploration of SugarCRM continues. Being impressed with what the application could do we decided to explore if it could meet the requirements of another stakeholder group. This required an even deeper dive into the application and I must say that even after taking this dive, I am still impressed with the application!! First off, let me start with what is really cool about open source. I was able to download this application, get it installed and not only try it out but dig through the code, the web services API and just about every aspect of the application. This makes the decision to proceed with an implementation much less scary because you can get a far deeper understanding of the application than any sales demo could provide. So, what did my digging turn up...well, one of the key requirements was to be able to email into the application and have those emails tracked against the Contacts that were included on the email. After reading the documentation, which is just as good as any vendor product documentation I've ever read (and once again I had access to it without having to spend a nickle), it was clear that the out-of-the-box application did not do what I needed to do. My next step was to search through the plugins and open source add-ons to see what I could find. I did find a Connector that could be integrated into our Lotus Notes client but it was to intrusive for our liking. The next option was to write a script that could read emails from a mailbox and load those emails into SugarCRM. This looked like a good option so I dug deeper. This digging led me to the SugarCRM SOAP API. This is definitely another area where I was impressed. My first thought, however, was to be very scared because I read quite a bit about SOAP and SOAP based web-services and I was expecting quite a challenge. Far from it, while dealing with the SOAP Message response objects took a little figuring out, calling the API via my Ruby script was fairly easy (I'll do another post on the power of Ruby and SOAP, following this one). The API has get_entry/set_entry methods that more or less let you create and search for any record in the application. Getting a hang of these methods basically allowed me to do everything I needed to do....and also made me think of a ton more things I could do if only I had the time! All-in-all I am thoroughly impressed with SugarCRM and more importantly I have changed the way I think about evaluating vendor applications. Having the ability to run an application through it's paces (both technically and functionally) without the need for sales reps, contracts, etc....is definitely a new requirement that I will add to my list of vendor selection criteria in the future. My guess is that this will lead me to many more open source applications!!

Nonprofits Collaborate to Solve Common Tech Problems

about 1 year ago | Amy Grandov: Technology for Social Innovation

On my commute home today, I listened to a great podcast of an interview with NetHope CEO William Brindley, one of Stanford University's Social Innovation Conversations. I'm continually amazed and encouraged by organizations like NetHope that take the best resources and expertise of the private sector to empower the social sector.

Nonprofits share common problems around technology. Donors often evaluate organizations on the percentage of donations that are directly spent on programming (see www.CharityNavigator.com as an example) vs 'overhead'. As a result, many nonprofits underinvest in technology as a percentage of their revenue, and are missing out on the productivity gains that have benefited for-profit companies. Another challenge many organizations face is the need to operate globally in remote areas with limited power and communications infrastructure.

NetHope is a coordinating body that helps their 26 member organizations collaborate and share knowledge around technical challenges. It partners with top tech companies like Cisco, Microsoft, and Intel to implement solutions for common problems. A highlight is a portable, solar powered generator to power laptops and provide internet access for aid workers in disaster relief situations.

Nonprofits seem to face many familiar barriers to collaboration. Organizations that previously saw each other as competitors (for donation revenue) are seeing that they have more to gain by working together.

More on the Marais.

about 1 year ago | Megan Blocker: Queenie Takes Manhattan

Earlier today, S.HOPtalk posted an interview with Little Brown Pen's Nichole Robertson. Nichole and her husband recently picked up stakes and moved from Montclair, New Jersey to rue St. Paul in the Marais, in central Paris.

Loyal readers will remember how much I love the Marais, and can probably guess how jealous I am of Nichole. But, that won't stop me from sharing her great recommendations for your next visit to Paris, including a stop or two in that most excellent neighborhood.

Enjoy!

10 Cloud Computing Predictions

about 1 year ago | Lalatendu Das: Interpretations of Technorealism

follow-up to my last post, here are InformationWeeks top 10 predictions on cloud computing.
http://www.informationweek.com/shared/printableArticle.jhtml;jsessionid=5NF45EUOCF3EUQSNDLPCKH0CJUNN2JVN?articleID=213000074&_requestid=72451
Interesting read!

Chocolate as art, in the frozen north.

about 1 year ago | Megan Blocker: Queenie Takes Manhattan

I spent the weekend back home in my native New England - my friend Ginelle turned 30 on Thursday, and so I headed north to attend her surprise birthday party. On Friday, my (duly surprised) hostess and I visited our alma mater's campus and then headed to downtown Portsmouth, New Hampshire for some lunch and, of course, CANDY!

One very windy, icy walk later, we arrived at Byrne & Carlson, a chocolatier and confectioner with a tiny, jewel-like shop in one of the old brick houses that line Portsmouth's seaside streets. The shop is lined from floor to ceiling with truffles, French lollipops, bars of Belgian, African and French chocolate, and bags of old-fashioned penny candy.

After a leisurely browse through the wares (and after sampling some dark chocolate nonpareils and a paprika-spiked truffle), I bought three pieces of caramallow (homemade marshmallow dipped in caramel and enrobed in dark chocolate), a bar of the French Eighty-Five (dark chocolate with an 85% cacao content), and a bag of the most delicious, fruity Gummi Bears I've ever tasted.

I have yet to break out the French Eighty-Five, but I can tell you that the Gummi Bears were, without doubt, the best I have ever had. They taste like fruit and sugar, and not at all like preservatives or over-processed syrups. The caramallows were fluffy, chewy, and sweet, but tempered by the slight bitterness of the chocolate shell.

Now, I know that most of my readers are not able to make it up to Portsmouth terribly often, so I wanted to let you know that Byrne & Carlson (thankfully) offer their delicious creations for delivery via their website. Go to it, online chocolate shoppers!

Code quality and cyclomatic complexity

about 1 year ago | Amar Phadke: Amar Phadke's weblog

I recently came across this article on code quality and cyclomatic complexity. Found it interesting and so thought of sharing. Do the following phrases sound familiar to you?  They surely sounded familiar to me. Sure, it’s a bit confusing (at first), but look how extensible it is!! It’s confusing to you because you obviously don’t understand patterns.

Is PDP dead?

about 1 year ago | Prasoon Sharma: Enterprise Software Does not Have to Suck

Its that time of the year that most of us don't like... No, not the coldest month... I'm talking about finalizing our yearly goals (PDP... professional development plan).

Although I cannot offer a perfect solution, I'm experimenting with a framework that some have found useful to determine their goals for the year.
Let me explain...

I've blogged about Learn, Practice, Teach and Innovate earlier.

The facets at the top are...

  • Personal: What do you plan to learn, practice, teach, innovate this year? How will you position yourself in 2009 to inch closer to your target profile (separate post coming soon)?

  • Project: Our primary activity/deliverable... bread and butter (Biju blogged about it)

  • Community: Center of Excellence (CoE), Portfolios, Interest groups, Application Development group, IT

  • External: Outside Firm (IT forums, IT industry, consumer internet, open source, etc.). How will you engage externally to improve and contribute back?
The framework is meant to present a holistic view of your impact. An honest self-examination can shed light on patterns like "oops, I didn't give back anything to the community. My contributions are limited to projects only" or "whoa, I don't have any impact on my project. I'm a chicken".

With this framework you can paint both, the as-is and the target picture (impact planned for the year). It can help set your goals and direct your efforts.

Disclaimers
- You don't need to have a plan for every cell in the framework. Don't stretch yourself too thin
- The framework is merely to assist in goal setting. It is not a tool for planning and time frames
-
-

Here's an example (thanks James!)

School to career

about 1 year ago | Karthik: Chain of Thoughts

Pixar University's Randy Nelson explains what schools must do to prepare students for jobs in new media.








If you’re interested in learning more about one of the world’s truly innovative companies, watch this video (it’s only 10 min).

Database storage for Paperclip

about 1 year ago | Pat Shaughnessy: Pat Shaughnessy - Home

Update April 2009:
I just rewrote this to use the same database table as the target model to save the file data, and not a separate database table. The “create_table” migration I describe here below will no longer work; instead you should create one or more columns in the same table as the target model to hold the file data. Please read this update for more details.

Paperclip from Thoughtbot is a fantastic bit of code that allows you to easily upload files to your Rails app and later manage them as just another attribute on your model object. If you’re not familiar with Paperclip you should start by reading Thoughtbot’s Paperclip intro page; Ryan Bates also did a screen cast on Paperclip usage. By default it supports saving the file attachments on the server file system, and also there’s an option for saving the files in Amazon’s S3 service. One reason I decided to use Paperclip in a recent project was that the implementation and usage were both much simpler and cleaner than attachment_fu, the other popular Rails plugin for file upload and management.

One thing that Thoughtbot decided not to implement was the ability to store files in a database table, rather than on the file system. It doesn’t make a lot of sense to do this for most normal web application deployments, since serving files via Apache directly from the file system is obviously much faster and avoids the need to call your Rails stack at all for download requests. However, I work in an Enterprise IT environment that has a lot of experience with Oracle, and finds it easier to manage file attachments with a database table. I also have requirements around file encryption, security, etc.

Since Paperclip doesn’t include a database storage option, I decided to write one. Here’s what I came up with: http://github.com/patshaughnessy/paperclip

I added a new storage module called Paperclip::Storage::Database. See lib/paperclip/storage.rb for details; Paperclip::Storage::Database is at the bottom of the file. I’d love any feedback or suggestions about the usage/design of how the database storage option would work with your application, or on the implementation itself.

I’ll be blogging here in the coming weeks with a detailed explanation of how Paperclip database storage works, and a working sample application that illustrates how to use it.

For now, here’s the usage description from lib/paperclip/storage.rb for specifying database storage for your Paperclip app. You need to follow these steps in addition to the standard Paperclip setup steps from Thoughtbot.

  1. In your model specify the "database" storage option; for example:
      has_attached_file :avatar, :storage => :database
    The files will be stored in a new database table named with the plural attachment name by default, "avatars" in this example.
  2. You need to create this new storage table with at least these columns:
    - file_contents
    - style
    - the primary key for the parent model (e.g. user_id)

    Note the "binary" migration will not work for the LONGBLOG type in MySQL for the file_contents column. You may need to craft a SQL statement for your migration, depending on which database server you are using. Here's an example migration for MySQL:

    create_table :avatars do |t|
      t.string :style
      t.integer :user_id
      t.timestamps
    end
    execute 'ALTER TABLE avatars ADD COLUMN file_contents LONGBLOB'
    You can optionally specify any storage table name you want as follows:
      has_attached_file :avatar, :storage => :database,
                        :database_table => 'avatar_files'
  3. By default, URLs will be set to this pattern:
      /:relative_root/:class/:attachment/:id?style=:style
    Example:
      /app-root-url/users/avatars/23?style=original
    The idea here is that to retrieve a file from the database storage, you will need some controller's code to be executed. Once you pick a controller to use for downloading, you can add this line to generate the download action for the default URL/action (the plural attachment name), "avatars" in this example:

      downloads_files_for :user, :avatar
    Or you can write a download method manually if there are security, logging or other requirements. If you prefer a different URL for downloading files you can specify that in the model; e.g.:
      has_attached_file :avatar, :storage => :database,
                        :url => '/users/show_avatar/:id/:style'
  4. Add a route for the download to the controller which will handle downloads, if necessary. The default URL (/:relative_root/:class/:attachment/:id?style=:style) will be matched by the default route:
    map.connect ':controller/:action/:id'

Database storage for Paperclip

about 1 year ago | Pat Shaughnessy: Pat Shaughnessy - Home

Update April 2009:
I just rewrote this to use the same database table as the target model to save the file data, and not a separate database table. The “create_table” migration I describe here below will no longer work; instead you should create one or more columns in the same table as the target model to hold the file data. Please read this update for more details.

Paperclip from Thoughtbot is a fantastic bit of code that allows you to easily upload files to your Rails app and later manage them as just another attribute on your model object. If you’re not familiar with Paperclip you should start by reading Thoughtbot’s Paperclip intro page; Ryan Bates also did a screen cast on Paperclip usage. By default it supports saving the file attachments on the server file system, and also there’s an option for saving the files in Amazon’s S3 service. One reason I decided to use Paperclip in a recent project was that the implementation and usage were both much simpler and cleaner than attachment_fu, the other popular Rails plugin for file upload and management.

One thing that Thoughtbot decided not to implement was the ability to store files in a database table, rather than on the file system. It doesn’t make a lot of sense to do this for most normal web application deployments, since serving files via Apache directly from the file system is obviously much faster and avoids the need to call your Rails stack at all for download requests. However, I work in an Enterprise IT environment that has a lot of experience with Oracle, and finds it easier to manage file attachments with a database table. I also have requirements around file encryption, security, etc.

Since Paperclip doesn’t include a database storage option, I decided to write one. Here’s what I came up with: http://github.com/patshaughnessy/paperclip

I added a new storage module called Paperclip::Storage::Database. See lib/paperclip/storage.rb for details; Paperclip::Storage::Database is at the bottom of the file. I’d love any feedback or suggestions about the usage/design of how the database storage option would work with your application, or on the implementation itself.

I’ll be blogging here in the coming weeks with a detailed explanation of how Paperclip database storage works, and a working sample application that illustrates how to use it.

For now, here’s the usage description from lib/paperclip/storage.rb for specifying database storage for your Paperclip app. You need to follow these steps in addition to the standard Paperclip setup steps from Thoughtbot.

  1. In your model specify the "database" storage option; for example:
      has_attached_file :avatar, :storage => :database
    The files will be stored in a new database table named with the plural attachment name by default, "avatars" in this example.
  2. You need to create this new storage table with at least these columns:
    - file_contents
    - style
    - the primary key for the parent model (e.g. user_id)

    Note the "binary" migration will not work for the LONGBLOG type in MySQL for the file_contents column. You may need to craft a SQL statement for your migration, depending on which database server you are using. Here's an example migration for MySQL:

    create_table :avatars do |t|
      t.string :style
      t.integer :user_id
      t.timestamps
    end
    execute 'ALTER TABLE avatars ADD COLUMN file_contents LONGBLOB'
    You can optionally specify any storage table name you want as follows:
      has_attached_file :avatar, :storage => :database,
                        :database_table => 'avatar_files'
  3. By default, URLs will be set to this pattern:
      /:relative_root/:class/:attachment/:id?style=:style
    Example:
      /app-root-url/users/avatars/23?style=original
    The idea here is that to retrieve a file from the database storage, you will need some controller's code to be executed. Once you pick a controller to use for downloading, you can add this line to generate the download action for the default URL/action (the plural attachment name), "avatars" in this example:

      downloads_files_for :user, :avatar
    Or you can write a download method manually if there are security, logging or other requirements. If you prefer a different URL for downloading files you can specify that in the model; e.g.:
      has_attached_file :avatar, :storage => :database,
                        :url => '/users/show_avatar/:id/:style'
  4. Add a route for the download to the controller which will handle downloads, if necessary. The default URL (/:relative_root/:class/:attachment/:id?style=:style) will be matched by the default route:
    map.connect ':controller/:action/:id'

Collaborative, Open Source Design comes to Museums

about 1 year ago | Amy Grandov: Technology for Social Innovation

The Tech Museum of Innovation in San Jose is using technology to enable designers - and the general public - to collaborate on museum exhibits. This could be a real 'game changer' for museums in a similar way that Wikipedia changed the concept of the encyclopedia and open source changed software development.

In the "Tech Virtual" online forum, anyone can propose an exhibit and work with experts and designers from around the world to help shape it. This includes refining the concept, generating content, building prototypes, etc. All ideas and materials are 'open source'. The Tech will implement the best ideas, and other museums around the world may notice and pick up on exhibits, as well. Its a new source of content for museums, and an opportunity for the general public to influence what is on display.

The Tech also invites engineers, educators, etc. to design a "Tech Challenge" for middle and high school students, which can be offered at the Tech or other local science museums. Successful challenges require student teams to work as a team to find innovative solutions to real world problems (think of the classic "drop an egg off a building without breaking it"). The deadline for 2009 online submissions just ended on Feb.16.

Wikipedia proved that an open technology platform has the power to tap into more far flung and specialized expertise than any one company could ever bring together. Tech Museum is providing a simliar advantage for museums. Open source collaboration has been a powerful driver of innovation in software development, and it could help museums keep up with the modern pace of change on limited budgets.

The 'Azure' Cloud

about 1 year ago | Lalatendu Das: Interpretations of Technorealism

Yet another cloud over the horizon...


Microsoft has launched it's very own cloud computing platform named Azure. Services being offered by Azure looks promising ..at least to developers at this point. Only time will tell how 'Azure' fares against it's established rivals such as .. 'Amazon Web Services', 'Google App Engine' and 'VMware vCloud'.

For starters, here is a comparison of the services being offered by the above mentioned players in the space of cloud computing. 

Any bets on who would win the race??

Universal Cell Phone Chargers by 2012

about 1 year ago | Erika Santos: Santos on Technology and Life


The GSMA (Groupe Speciale Mobile Association), which represents more than 750 of the world's cell phone operators, announced today that it has closed at a deal with the world's leading handset makers, to come up with a universal phone charger using Micro-USB technology. GSMA promises that by 2012 most cell phones will use the same kind of connector to charge their batteries.



The GSMA hopes the initiative will slash the greenhouse gases that result from the manufacture and transport of chargers by 13.6 and 21.8 million tonnes each year. In addition, GSMA CEO, Rob Conway, said that the GSMA will push cell phone manufacturers to develop chargers that consume about 50 percent less power.

According to GSMA, companies which have signed up to the plan include 3 Group, AT&T, KTF, LG, mobilkom austria, Motorola, Nokia, Orange, Qualcomm, Samsung, Sony Ericsson, Telecom Italia, Telefónica, Telenor, Telstra, T-Mobile and Vodafone.

----------------------------
1) This charger would eliminate a chronic user frustration and help the environment; great! But what took them so long?
2) Apple is not on the list. From a user perspective (although I'm not trying to speak on behalf of my fellow iPhone geeks), that does not disappoint me. Everywehere I go, I seem to have easy access to a computer and someone's iPod cable, which = cell phone charger. 

Thanks to cnn.com and cnet.com

A case study in innovation and risk taking

about 1 year ago | Amy Grandov: Technology for Social Innovation

Obviously, techies are enjoying the novelty and potential of a tech saavy president. Queue magazine (ACM) published an interesting article about Obama's innovative and unique use of technology in his campaign. The author Benjamin Boer, a technical consultant to the campaign, makes a fascinating point - Obama's initial underdog status and uncertainty of funds allowed a culture of inventiveness and a willingness to experiment and distribute authority that may not otherwise have been possible. Modern technology, including social networking, open source software, and software as a service, had evolved to enable local innovation and adaptability. Its an interesting case study of how organizational culture and technology work together to support innovation.

It also makes me wonder if the current economic uncertainty might have a silver lining of encouraging risk taking and new ways of working.

When inspiration strikes.

about 1 year ago | Megan Blocker: Queenie Takes Manhattan

A few weeks ago, I spied this post on the (always entertaining) blog Internet Food Association. The idea of bourbon combined with caramel, buttercream and cake was pretty much irresistible to this boozehound. I decided to try my hand at my own version. They turned out pretty darn good - not too big, not too sweet, and just rich enough.

For the cupcakes, I used Nigella Lawson's phenomenally simple fairy cakes recipe. If there's an easier recipe in existence for making cupcakes from scratch, I've yet to find it. One batch of the recipe yields twelve small cupcakes, and nine medium-sized ones. (Skip the Royal Icing, obviously, unless you're skipping the buttercream!)

The buttercream was Gourmet's brown sugar buttercream - I first made this frosting as part of their legendarily (at least in my circle of friends) delicious blackberry brown sugar cake. It takes time (you'll be dropping butter into your mixer for about 15 or 20 minutes), but it's not difficult. The frosting keeps well in the fridge for up to a week, and is good for two batches of the fairy cakes.

The one piece of special equipment you need is a candy/deep-frying thermometer. The buttercream starts with a base of whipped egg whites, into which you stream piping hot sugar syrup. If the syrup isn't at the right temperature (about 248 degrees Fahrenheit), the frosting will be either grainy or soupy.

Finally, look up any recipe for caramel sauce (mine was an improvised version that used milk instead of cream), and stir a tablespoon of bourbon in at the end.

To assemble, let the fairy cakes cool completely, then frost generously with the buttercream. Drizzle with as much caramel as you like (you may want to place the cakes on parchment paper or aluminum foil while you do this, for the sake of your countertops), and eat. Cakes will keep - stored in an airtight container, at room temperature - for a few days.

Kitchen Lust: Le Parfait storage jars.

about 1 year ago | Megan Blocker: Queenie Takes Manhattan

When in doubt, go French. This applies to pretty much everything in life: food, wine, travel, stockings, kissing, and, of course, kitchen storage.

A few weeks ago, I tired of shoving my coffee beans into Ziploc bags and nestling them into the tiny bits of spare room available in my kitchen cabinets. I had some free real estate on my counter (thanks to my mother's donation of an antique secretary for my living room, in which I have stashed, among other things, my mug o' writing utensils), so I decided to monopolize it with two Le Parfait storage jars.

Why two? Well, one for my espresso beans, and one for my regular coffee. The jars are gorgeous - well-propotioned, sturdy, stackable. Just looking at them makes me smile, and the ergonomically friendly latch ain't nothin' to sneeze at, either.

You can find Le Parfait jars on the Fante's Cookware website. Just click here and scroll down till you find the "Le Parfait Canning Jars."

The first Internet President - a good thing?

about 1 year ago | Amy Grandov: Technology for Social Innovation

When Americans go to the polls, we cast our votes privately. This right to privacy is stringently, even passionately, protected as fundamental to our democracy. Technology has clearly made it much easier to ordinary people to become politically involved (see the impact of MoveOn.org as just one example). At the same time, though, even small political gestures, like a $20 donation or a e-signature on a petition, become a public act that can be referenced for years to come. I can't help wondering if all this web-based politics, for all its benefits, is undermining our right to privacy.

Barak Obama's embrace of the internet was profiled in the February issue of Communications magazine from the Association of Computing Machinery (ACM). The article was enthusiastic about Obama's ability to move beyond brochure-ware websites and connect with everyday people through email, YouTube, and social networking sites like Facebook and Twitter. By raising an unprecedented amount of money directly from small donors (assisted by online donations and email campaigns), he is supposedly less firmly in the pockets of lobbyists, big money and special interests than previous modern presidents. The article states that Obama has amassed a database of 13-million people through these channels, or 10% of the electorate. He can now reach out to them directly without depending on a 'one size fits all' national media, and get input directly from citizens rather than polsters.

It is undoubtably a good thing to have an active, engaged, empowered electorate that can communicate directly with politicians, and technology is key to enabling that. But there are few protections or rights for people who participate online. You may sign up for a mailing list just to get more information about a candidate, but once you're in a central database, you don't have the right to take back your personal information or have any control over how its used or shared. Attending a rally in person is fairly annonymous. But once you're Barak Obama's friend on MySpace, does it matter that your vote is private?

I get occassional emails from a handful of trusted organizations about issues that are up for a vote locally or nationally. With a few clicks, I can send off a customized email to my elected representatives based on my zip code, and get letters back from politicians explaining their position. Quick and easy. But unlike a phone call to a politician's office, these emails can be easily filed, searched, and shared electronically. It definitely gives me pause, and makes me wonder about the purpose of the physical curtain on the polling booth that I disappear behind when I cast my vote.

A Quick Read

about 1 year ago | Suman Thareja: suman thareja

I had heard a lot about One night at the call center. Contrary to the title, its little about how a call center works. It also turned out to be more of a short story than a novel. A bit like a cliche Hindi movie in the form of a book (guy gets girl, drama all along to get there minus the 12 songs to fill the three hours). Not intellectually stimulating if that's what you are looking for, though if you are curious about the younger working generation in India you get some of that.

Having some friends working at call centers; the attitude, behavior, working environment isn't too far off.

I am often taken back by 'western' influences on the Indian youth. I fully support the growth, the job opportunities, the independence though disappointed in the ability of people to pick the best of both worlds. However, the drugs, the drinking, the adultery continue to surprise me. Or perhaps it always existed just more obvious now.

Have you read it?

Have you tried Google Analytics? Its awesome!

about 1 year ago | Biju Bhaskar: Thoughts on enterprise application development...

Even though I have heard about Google Analytics long time back, I have never tried it. Last month at the workshop I attended in San Fransisco, we used it... to learn more about where our visitors came from and how they interacted with our sites. It is very powerful and awesome! I wonder why we are not using it for our apps.

If you want to know more about Google Analytics, please go to these links
http://www.google.com/analytics/
http://en.wikipedia.org/wiki/Google_Analytics

Currently, we spend a lot of money on other products to do web analytics for us. I think it is worth trying Google analytics, as it would be very useful in user centered design & development, as well as to track usage especially for our external facing websites without much overhead. (Of course if Security Team approves it). Above all, it is totally free. I heard that lot of web analytics companies have shutdown after Google offered this for free.

One of the most interesting features I liked in their product is called "site overlay". The Site Overlay feature enables tracking of individual clicks on hyperlink URLs found on pages of a website. The report actually lays a “click map” over the pages of the site and allows us to track the exact links users click on throughout the pages of the website. This can be very beneficial in determining what links are being used and which links are completely overlooked by our users. Knowing what links are being used can help us determine if the keyword or feature we use in the link makes sense, the location of the link makes sense, or both work together or not. All of this can help us organize our page to better speak to our users and give them what they are looking for, where they are looking for it!

Have you tried it?

For those of you who are interested (and work with me at NYC), I am planning to arrange an informal lunch & learn so that I can demonstrate some of its capabilities to you. Look out for an invite soon....

Have you tried Google Analytics? Its awesome!

about 1 year ago | Biju Bhaskar: Thoughts on enterprise application development...

Even though I have heard about Google Analytics long time back, I have never tried it. Last month at the workshop I attended in San Fransisco, we used it... to learn more about where our visitors came from and how they interacted with our sites. It is very powerful and awesome! I wonder why we are not using it for our apps.

If you want to know more about Google Analytics, please go to these links
http://www.google.com/analytics/
http://en.wikipedia.org/wiki/Google_Analytics

Currently, we spend a lot of money on other products to do web analytics for us. I think it is worth trying Google analytics, as it would be very useful in user centered design & development, as well as to track usage especially for our external facing websites without much overhead. (Of course if Security Team approves it). Above all, it is totally free. I heard that lot of web analytics companies have shutdown after Google offered this for free.

One of the most interesting features I liked in their product is called "site overlay". The Site Overlay feature enables tracking of individual clicks on hyperlink URLs found on pages of a website. The report actually lays a “click map” over the pages of the site and allows us to track the exact links users click on throughout the pages of the website. This can be very beneficial in determining what links are being used and which links are completely overlooked by our users. Knowing what links are being used can help us determine if the keyword or feature we use in the link makes sense, the location of the link makes sense, or both work together or not. All of this can help us organize our page to better speak to our users and give them what they are looking for, where they are looking for it!

Have you tried it?

For those of you who are interested (and work with me at NYC), I am planning to arrange an informal lunch & learn so that I can demonstrate some of its capabilities to you. Look out for an invite soon....

Architecture CoE goals for 2009

about 1 year ago | Prasoon Sharma: Enterprise Software Does not Have to Suck

1) Bootstrapping testing of legacy applications

2) Simplify People Systems applications

3) Learning




1) Bootstrapping testing of legacy applications
- All legacy Java applications will be enabled for one-click build, test and deployment
- Development teams working on these applications will increase app test coverage

2) Simplify People Systems applications
- Significantly decrease support costs and cost of change

3) Learning
- We will publish a training schedule with topics that our internal experts will discuss. Anyone within IT is welcome to attend
- This in turn gives us the opportunity to learn, teach, give back to the community and is a creative way to train ourselves given the economic situation

Architecture CoE SWOT analysis by Neal Ford

about 1 year ago | Prasoon Sharma: Enterprise Software Does not Have to Suck

Neal shared his SWOT analysis of Architecture CoE with us last month.

Neal saw no major holes in architecture skill set. He rated architects as Proficient and Expert (top 2 using the Dreyfus scale).


STRENGTHS
- Introspection: Willingness to get external input. Constantly looking at what we are doing and trying to get better. Focus on application architecture (presence of CoE)
- Participation: We have a very engaged Arch CoE population. Most initiatives (in other companies) start out strong but die quickly. Ours has high participation and continues to do so (rotating responsibilities and ownership helps with sustained participation and enthusiasm)
- Will To Change: Not stuck in ways of the past, looking to learn and grow
- Awareness: of legacy code issues
- Design choices: Buy, build, open source


WEAKNESSES
- Lots of sub par legacy products / solutions in the environment. Affecting our support costs and slowing the evolution (end result is high support costs and high cost of change)
- Very high inertia in applications. We have the willingness to change but does not see it happening as quickly as it could
- Large monolithic applications, should move towards smaller composable solutions
- Lack of overall support cost transparency: e.g. infrastructure costs might decrease with a certain design choice but associated support costs might be higher
- Less focus on (1) enterprise architecture (we have application architects (~ building planners) and solution architects (how apps talk to each otehr) but not many enterprise level architects (~ city planners))


OPPORTUNITIES
- Chance to re-architect some applications at enterprise level
- Using budget constraint as a mechanism to drive creativity/innovation and improve efficient of development
- Upgrade contractor staff: Talented engineering pool can be tapped into


THREATS
- Economy / Budget Constraints
- Predatory vendors - watch out for large vendor products that promise to do everything


SUGGESTIONS FOR 2009 GOALS
- Shore up weaknesses
- Build consistencies across projects (similar to rails). For example identify a consistent directory structure / package layout / etc for Java projects.
- Take advantage of automation using these consistencies
- Prioritize any items that give us a strategic advantage

Back from a long vacation

about 1 year ago | Prasoon Sharma: Enterprise Software Does not Have to Suck

I was out on vacation in the month of January and I'm back in action now. Stay tuned...

jQuery - Truely "write less, do more"

about 1 year ago | Rohan Daxini: Rohan Daxini

Few days back I started learning jQuery to create few drag n drop elements (widgets) for my news aggregator. First and quick impression about jQuery - truely a write less, do more javascript library. Doesnt take more than couple of hours to learn and start writting / integrating with new /existing apps for creating intuitive and quick UI along with necessary functionalities.
I hope I can publish my advanced aggregator soon which is in progress using AJAX, jQuery in ASP.Net.

Making Its Mark : The ODC Testing Community

about 1 year ago | Nidhi Pancholi: I Am Here.............

The International Software Testing Qualification Board (ISTQB) Certification modules are today one of the leading benchmarks for the Software Testers. It is really heartening to find 5 out of 15 people in the ODC Testing Community are ISTQB certified .
This not only proves the mettle of the testing team present here but also proves the commitment of the entire team, pushed by their supervisors and mentors to move to the next level. From the clients' perspective, these certifications further strengthen their confidence in the current team as they prove that the current team is well equipped and are up-to-date with the latest trends in the testing world.
Looking forward for more people to be ISTQB certified …… :)

Unobtrusive Javascript -> a new paradigm in Javascript Programming Language

about 1 year ago | Amit Kumar: RubyizednRailified

Current buzzword in the world of Javascript is unobtrusiveness. People who use it frequently make their website accessible, or they want to develop their project using Progressive Enhancement. Lets start by understading each term to make sense by being unobtrusive.

Accessibility in javascript means that as many people as possible will have access to the content or functionality of the page even if the Javascript implementation in their browsing device is lacking or nonexistent.

Progressive Enhacement, is a methodology for building web pages using graceful degradation model - the intent of making advanced content fail without breaking the rest of the website for less sophisticated browsers. In simple terms being unobtrusive is to segregate behavior from structure and presentation in a HTML document.



Following unobtrusiveness pattern the code stays clean, easier to read, and more maintainable.

You people might be thinking what sense or non-sense I am talking about. Lets try and understand it with the simplest example. Lets say we have to create an anchor tag, onclick of which a javascript will be fired to add an item. We are used to writing code like this:

  • <a href="javascript:addItem();" mce_href="javascript:addItem();">Hit Me!</a> ----> WORST
If javascript is disabled nothing will happen.
  • <a href="#" onclick="addItem();">Hit Me!</a> ---> JUST as bad
Using inline event handlers is not inherently inaccessible but the href attribute doesn’t lead anywhere so the end result is the same as in the first example.
  • <a href="/add_item" onclick="addItem();">Hit Me!</a> --> BETTER
Now we have a real target for the anchor, so the link is already fully accessible assuming that the add_item URL provides the same functionality as the addItem Javascript function does. However, the code is still a mixture of behavior (javascript code) and structure (the HTML).

  • <a href="/add_item" id="item_link">Hit Me!</a> + $(‘item_link’).click(function() { addItem();}); (when using Prototype) $('#item_link').click(function() {addItem()}); (when using jQuery) --> BEST

Now the HTML file takes care of the structure (just as it should), and the behavioral logic is separated into a separate Javascript file. This is both accessible and unobtrusive.

Welcome to the world of jQuery one of the most unobtrusive style of Javascript library. One would argue even Prototype is the same. But having used both I can figure out the difference. To list a few:
  • jQuery has no IE memory leaks
  • jQuery supports almost all browser I can call name of (many of the features of prototpe does not work in IE eg: inline-editing)
  • Method chaining - all native jQuery method support chaining i.e. they return self. eg: $("div.fadeMeAndThenRemove").fadeOut().addClass("removed");

jQuery is being widely used -> Google, mozilla.org, wordpress.org, DELL, digg, NBC, drupal etc... are few names who have moved to using jQuery.

Enjoy being unobtrusive !!

Time well spent

about 1 year ago | Suman Thareja: suman thareja

Recently finished reading 'A Thousand Splendid Suns' and absolutely feel in love with the book and the author. Not only was a page turner and forced me to give up all things social for every evening until I finished it, it was an emotional roller coaster which I feel like I am still on even days after having read the last page. The patience, the endurance, the inhumane torture, the crazy cultural norms...all felt so far away and unreal until I read the piece about 9/11 which is still so current, so real, so close, having moved to NY a few short days before the incident..very moving and humbling.

Did you have the chance to be part of Miriam and Laila's life story? If not, I highly recommend it. Another good read is Kite Runner also by Khaled Hosseini.

The Performance Evaluation Pryramid for '09

about 1 year ago | Biju Bhaskar: Thoughts on enterprise application development...

Last year we evaluated all the folks in our group based on their performance in three areas. I call it the "Performance Evaluation Pyramid". I encourage all of you to think about this framework while coming up with your goals and measures for this year...


At the bottom of the pyramid is "project work", our bread and butter. Basically, how well you and your teams did your projects. Last year we did most of our projects well, and so this year the expectation is that we will be doing better. By the way, all are expected to do well in this area.

Above that is "personal growth". We would like each of you to personally grow in an area(s) you think are important for you. By the end of the year, you will have to demonstrate that you have grown in the area(s) you have chosen. This should be ideally be a stretch goal for most of you.

On the top of the pyramid is "your contribution back to the community". Here we will look at how you have given back to the community, to make others successful. The community could be internal (like CoEs, your project teams etc.) or external professional groups you are part of. I think this year there will be extra credit given to people who have ventured outside the firm and tried to learn from them, and/or have tried to teach them what we know.

My guess is that by doing all of the above by end of the year will give you a ME (Meets Expectation) rating. For ME+, someone will have to knock at least couple of the above areas out of the park. For getting a EE (Exceeds Expectations) rating you really have to be outstanding in all these areas.

I know the bar is very high. But, how many firms in the industry are asking their folks to make their personal growth to be one of the mandatory goals for this year. My guess is... very very few....especially in this economy...

The good thing is that you will have professionally grown here more... than anywhere else...

Thoughts?

The Performance Evaluation Pryramid for '09

about 1 year ago | Biju Bhaskar: Thoughts on enterprise application development...

Last year we evaluated all the folks in our group based on their performance in three areas. I call it the "Performance Evaluation Pyramid". I encourage all of you to think about this framework while coming up with your goals and measures for this year...


At the bottom of the pyramid is "project work", our bread and butter. Basically, how well you and your teams did your projects. Last year we did most of our projects well, and so this year the expectation is that we will be doing better. By the way, all are expected to do well in this area.

Above that is "personal growth". We would like each of you to personally grow in an area(s) you think are important for you. By the end of the year, you will have to demonstrate that you have grown in the area(s) you have chosen. This should be ideally be a stretch goal for most of you.

On the top of the pyramid is "your contribution back to the community". Here we will look at how you have given back to the community, to make others successful. The community could be internal (like CoEs, your project teams etc.) or external professional groups you are part of. I think this year there will be extra credit given to people who have ventured outside the firm and tried to learn from them, and/or have tried to teach them what we know.

My guess is that by doing all of the above by end of the year will give you a ME (Meets Expectation) rating. For ME+, someone will have to knock at least couple of the above areas out of the park. For getting a EE (Exceeds Expectations) rating you really have to be outstanding in all these areas.

I know the bar is very high. But, how many firms in the industry are asking their folks to make their personal growth to be one of the mandatory goals for this year. My guess is... very very few....especially in this economy...

The good thing is that you will have professionally grown here more... than anywhere else...

Thoughts?

Investigating how Symbol to_proc works

about 1 year ago | Alex Rothenberg: Common Sense Software

One of the things I love about Ruby is how expressive it is and how with open classes it can be optimized to become even more expressive. Since I started using Ruby I don't think I've written a single for or while loop - something I couldn't have imagined saying with any other language! Of course I do this by using iterators and writing code like


user_names = User.all.collect {|user| user.name}


I recently started discovered I could write the same thing even more concisely (as long as I'm using Rails or Ruby 1.9)


user_names = User.all.collect(&:name)


I decided to investigate how this works.

First I found some good posts by Prag Dave and Ryan Bates and at InfoQ. This helped but I still didn't understand it all so decided to dig further.

First I took a look at how Rails extends Symbol


unless :to_proc.respond_to?(:to_proc)
class Symbol
# Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:
#
# # The same as people.collect { |p| p.name }
# people.collect(&:name)
#
# # The same as people.select { |p| p.manager? }.collect { |p| p.salary }
# people.select(&:manager?).collect(&:salary)
def to_proc
Proc.new { |*args| args.shift.__send__(self, *args) }
end
end
end


So they defined the to_proc method on symbol and that means the new code will be called when we write &:name because it magically gets transformed into :name.to_proc. I learned something but still needed to learn more to understand how it all works.

Why does the & cause Ruby to call to_proc? I knew that & in the last parameter declaration will pass a provided block as a parameter but this seems to be doing the reverse. Calling a method as an argument but having it interpreted as a block. I tried a couple of experiments in irb


def was_block_given?
block_given?
end

# As expected
was_block_given? {}
=> true

# Passing a proc is not the same as having a block
was_block_given? Proc.new{}
ArgumentError: wrong number of arguments (1 for 0)
from (irb):195:in `was_block_given?'
from (irb):195

# Prefixing the proc with an & makes it like a block
was_block_given? &Proc.new{}
=> true


It was not all as I expected but some reading through the PickAxe book led me to a better understanding. I found this paragraph in the Calling A Method section (page 115 in my copy)

If the last argument to a method is preceded by an ampersand, Ruby assumes that it is a Proc object.
It removes it from the parameter list, converts the Proc object into a block, and associates it with the method.


Ok so now I know why when Ruby sees User.all.collect(&:name) it invokes the collect method with name.to_proc as a block. Next, it was time to figure out why the code Rails put in the to_proc method worked. I took a look at the Rubinius implementation Enumerable


def collect
ary = []
if block_given?
each { |o| ary << yield(o) }
else
each { |o| ary << o }
end
ary
end


Again I decided to experiment with irb to see what each part of the to_proc implementation was doing. First I redefined the Symbol to_proc again with a puts so I could confirm what was going on.


class Symbol
# Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:
#
# # The same as people.collect { |p| p.name }
# people.collect(&:name)
#
# # The same as people.select { |p| p.manager? }.collect { |p| p.salary }
# people.select(&:manager?).collect(&:salary)
def to_proc
Proc.new do |*args|
puts "to_proc args: #{args.inspect}"
args_shift = args.shift
puts "to_proc: #{args_shift.inspect}.__send__(#{self.inspect}, *#{args.inspect})"
result = args_shift.__send__(self, *args)
puts "to_proc result: #{result.inspect}"
result
end
end
end

# Make the call and see what happens
[1].collect( &:to_s)
# to_proc args: [1]
# to_proc: 1.__send__(:to_s, *[])
# to_proc result: "1"
# => ["1"]


Its brute force but tells us everything we need to know. As expected collect yields to our proc/block with the element in a variable length argument [1], it extracts the 1 and sends it the to_s method with no arguments returning the string "1". At this point I think I understand how it all works and decide to confirm by running a few more (more complicated) tests in irb


[1, 'hi', :b].collect( &:to_s)
# to_proc args: [1]
# to_proc: 1.__send__(:to_s, *[])
# to_proc result: "1"
# to_proc args: ["hi"]
# to_proc: "hi".__send__(:to_s, *[])
# to_proc result: "hi"
# to_proc args: [:b]
# to_proc: :b.__send__(:to_s, *[])
# to_proc result: "b"
# => ["1", "hi", "b"]

[1,2,3].inject(&:+)
# to_proc args: [1, 2]
# to_proc: 1.__send__(:+, *[2])
# to_proc result: 3
# to_proc args: [3, 3]
# to_proc: 3.__send__(:+, *[3])
# to_proc result: 6
# => 6

1.__send__(:+, *[2])
# => 3

:b.__send__(:to_s, *[])
# => "b"


It all works as expected and I decide I know as much as I need to about this and call it a day.

So why did I bother figuring all this out and then writing it up? Mostly because I didn't know how it worked and thought there was some 'magic' going on. I could have continued using this feature without understanding how it worked but now that I understand how it works if some need ever arises for me to do some similar magic I know how to go about it. As for writing it up I hope someone else may read this and find it useful but by I increased my own understanding through the act of writing.

Investigating how Symbol to_proc works

about 1 year ago | Alex Rothenberg: Common Sense Software

One of the things I love about Ruby is how expressive it is and how with open classes it can be optimized to become even more expressive. Since I started using Ruby I don't think I've written a single for or while loop - something I couldn't have imagined saying with any other language! Of course I do this by using iterators and writing code like


user_names = User.all.collect {|user| user.name}


I recently started discovered I could write the same thing even more concisely (as long as I'm using Rails or Ruby 1.9)


user_names = User.all.collect(&:name)


I decided to investigate how this works.

First I found some good posts by Prag Dave and Ryan Bates and at InfoQ. This helped but I still didn't understand it all so decided to dig further.

First I took a look at how Rails extends Symbol


unless :to_proc.respond_to?(:to_proc)
class Symbol
# Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:
#
# # The same as people.collect { |p| p.name }
# people.collect(&:name)
#
# # The same as people.select { |p| p.manager? }.collect { |p| p.salary }
# people.select(&:manager?).collect(&:salary)
def to_proc
Proc.new { |*args| args.shift.__send__(self, *args) }
end
end
end


So they defined the to_proc method on symbol and that means the new code will be called when we write &:name because it magically gets transformed into :name.to_proc. I learned something but still needed to learn more to understand how it all works.

Why does the & cause Ruby to call to_proc? I knew that & in the last parameter declaration will pass a provided block as a parameter but this seems to be doing the reverse. Calling a method as an argument but having it interpreted as a block. I tried a couple of experiments in irb


def was_block_given?
block_given?
end

# As expected
was_block_given? {}
=> true

# Passing a proc is not the same as having a block
was_block_given? Proc.new{}
ArgumentError: wrong number of arguments (1 for 0)
from (irb):195:in `was_block_given?'
from (irb):195

# Prefixing the proc with an & makes it like a block
was_block_given? &Proc.new{}
=> true


It was not all as I expected but some reading through the PickAxe book led me to a better understanding. I found this paragraph in the Calling A Method section (page 115 in my copy)

If the last argument to a method is preceded by an ampersand, Ruby assumes that it is a Proc object.
It removes it from the parameter list, converts the Proc object into a block, and associates it with the method.


Ok so now I know why when Ruby sees User.all.collect(&:name) it invokes the collect method with name.to_proc as a block. Next, it was time to figure out why the code Rails put in the to_proc method worked. I took a look at the Rubinius implementation Enumerable


def collect
ary = []
if block_given?
each { |o| ary << yield(o) }
else
each { |o| ary << o }
end
ary
end


Again I decided to experiment with irb to see what each part of the to_proc implementation was doing. First I redefined the Symbol to_proc again with a puts so I could confirm what was going on.


class Symbol
# Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:
#
# # The same as people.collect { |p| p.name }
# people.collect(&:name)
#
# # The same as people.select { |p| p.manager? }.collect { |p| p.salary }
# people.select(&:manager?).collect(&:salary)
def to_proc
Proc.new do |*args|
puts "to_proc args: #{args.inspect}"
args_shift = args.shift
puts "to_proc: #{args_shift.inspect}.__send__(#{self.inspect}, *#{args.inspect})"
result = args_shift.__send__(self, *args)
puts "to_proc result: #{result.inspect}"
result
end
end
end

# Make the call and see what happens
[1].collect( &:to_s)
# to_proc args: [1]
# to_proc: 1.__send__(:to_s, *[])
# to_proc result: "1"
# => ["1"]


Its brute force but tells us everything we need to know. As expected collect yields to our proc/block with the element in a variable length argument [1], it extracts the 1 and sends it the to_s method with no arguments returning the string "1". At this point I think I understand how it all works and decide to confirm by running a few more (more complicated) tests in irb


[1, 'hi', :b].collect( &:to_s)
# to_proc args: [1]
# to_proc: 1.__send__(:to_s, *[])
# to_proc result: "1"
# to_proc args: ["hi"]
# to_proc: "hi".__send__(:to_s, *[])
# to_proc result: "hi"
# to_proc args: [:b]
# to_proc: :b.__send__(:to_s, *[])
# to_proc result: "b"
# => ["1", "hi", "b"]

[1,2,3].inject(&:+)
# to_proc args: [1, 2]
# to_proc: 1.__send__(:+, *[2])
# to_proc result: 3
# to_proc args: [3, 3]
# to_proc: 3.__send__(:+, *[3])
# to_proc result: 6
# => 6

1.__send__(:+, *[2])
# => 3

:b.__send__(:to_s, *[])
# => "b"


It all works as expected and I decide I know as much as I need to about this and call it a day.

So why did I bother figuring all this out and then writing it up? Mostly because I didn't know how it worked and thought there was some 'magic' going on. I could have continued using this feature without understanding how it worked but now that I understand how it works if some need ever arises for me to do some similar magic I know how to go about it. As for writing it up I hope someone else may read this and find it useful but by I increased my own understanding through the act of writing.

Verifying Compliance to Coding Standards with Checkstyle

about 1 year ago | Niranjan Sarade: InLoveWithNature

CheckStyle is an open source tool that helps in verifying compliance to a coding standard. The rules of the coding standard can be configured in an XML file. This makes it ideal for projects that want to enforce a coding standard.

CheckStyle increases code comprehension and makes code review less taxing. It is most useful when integrated into a build process or development environment.

http://checkstyle.sourceforge.net/

Detect commonly occurring defects with PMD, Findbugs and Jlint

about 1 year ago | Niranjan Sarade: InLoveWithNature

A compiler may have difficulty in finding some commonly occurring defects such as null assignment, empty catch block, catching the canonical Exception instead of a specific one, etc. Dr. Eric Allen lists many instances of these defects in his book ‘Java Bug Patterns’.

PMD can detect such defects in a given set of Java source file once they are described as ‘patterns’. PMD rules can be written in java.

FindBugs & JLint can detect common defects by reviewing the class files. JLint can detect inconsistencies and synchronization problems.

CPD – a variant of the PMD is used for detecting instances of code that has been copy-pasted. Duplication of code indicates non-existence of single point of control. A bug can propagate to other parts of the code if the base code contains bug in it. CPD thus can denote code that needs to be refactored.

http://pmd.sourceforge.net/
http://findbugs.sourceforge.net/
http://jlint.sourceforge.net/

These tools are very interesting and simple to use.


The 70-20-10 rule

about 1 year ago | Biju Bhaskar: Thoughts on enterprise application development...

I know that most of you are in the process of finalizing your PDP goals (Professional Development Plan) for this year. One of the areas in the plan is competency development. Last year I had asked many of our folks to use the 70-20-10 rule when they came up with the action plan for developing a competency. Some of you had used it and found it very useful. Thought of sharing with others...

So what is the 70-20-10 rule?

Basically, it asks you to structure your action plan in the following format:
70% is practice, practice, practice; Learning and development comes from real-life and on-the-job experiences and problem solving. For example let us say the competency you are planning to develop is to "coach others". You need to really start coaching others wherever and whenever possible. Only by doing it you are going to learn it and master the skill.

20% is feedback; It is good that you are practicing. But, how do you know that you are doing it right and you are improving. That is why getting proper feedback is the next most important thing. In the above example, one needs to have a plan to take feedback from the person whom you are coaching and/or to get feedback from an independent observer regularly.

Only balance 10% is training; Lot of us mistakenly think that training is the best way to learn new things. In this economy, other best ways to leverage this 10% is by reading books, blogs, talking to your PDL etc. about the topic.

I found the above framework very useful for me and the folks I work with. I encourage you to use the same when you are coming up with the action plan for developing a competency...

Any reactions?

The 70-20-10 rule

about 1 year ago | Biju Bhaskar: Thoughts on enterprise application development...

I know that most of you are in the process of finalizing your PDP goals (Professional Development Plan) for this year. One of the areas in the plan is competency development. Last year I had asked many of our folks to use the 70-20-10 rule when they came up with the action plan for developing a competency. Some of you had used it and found it very useful. Thought of sharing with others...

So what is the 70-20-10 rule?

Basically, it asks you to structure your action plan in the following format:
70% is practice, practice, practice; Learning and development comes from real-life and on-the-job experiences and problem solving. For example let us say the competency you are planning to develop is to "coach others". You need to really start coaching others wherever and whenever possible. Only by doing it you are going to learn it and master the skill.

20% is feedback; It is good that you are practicing. But, how do you know that you are doing it right and you are improving. That is why getting proper feedback is the next most important thing. In the above example, one needs to have a plan to take feedback from the person whom you are coaching and/or to get feedback from an independent observer regularly.

Only balance 10% is training; Lot of us mistakenly think that training is the best way to learn new things. In this economy, other best ways to leverage this 10% is by reading books, blogs, talking to your PDL etc. about the topic.

I found the above framework very useful for me and the folks I work with. I encourage you to use the same when you are coming up with the action plan for developing a competency...

Any reactions?

Ambassadors and Boundary Spanners

about 1 year ago | Lalatendu Das: Interpretations of Technorealism

In his last post, renowned Agile guru 'Scott Ambler' introduced two new roles for distributed agile teams e.g. 'Ambassadors' and 'Boundary Spanners'. Here is how he puts it..

Ambassadors are senior technical or business experts who travel between sites to share information between the subteams. Getting the team together at the beginning of the project sets the foundation for communication, but without continual investment in maintaining effective collaboration between teams you run the risk of your subteams deviating from the overall strategy.

Boundary spanners are located on site who focus on enabling communication between subteams as well as within their subteam. There are typically three flavors of boundary spanners—team leaders who take on project management responsibilities on the subteam, product owners who are responsible for representing the business within the subteam, and architecture owners responsible for technical direction on the team. These boundary spanners will work closely with their peers, having regular coordination meetings across all subteams as well as impromptu one-on-one meetings to deal with specific issues.

Does these roles sound familiar? Are we hearing the need for project manager/ coordinator roles in self organizing agile teams?? Does it mean, we need some amount of command and control..even in agile teams???

Seems like Agile methodology is re-inventing itself to infuse best practices of the traditional s/w development methodology.  Distributed development team is a reality these days and it's about time for Agile methodology to do reality check and adapt to the changing needs of IT development......

The Message and the Audience

about 1 year ago | Erika Santos: Santos on Technology and Life

I moved to a new office in my building a couple of months ago. This morning, I decided it was finally time to get rid of the card box that's been staring at me from the corner of my office since I moved.


As I was removing paperwork from the box, I ran into some interesting notes from 'Structuring the Message', a courses I took in my company.  The notes referenced the importance of being very mindful of who is your audience when you prepare a message. Good stuff.

Careerbuilder Builder Super Bowl Commercial
Careerbuilder seems to know the audience it's targeting, but is that audience realistic? Does the company have a target audience significant enough to justify the $3 million investment?
With about 500,000 jobs slashed last month alone in the USA and a very uncertain economic future...who is looking to leave a job today for higher employment satisfaction? 



Target 'A New Day' Commercial
In contrast, when I was watching TV last night, I saw a Target commercial that I think is much more 'on target' for today's economy. Which one of you has not found a way to be a little more prudent with your money? I'd say Target has a more realistic audience, and has done a good job of structuring the message to it with this commercial.



Testing I18N..

about 1 year ago | Riju Kansal: Riju's Thoughts Captured...

I18N Testing Guidelines and Techniques
http://developers.sun.com/solaris/articles/i18n/I18N_Testing.html
Looks like some help for building my testing strategy for I18N. Need to explore..

Maintaining your technical chops is a full time job

about 1 year ago | Alex Rothenberg: Common Sense Software

Great quote from Uncle Bob (near the bottom of the post)

I think that maintaining your technical chops is a full time job. For that reason I have avoided becoming a business wonk. I hire people to do that for me so I can keep my technical skills as sharp as possible and remain relevant to my profession. I don’t believe I can offer technical advice unless I am living that technical advice.

Maintaining your technical chops is a full time job

about 1 year ago | Alex Rothenberg: Common Sense Software

Great quote from Uncle Bob (near the bottom of the post)

I think that maintaining your technical chops is a full time job. For that reason I have avoided becoming a business wonk. I hire people to do that for me so I can keep my technical skills as sharp as possible and remain relevant to my profession. I don’t believe I can offer technical advice unless I am living that technical advice.

Learning to write Unit Tests for GWT..

about 1 year ago | Riju Kansal: Riju's Thoughts Captured...

http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=DevGuideJUnitCreation http://code.google.com/docreader/#p=google-web-toolkit-doc-1-5&s=google-web-toolkit-doc-1-5&t=GettingStartedJUnit

Damn straight.

about 1 year ago | Megan Blocker: Queenie Takes Manhattan

My eagle-eyed friend Andrea alerted me to this most excellent piece on the traditional martini, published yesterday in the Washington Post. Jason Wilson, travel writer and Spirits columnist, stands up for the classic drink, decrying the crappy post-WWII "dry martini" craze.

Like any sane martini drinker, Wilson likes a martini - not a glass of chilled gin or vodka, but a cocktail containing actual measurable amounts of vermouth, and sometimes even bitters. And it should be stirred, not shaken. And it should be made with gin, not vodka.

On that last point, Wilson has this to say: "I hate to break it to you, but there simply is no such thing [as a vodka martini]. The martini certainly is more a broad concept than a specific recipe, but there must be two constants: gin and vermouth. Beyond correctness, vodka and vermouth are just a terrible match. So call that drink whatever you'd like, but please don't call it a martini."

He also calls out the particularly annoying habits people have developed when it comes to ordering a dry martini. "Does any cocktail invite more bloviation than the Very Dry Martini? Yeah, yeah, yeah, I know how you take your martini, Gramps: no vermouth. I should just whisper the word 'vermouth' while I mix it? Never heard that one before!"

As someone who gets really, really annoyed by all of these things and thinks a spade should be called a spade, I loved this piece. It spoke to my misanthropic disdain for those who drink vodka shaken with ice and call it a martini.

I echo Wilson's sentiments: drink whatever you enjoy, but don't try to slap the martini label on it in order to make yourself seem sophisticated. There's no need, really, and all you're doing is making it harder for me to order a real martini without giving the bartender a detailed set of instructions.

Photo courtesy of nicholas.m.carlson on flickr.

Never sacrifice quality for speed!

about 1 year ago | Alex Rothenberg: Common Sense Software

I just read two really good articles by Ron Jeffries and Uncle Bob about why sacrificing quality to go faster is always a bad idea.

This is very relevant to me now as I'm working with a sponsor now who thinks that by pushing harder and 'doing it in parallel' he can get everything he wants by the date he wants avoiding any hard decisions involving tradeoffs between scope and date. I have worked on many teams over the years that could speed up without sacrificing quality by focusing on the right things basically by emphasizing working software over high ceremony (pretty much straight from the Agile Manifesto). However the idea that you can get something out the door quickly without "wasting your time on quality" to me means that the person you're talking to doesn't understand quality. They think quality means those silly engineering things developers spend their time on rather than software that works the way you want and can be reliably enhanced later.

Somehow we as technologists need to do a better job of explaining to our business sponsors that "quality" is not a technical term!

Never sacrifice quality for speed!

about 1 year ago | Alex Rothenberg: Common Sense Software

I just read two really good articles by Ron Jeffries and Uncle Bob about why sacrificing quality to go faster is always a bad idea.

This is very relevant to me now as I'm working with a sponsor now who thinks that by pushing harder and 'doing it in parallel' he can get everything he wants by the date he wants avoiding any hard decisions involving tradeoffs between scope and date. I have worked on many teams over the years that could speed up without sacrificing quality by focusing on the right things basically by emphasizing working software over high ceremony (pretty much straight from the Agile Manifesto). However the idea that you can get something out the door quickly without "wasting your time on quality" to me means that the person you're talking to doesn't understand quality. They think quality means those silly engineering things developers spend their time on rather than software that works the way you want and can be reliably enhanced later.

Somehow we as technologists need to do a better job of explaining to our business sponsors that "quality" is not a technical term!

Heard new acronyms..

about 1 year ago | Riju Kansal: Riju's Thoughts Captured...

BIRT - Business Intelligence and Reporting Tools
http://www.eclipse.org/birt/phoenix/
JBPM - JBoss jBPM
http://www.jboss.com/products/jbpm
SEAM - JBoss Seam
http://www.jboss.com/products/seam

Need to explore more...

From a User's Perspective

about 1 year ago | Erika Santos: Santos on Technology and Life

Cooper uses 'The Drawing Board'- a cool series of narrated slide shows that walks a persona through a scenario- to look at the world from the perspective of users and their goals. This highlights a lot of bad interactions in a user's daily life, which in turn stimulates discussions about how technology can alleviate some of the frustrations caused by these bad interactions.

I'm a big proponent of investing time in knowing users so that we can accurately target their needs. And as such, I strongly recommend that you check out this short video. Besides the fun pictures, this presentation really drives the idea home.


The Drawing Board: Commuter Buddy from Cooper Journal on Vimeo.

Getting started with GWT..

about 1 year ago | Riju Kansal: Riju's Thoughts Captured...

http://extjs-gwt.blogspot.com/
I found this blog very useful to get my first GWT app running in my eclipse workspace.

Social Proprioception

about 1 year ago | Lalatendu Das: Interpretations of Technorealism

WordNet defines Proprioception as " the ability to sense the position, location, orientation and movement of the body and it's parts" - ?????- let's keep this in perspective and talk of something more mundane subject 'microblogging' ...la. 'Twitter'.



Since it's launch in mid 2006, Twitter user base has grown exponentially, surpassing the industry benchmark of 1 million users in first year of operation. Looking at the success of Twitter, Microblogging space is seeing a number of new entrants, with notables such as Plurk , Yammer and Pownce...and some newbies such as "Quix" developed by Web 2.0 lab in Tata consultancy services. Most of the social networking sites (like Facebook and Orkut) have added Microblogging component in their sites (e.g as Status bar on user profile).

For the uninitiated..they always wonder ..what's the buzz all about? What is that anybody can achieve by posting or reading all those seemingly incoherent snippets (Twiiter limits your post to 140 characters) describing what people are doing or have been doing?...

As Clive Thompson puts it in his seminal article on Microblogging "Individually, most Twitter messages are stupefyingly trivial. But the true value of Twitter — and the similarly mundane Dodgeball, a tool for reporting your real-time location to friends — is cumulative."

The beauty of microblogging is to limit each post to a certain number of characters. This encourages people to blurt out what they think..or rather helps capturing the current state of mind without any sanitizing. Individually these messages may not mean much, but collectively over a period of time, these posts can give a better understanding of the state of mind or experiences of the person you are following. When you meet such person next time, knowing his/her state of mind through the postings, will automatically create an emotional map of the person and help you adjust your responses in your personal dealings. Being humans, I guess certain traits are hard-wired in our brain...

Putting thing in context, this helps in creating a Social Proprioception..which will play a bigger role in social networking space in coming times. Now the question is how to leverage this concept in the enterprise? Any thoughts?

Paris, as seen by Design*Sponge.

about 1 year ago | Megan Blocker: Queenie Takes Manhattan

Design*Sponge posted an awesome, incredibly comprehensive guide to Paris today. They don't mention Camille, but nobody's perfect.

My Kind of Diversity

about 1 year ago | Erika Santos: Santos on Technology and Life

I thought it would be interesting to learn how many people ‘like me’ (same gender and ethnicity) are part of the newest entering classes of the top ten EMBA programs in the USA.


Here is what I learned:


Data drawn from BusinessWeek.com's EMBA profiles published on 11/13/08.


Here are the questions I have:

  1. What could these schools be doing better to attract and retain Hispanic women?

  2. Should we imply that because of these low numbers it would be easier for Hispanic women to enter these programs, or are these numbers a reflection of how circumstances make it harder for Hispanic women to thrive in these environments? Or is it neither?

  3. How can I, and you, impact our communities so that today, or 5, 10, 15 years down the line, there are more Hispanic women pursuing such a prestigious degree? Should we care?

According to the 2008 Census, there are 46.7 million Hispanics in the USA, about 15% of the total population. This population is projected to nearly triple from 2008 through 2050.

Good sites for following new developments

about 1 year ago | Amy Grandov: Technology for Social Innovation

There are a lot of great online resources for social innovation and entrepreneurship, but a smaller number focus exclusively on technology in this space. Two that currently have my attention are:

NetSquared.org – A side project of the well established Tech Soup, this group helps nonprofits take advantage of new “social web” technologies. I’m particularly interested in their list of challenges, where people can submit proposals for innovative uses of technology (e.g., mobile phones, mashups) and compete for funds to get their idea going. Sponsors of recent competitions include UC Berkley, USAID, and Vodafone. See: http://www.netsquared.org/challenges

MobileActive.org – This is an online community for activists who are using mobile technology to advance social change. Its an active site with substantial, practical information about mobile technology and how its being used. There’s a 1-day event Mobile Tech 4 Social Change being held at Hunter College in February. There’s also an interesting debate about the value of cheap laptops vs. mobile devices in the developing world. Its interesting to see a debate (even rivalry?) among groups with the same social goals. See: http://mobileactive.org/olpc-versus-mobile-phone-false-dichotomy.

Delivering software as a service (SaaS)

about 1 year ago | Bhargav Gandhi: AGILE SOFTWARE DEVELOPMENT

SaaS has always been very interesting topic for me. I have been learning a lot about this model by browsing various sites over the internet. It all started when I heard of salesforce.com for the first time.


I am a subscriber of The McKinsey Quarterly and recently I came across an article Delivering software as a service. I liked the way authors have analysed this model in the article. Below are some highlights :-
  • Software as a service offers a reduction in total cost of ownership (TCO)
  • Providers can now share one application cost effectively across hundreds of companies—a vast improvement on the old client-server model. 
  • Bandwidth costs continue to drop, making it affordable for companies to purchase the level of connectivity that allows online applications to perform gracefully. 
  • Many customers are eager for the shift, as they’re frustrated by the traditional cycle of buying a software license, paying for a maintenance contract, and then having to go through time-consuming and expensive upgrades.
  • Although software-as-a-service vendors are less profitable than some traditional software vendors today, this gap is primarily caused by a lack of scale. Change in the economics of online delivery is expected as the model gains wider acceptance.
  • Probable trends for migrating various categories of applications to SaaS model have been categorized into what they call three waves.
  • SaaS is a threat to BPO vendors
I feel SaaS is the way to go forward for Enterprise Applications. I hope that the SaaS model would systematically address the reliability and security risks to make CIO and IT managers feel more comfortable with it.

Delivering software as a service (SaaS)

about 1 year ago | Bhargav Gandhi: AGILE SOFTWARE DEVELOPMENT

SaaS has always been very interesting topic for me. I have been learning a lot about this model by browsing various sites over the internet. It all started when I heard of salesforce.com for the first time.

I am a subscriber of The McKinsey Quarterly and recently I came across an article Delivering software as a service. I liked the way authors have analysed this model in the article. Below are some highlights :-
  • Software as a service offers a reduction in total cost of ownership (TCO)
  • Providers can now share one application cost effectively across hundreds of companies - a vast improvement on the old client-server model. 
  • Bandwidth costs continue to drop, making it affordable for companies to purchase the level of connectivity that allows online applications to perform gracefully. 
  • Many customers are eager for the shift, as they’re frustrated by the traditional cycle of buying a software license, paying for a maintenance contract, and then having to go through time-consuming and expensive upgrades.
  • Although software-as-a-service vendors are less profitable than some traditional software vendors today, this gap is primarily caused by a lack of scale. Change in the economics of online delivery is expected as the model gains wider acceptance.
  • Probable trends for migrating various categories of applications to SaaS model have been categorized into what they call three waves.
  • SaaS is a threat to BPO vendors
I feel SaaS is the way to go forward for Enterprise Applications. I hope that the SaaS model would systematically address the reliability and security risks to make CIO and IT managers feel more comfortable with it.