Social Desktop
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...
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.
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.
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.
LD shared with me Jonathan Kohl’s blog post – The Agile Disease.
Jonathan’s argues that:
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:
What do you think about Agile, common sense and the arguments of Jonathan?
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!!
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.
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!
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!
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!
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.
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...
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).
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.
has_attached_file :avatar, :storage => :databaseThe files will be stored in a new database table named with the plural attachment name by default, "avatars" in this example.
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'/:relative_root/:class/:attachment/:id?style=:styleExample:
/app-root-url/users/avatars/23?style=originalThe 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, :avatarOr 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'map.connect ':controller/:action/:id'
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.
has_attached_file :avatar, :storage => :databaseThe files will be stored in a new database table named with the plural attachment name by default, "avatars" in this example.
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'/:relative_root/:class/:attachment/:id?style=:styleExample:
/app-root-url/users/avatars/23?style=originalThe 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, :avatarOr 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'map.connect ':controller/:action/:id'
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.
Yet another cloud over the horizon...

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.
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.
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.
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."
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.
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?
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....
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....
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
I was out on vacation in the month of January and I'm back in action now. Stay tuned...
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.
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 …… :)
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:
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.
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?
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?
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}
user_names = User.all.collect(&:name)
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
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
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.
def collect
ary = []
if block_given?
each { |o| ary << yield(o) }
else
each { |o| ary << o }
end
ary
end
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"]
[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"
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}
user_names = User.all.collect(&:name)
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
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
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.
def collect
ary = []
if block_given?
each { |o| ary << yield(o) }
else
each { |o| ary << o }
end
ary
end
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"]
[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"
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/
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.
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?
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?
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.
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..
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.
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.
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
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.
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!
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!
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...
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.
http://extjs-gwt.blogspot.com/
I found this blog very useful to get my first GWT app running in my eclipse workspace.
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'.
Design*Sponge posted an awesome, incredibly comprehensive guide to Paris today. They don't mention Camille, but nobody's perfect.
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:
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.
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 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.