Happy snowy Saturday, folks! New York is digging out from another big storm this morning, and I'm about to venture out (clad in wellies, natch) to run a zillion and a half errands. Before that, though, it's time for a look at this week's Treasury!
First, a very exciting development in Manhattan's Mexican food scene. Hecho en Dumbo is moving to a new space on the Bowery, just a few short steps from the Bleecker Street stop on the 6 train. Score! I can't wait to try the Berkshire pork tacos with pickled red onion. Don't they look amazing? They open next Friday!
Next, some sad/happy news. The sad part is that, thanks to an incident with a slippery Le Creuset pot full of chicken stew, I am in desperate need of new woven cotton rug for the floor of my kitchen. The happy part is that I get to pick something from Dash & Albert. Their colorful stripes make me happy every time I see them. I'm still not sure which one I'll ultimately choose...any ideas?
Finally, an exciting event is taking place tomorrow! Those crazy kids over at NYC Food Crawls are hosting a pork bun crawl in Manhattan's Chinatown. Sadly, I am otherwise engaged, but I'm keen to recreate the experience on my own one day soon. If you want to meet up with fellow pork bun lovers, head to the intersection of Mulberry and Bayard tomorrow afternoon at 3 PM - and don't forget to report back!
Photo of barbecued pork buns via The Cookbook Chronicles.
Last to last week I got a chance to talk to an Executive General Manager from an Insurance Firm about what Agile means to us. This firm trains people in Agile, through Agile Academy.
I was amazed at how well I could connect with this senior fellow through the Agile Thread. We spoke about the team behavior, the team events, the workshops in our Agile journey. I could see a twinkle in his eyes when I showed him the comparison between Agile with Twenty-Twenty cricket made by one of our teams.
He shared his views on pair programing, skeptics, blurring line between specialized roles of developers and testers. So many common things. Agile helps them not only in software development, but in complex business strategies. This was indeed interesting to know.
We also talked about our experiences of teaching agile to freshers vs experienced. I commented that freshers connect easily with Agile principles, as their minds are not polluted with waterfall, and they bring in more energy. This organization also believes in the power of fresh thoughts. Incidenly they have special programs where they recruit fresh graduates, and get wonderful results out of their work.
It was really a pleasure to know that someone could see our passion towards Agile, and appreciate. I really think its a great start to this year! I look forward to more such interactions, and sharing the same with the world.
I've decided to scrap my old blog of over 5 years and all of it's posts except the very few that get the most traction. I'm hoping the move to posterous and their easy way to post encourages me to write more since it has been about 2 years since my last post.
My daughter is hooked to Sid The Science Kid and Super Why!
She has got me hooked to these shows as well and I love Sid The Science Kid. Its the greatest kid show ever! What a way to learn and get kids interested in science. May be its the geek in me but who doesn't like kid scientists!
What's your favorite kid show?
My daughter is hooked to Sid The Science Kid and Super Why!
She has got me hooked to these shows as well and I love Sid The Science Kid. Its the greatest kid show ever! What a way to learn and get kids interested in science. May be its the geek in me but who doesn't like kid scientists!
What's your favorite kid show?

If you guys want to hear all about my favorite places to shop, eat and drink, head over to Cherrypatter NYC and check out the guest post I wrote! As you all know, I love Cherrypatter, and when Laura (the blog's fabulous editrix) asked me to contribute a post of my own, I was incredibly flattered.
So clickety-click on over to see the post (And the squintiest picture of me in existence! And, yes, my bangs are in an awkward stage. What of it?). And thanks again to Laura for the opportunity to share my faves!

download the brochure or contact kynkynyracing@gmail.com for more details about the rack.
Other companies which deal with Car racks in India
The study found that 65 percent of the largest 100 international companies have active accounts on Twitter, 54 percent have a Facebook fan page, 50 percent have a YouTube channel, and one-third (33 percent) have corporate blogs. Only 20 percent of the major international companies are engaging with stakeholders via all four platforms.
So far, I've been...just ok about keeping up my walk-across-the-park-once-a-week resolution. I've done it a couple of times, but not even close to once a week. This weekend was one of those times, though, so let's take a look!
The walk was a bit labored - I entered the park at 90th Street and 5th Avenue, and had the idea of walking around the reservoir. However. Once I got up to the path (after passing the creepy, funereal urns decorating a memorial to John Mitchel), I discovered a river of slush, ice and mud. The path around the reservoir, you see, is made of dirt and gravel, the better to run on. Snow melts slowly on that surface, and tends to melt and refreeze - apparently for weeks on end.
So things were a bit slow-going, at least until I reached the reservoir's southern tip and broke off to follow a paved path around the Great Lawn.All in all, though, a gorgeous walk on a gorgeous day. Not a cloud in the sky.
On Sunday, I treated myself to an I Love NYC kind of afternoon: early lunch at Café Sabarsky, a visit to the Cooper-Hewitt, a walk across Central Park, and a cappuccino at Joe. Let's begin at the beginning, shall we?
Café Sabarsky is part of Kurt Gutenbrunner's ever-growing empire of Austrian food. His other outposts include Blaue Gans and Wallsé. While Blaue Gans is a rustic, tavern sort of place, and Wallsé is all refined cool, Café Sabarsky is Gutenbrunner's tribute to fin de siècle Viennese café culture. Located in the Neue Galerie, the café's menu features an impressive assortment of Viennese pastry, delicious coffee and a bowl of spaetzle with tarragon.
For me, Café Sabarsky is typically all about two things: the Einspanner (double espresso with whipped cream) and the decor (reproductions of classic Austrian designs in a Gilded Age mansion's paneled parlor). This time, though, I branched out.First up, a double espresso; more specifically, a Grosser Brauner, which is served with a teeny bit of milk on the side. As usual, it was delicious. I seriously wish I could stop here every morning for coffee. Rarely have I found more perfect coffee on this side of the Atlantic.
Once I'd caffeinated, I switched to water and ordered the wiener schnitzel. It arrived a few minutes later, piping hot, topped with lemon and accompanied by potato salad and lingonberries. I have to say, I was a bit underwhelmed by the schnitzel itself. The veal was tender and flavorful, but the breading was completely separated from the meat in most spots. The potato salad was tasty and creamy, and the lingonberries were tart and offered a lovely contrast, but all in all, I think I'll stick to the spaetzle from now on.
For dessert, I skipped the pastry (I do recommend the apfelstreudel, though.) and went for a Viennese hot chocolate. While it was a bit thinner than the Pierre Hermé version I make at home, it was deeply chocolatey and came topped with a generous amount of freshly whipped cream - both qualities I can get behind with little trouble.
After finishing Moby-Dick for last month's book club meeting, I've been engaged in a binge-like round of comfort reading. I re-read Ruth Reichl's superlative second memoir (Comfort Me With Apples) and am deep into a session with Northanger Abbey (which I've read too many times to count). In between, I picked up Lunch In Paris, a memoir by Elizabeth Bard.
The book is, in fact, billed as a "love story with recipes," so I was excited to read it and get inspired. I was a bit disappointed, as the food mentioned - and often described with loving tenderness - rarely matched the recipes presented at the close of each chapter. (The thematic connections were there, to be fair.) That said, some of the recipes that were included seemed interesting, most notably Chapter Three's poulet basquaise.
Basque cooking is perhaps best known for its inclusion of piment d'espelette, a dried pepper that is the region's answer to paprika. It's delicious, sweet and smoky and spicy and complex. I love it, but had never cooked with it before. One order from Kalustyan's later, I was ready to get moving.
Poulet basquaise combines the d'espelette pepper with fresh sweet peppers and copious amounts of onion. Not everyone's cup of tea, surely, but I've rarely heard two words I love more than "onions" and "peppers." The recipe also called for a decent amount of bacon, some canned tomatoes, and had a fabulous sauce to meat ratio (read: high).
However. For an entire chicken, 28 ounces of tomatoes, 8 ounces of bacon, three peppers and four onions, Bard calls for only 2 teaspoons of espelette. Sorry, honey - not gonna cut it for this pepper lover. In fact, the recipe in general seems written for someone who's already a pretty comfortable cook; for example, she asks you to brown the chicken in a skillet, but doesn't offer a suggestion for which fat to use. So, I've taken it upon myself to put her fantastic formula into a format that will hopefully work for you - it's a bit time-consuming, as one-dish meals go, but it's truly delicious, and it fed me for five days.
You can't beat that.
Poulet Basquaise
Adapted from Elizabeth Bard's Lunch in Paris
One whole chicken, cut into six pieces (or six assorted legs & thighs)
3 tbs. piment d'espelette*, divided
Kosher salt
2 tbs. neutral oil, such as canola
3 slices bacon, cut crosswise into batons
2 white onions, thinly sliced into rounds
3 cloves garlic, halved lengthwise
3 red bell peppers, ends removed, sliced into 1/2 inch rounds
3 tbs. sherry vinegar
28 ounces plum tomatoes, with juice
1 bay leaf
4-5 sprigs thyme, leaves removed and stems discarded
3 tbs. parsley, finely chopped
Pat the chicken dry and place, skin-side up, on a plate. Season the chicken, on the skin-side, with a teaspoon or so of the d'espelette and a pinch of salt. In a large saute pan or dutch oven, heat the canola oil over medium-high heat. Place the chicken in the oil, skin-side down, and cook until golden brown. Meanwhile, season the bottom side of the chicken with another teaspoon of d'espelette and a pinch of salt.
Turn the chicken and brown on the other side, then remove the chicken pieces to a plate to rest. (Brown chicken in batches if need be; do not crowd the pan.)
Add the bacon to the pan and cook over medium heat for several minutes, until most of the fat is rendered, but the bacon isn't quite crispy. Remove the bacon with a slotted spoon and set aside. Pour off all but a couple of tablespoons of the fat in the pan and place the pan over medium heat. Add the onions and garlic and cook slowly until the onions are well-softened, about 10 minutes. Add the peppers, a tablespoon of d'espelette and half a teaspoon of salt. Continue to cook over medium heat until the peppers are very soft, about 15 minutes.
Deglaze the pan with the vinegar, and then add the tomatoes one by one, crushing them between your fingers as you go - and don't forget their juice! Return the bacon to the pan and add the remaining d'espelette, bay leaf, thyme and parsley. Bring the mixture to a simmer, place the chicken on top, and cover. Keep the pan cooking at a simmer for 30 to 40 minutes. Remove the bay leaf, adjust for seasoning, and serve.
I like to serve this with couscous, which does a great job of soaking up the sauce. Since I ate most of the stew well after it had been made, I added a few pinches of fresh herbs to the couscous to brighten things up.
Serves 4-6 people. The sauce is more filling than you'd expect.
*If you can't find piment d'espelette, hot (not sweet) paprika makes a good substitute.
I'm a member of firm's IT Governance that's responsible for ensuring successful IT deployments across the firm. We've worked together for 12+ months now and its time to reflect on how we're working as a team i.e. time to inspect and adapt => Retrospective time!
I requested Jeanine to facilitate IT Governance retrospective.We're following the typical retrospective process I discussed earlier... Here it is in nutshell:
I'm a member of firm's IT Governance that's responsible for ensuring successful IT deployments across the firm. We've worked together for 12+ months now and its time to reflect on how we're working as a team i.e. time to inspect and adapt => Retrospective time!
I requested Jeanine to facilitate IT Governance retrospective.We're following the typical retrospective process I discussed earlier... Here it is in nutshell:
Winners of the 2009 Season – Manjula (womens) and Georg (mens)
shot by SignaOne
We started the 2010 season of the Bangalore Bicycle Championships with a kick-ass Individual Time Trial
The Race was awesome with some phenomenal turn out. Good to see a sea change from last year – better bikes, better timings and lot of people who seem to have taken bicycle racing a tad more seriously.
We are definitely heading down the right path.
Rolling Trophies
One of the highlights were the BBCh Rolling Trophies which were handed over to last year Winners – Georg and Manjula.
Congratulations guys. Enjoy it over this season and showcase it for all its worth !
Thanks to Mr 69 (a.k.a Vivek) for spending a lot of time in making this trophy happen. We gave him some old sprockets and he turned them into magical trophies at his playground at KYNKYNY. An avid biker, a very good friend and also a manager of a wonderful racing team – kynkyny racing. Fantastic Job dude !
The Yellow winners Jersey along with the rolling trophy at the race
We have a ton of pics of the first race of the season here, here, here and here
Thanks to all the photographers who woke up early in the morning to capture this event !
as usual, there are quite a few threads on our super awesome BangaloreBikersClub about the prev race and also discussions about the next race.
So join up !

Happy Saturday, my lovelies! It's a bright, crisp day here in New York, and I'm enjoying a weekend of theatre (I saw Present Laughter last night and am headed to Equivocation this afternoon!), cooking and design binging (Trip to Cooper-Hewitt? Check!). Before all that, though, it's time to take a look into the treasury.
First up this week, we have the (relatively new) foodblog Fresh New England. The three posts on El's front page all involve chocolate. And one involves whipped cream - and palmiers. Need I say more?
Next, some exciting news about Target's latest limited edition collaboration with a high-end design house: Liberty of London is coming to Tar-jay! My biggest memories of Liberty are of the dresses my mom would bring back for me from her annual piligrimage to London. When I was little, I thought they were each just another dress for church, but now I know better - those gorgeous, sprigged prints were works of art. Personally, I'm drooling over the teapot and the bike. And the dishes. And the pillows. And...anyhoo. The collection is due out on March 14th. In the meantime, I've settled for a hot-pink desktop background.
Finally, a super-cool flower arranging class: Bodega Flowers 101 from Sarah at Blossom & Branch. I am seriously considering signing up for one of the public classes, though this would also make an excellent wedding shower activity, no? (Via 100 Layer Cake.)
The Rails auto_complete plugin was my first exposure to Ruby metaprogramming. It’s code was simple enough for a Rails beginner like me to understand, but also just complex enough for me to learn something new. Specifically, I ran into metaprogramming when I took a close look at the “auto_complete_for” method and tried to figure out how it worked. I won’t spend any time here explaining what the auto_complete plugin does or what it’s used for, beyond to say that if you add this line to one of your controllers:
class CategoriesController < ApplicationController auto_complete_for :category, :name etc...
… a method called “auto_complete_for_category_name” will be automatically generated in that controller that will return a list of category records that have a name matching a given search query. This is very cool, and is a typical example of Ruby on Rails magic: you add one line to a class in your application and suddenly an entire feature or behavior is added, customized to the data and objects in your app!
This sort of thing is really what makes Ruby on Rails so amazing… but how does it work? Let’s take a look at the implementation of auto_complete_for method:
def auto_complete_for(object, method, options = {})
define_method("auto_complete_for_#{object}_#{method}") do
find_options = {
:conditions => [
"LOWER(#{method}) LIKE ?",
'%' + params[object][method].downcase + '%'
],
:order => "#{method} ASC",
:limit => 10 }.merge!(options)
@items = object.to_s.camelize.constantize.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, '#{method}' %>"
end
end
You can find this code in the lib/auto_complete.rb file inside the rails/auto_complete repository on github. So what the heck does all of this mean? Let’s take a step-by-step look at this code, and see if we can figure it out.
To get started, let’s use the category/name example I used in my last article, and also that Ryan Bates used in his Auto-Complete Association screencast on the auto_complete plugin:
auto_complete_for :category, :name
Here we are passing “:category” into auto_complete_for as the value for “object,” and “:name” as the value for “method.” Now let’s repeat the auto_complete_for code, but substitute object with :category:
def auto_complete_for(:category, method, options = {})
define_method("auto_complete_for_#{:category}_#{method}") do
find_options = {
:conditions => [
"LOWER(#{method}) LIKE ?",
'%' + params[:category][method].downcase + '%'
],
:order => "#{method} ASC",
:limit => 10 }.merge!(options)
@items = :category.to_s.camelize.constantize.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, '#{method}' %>"
end
end
In the code snippet above I’ve highlighted the places where the symbol :category appears. You can see that it’s used in a few different places, but the most important line is near the bottom: @items = :category.to_s.camelize.constantize… etc. Let’s evaluate each of the method calls on this one line, one at a time. The first call is “:category.to_s”. The “to_s” method name means “to string” and will convert the target object (the object you call to_s on) to a string. This means that the :category symbol will be converted to a string. So now let’s display the string ‘category’ in place and see what we are left with:
def auto_complete_for(:category, method, options = {})
define_method("auto_complete_for_#{:category}_#{method}") do
find_options = {
:conditions => [
"LOWER(#{method}) LIKE ?",
'%' + params[:category][method].downcase + '%'
],
:order => "#{method} ASC",
:limit => 10 }.merge!(options)
@items = 'category'.camelize.constantize.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, '#{method}' %>"
end
end
You can see ‘category’ highlighted above where I’ve evaluated the to_s method. Now the next method call is “camelize” – what does this mean? The camelize method is one of a series of functions that Rails provides in the “ActiveSupport” gem, one of the components of the Rails framework. It converts the given string to camel case, for example “office_code” to “OfficeCode.” Since Ruby class names are written using camel case, this is often very useful for obtaining a class name from a string. In our example, the string “category” is converted into “Category” with an upper case “C” …
def auto_complete_for(:category, method, options = {})
define_method("auto_complete_for_#{:category}_#{method}") do
find_options = {
:conditions => [
"LOWER(#{method}) LIKE ?",
'%' + params[:category][method].downcase + '%'
],
:order => "#{method} ASC",
:limit => 10 }.merge!(options)
@items = 'Category'.constantize.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, '#{method}' %>"
end
end
Now let’s take a look at the next method call on that same line of code: “constantize.” This converts a string into an actual Ruby constant, and returns an error if that constant doesn’t exist. In our example, the string “Category” is converted into the Ruby class Category:
def auto_complete_for(:category, method, options = {})
define_method("auto_complete_for_#{:category}_#{method}") do
find_options = {
:conditions => [
"LOWER(#{method}) LIKE ?",
'%' + params[:category][method].downcase + '%'
],
:order => "#{method} ASC",
:limit => 10 }.merge!(options)
@items = Category.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, '#{method}' %>"
end
end
Now we can see that the complex line above evaluates to a simple ActiveRecord find call. The power of Ruby metaprogramming has enabled us to write a single helper function “auto_complete_for” that takes any symbol or string as an argument (e.g. :category), and performs a SQL query on the corresponding ActiveRecord class. The amazing part of this for me is how flexible and easy to use Ruby is: helper methods like camelize and constantize make it very easy to extract common bits of code you might write over and over again in your app, and generalize them into a single method that will apply to any target class. This would be possible in any programming language but it’s amazing just how easy it is to do with Ruby.
Let’s continue to simplify the auto_complete_for code by substituting a value for the “method” parameter – in our example method will become the symbol “:name” :
def auto_complete_for(:category, :name, options = {})
define_method("auto_complete_for_#{:category}_#{:name}") do
find_options = {
:conditions => [
"LOWER(#{:name}) LIKE ?",
'%' + params[:category][:name].downcase + '%'
],
:order => "#{:name} ASC",
:limit => 10 }.merge!(options)
@items = Category.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, '#{:name}' %>"
end
end
Again you can see that the :name symbol is used in a few different places. Most commonly here the symbol is inserted in a string using this syntax: “#{:name}”. This is the standard Ruby #{} string interpolation operator, which is also implicitly converting the symbol into a string before inserting it into the surrounding string value, just as if we called to_s as above. So let’s replace “#{:name}” and “#{:category}” with the strings “name” and “category,” and then also insert them into the surrounding string values:
def auto_complete_for(:category, :name, options = {})
define_method("auto_complete_for_category_name") do
find_options = {
:conditions => [
"LOWER(name) LIKE ?",
'%' + params[:category][:name].downcase + '%'
],
:order => "name ASC",
:limit => 10 }.merge!(options)
@items = Category.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, 'name' %>"
end
end
And now let’s replace the last parameter to auto_complete_for “options” with it’s default value since we aren’t providing that in our auto_complete_for :category, :name call:
def auto_complete_for(:category, :name, {})
define_me thod("auto_complete_for_category_name") do
find_options = {
:conditions => [
"LOWER(name) LIKE ?",
'%' + params[:category][:name].downcase + '%'
],
:order => "name ASC",
:limit => 10 }.merge!({})
@items = Category.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, 'name' %>"
end
end
You can see that options was used in only one place: …merge!(options). Using merge with hashes is another extremely common technique in Ruby coding; it adds the key/value pairs from the hash you provide as a parameter to the hash you call merge on. Merge! is a variation on this which directly modifies the target object, as opposed to only returning the merged hash. Merge is very useful for metaprogramming because, as in this example, it makes it easy to allow the user/client code of a method to customize a hash of options that is passed into some other function. Here merge was used to allow the caller of auto_complete_for to pass in additional find options to the Category.find call. In our case since we didn’t pass in a value for options, it is set to {} and then has no effect on the find_options hash. So let’s just remove the call to merge!({}), which is a NOP anyway:
def auto_complete_for(:category, :name, {})
define_method("auto_complete_for_category_name") do
find_options = {
:conditions => [
"LOWER(name) LIKE ?",
'%' + params[:category][:name].downcase + '%'
],
:order => "name ASC",
:limit => 10 }
@items = Category.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, 'name' %>"
end
end
Now the code is looking simpler and simpler. Let’s finish this example by evaluating the “define_method” call at the top. As you might guess, define_method is how you can dynamically create a new method in a class in Ruby. In auto_complete_for it’s used to add a new method to the controller in which you included the call to auto_complete_for, called “auto_complete_for_category_name.” In other words, adding the auto_complete_for :category, :name line to the CategoriesController was equivalent to adding this method definition to the class:
def auto_complete_for_category_name
find_options = {
:conditions => [
"LOWER(name) LIKE ?",
'%' + params[:category][:name].downcase + '%'
],
:order => "name ASC",
:limit => 10 }
@items = Category.find(:all, find_options)
render :inline => "<%= auto_complete_result @items, 'name' %>"
end
Now we’ve seen the real value of metaprogramming: the author of the auto_complete plugin was able to provide a simple helper method, auto_complete_for, which dynamically added this fairly complex method to your controller. The beauty and power of Ruby and Rails is just how easy this was to do: the generated function is tailored to use the Category model just as if you had written it yourself. When I first came across this code I was impressed not only by the power that this sort of metaprogramming provided, but also by how easy it was to do this using Ruby on Rails. Helper modules and methods, such as constantize in ActiveSupport, make it very, very easy to convert from symbols to strings to constants and back again… which is exactly what you need to do to write a general method that can be dynamically generated in this way.
Last week I asserted that calling auto_complete_for in your controller like this was equivalent to this code from Ryan Bates’ Auto-Complete Association screencast:
class CategoriesController < ApplicationController
def index
@categories =
Category.find(:all, :conditions => ['name LIKE ?', "%#{params[:search]}%"])
end
etc...
Now you can see how this is true: the code Ryan wrote was a simple call to Category.find, with conditions that search for a name like the name provided in the “search” parameter. Looking at the simplified auto_complete_for_category_name method above, you can see that it calls Category.find in the same way. However, the auto_complete_for version is a bit different in that it:
Auto_complete_for does essentially the same thing that Ryan explained in his screen cast, but the elegance of Ruby metaprogramming allows the users of the auto_complete plugin to implement this search feature without writing any code at all.
That's right, folks! I used the maionese de leite as a sauce for some simple, pan-roasted lamb chops, and the result was absolutely delicious. I sprinkled a bit of salt and some lemon juice over the whole mess, and added some parsley for good measure, too.
More uses for this deliciousness coming soon!
Last Sunday, in between coffee at Joe and a wonderful trip to the theatre with my friend Miya and her mom, Judy, I stopped into Kefi for a bite to eat.
Kefi is one of those rare success stories - a tiny neighborhood restaurant that flourishes to the extreme. In Kefi's case, that's meant a move to a larger space and attention from the Times, New York Magazine and the major food blogs (no, I don't mean Queenie). And with good reason. Kefi's food is simple and delicious - it's rustic Greek done very, very well and presented with friendly service for a reasonable price.
I'd eaten at Kefi for dinner a couple of times - the lamb chops are stupendous - but Sunday was my first time there for lunch. I decided to try a couple of the mezze, since I was feeling peckish and in need of variety. As it turns out, the two mezze were way too much food for one person, but not quite enough for two - if you're paired up, I'd recommend trying three!
My first choice was the homemade cypriot sausage, which came with a tangle of radishes, cucumbers and scallions tossed with lemon juice, herbs and olive oil. The sausages came nestled in a little pool of creamy Greek yogurt with a little stack of fresh pita triangles alongside.The crispy calamari, my next choice, came complete with crispy lemon slices (battered bits of sunshine) and Greek yogurt for dipping. The calamari itself was simply cooked - lightly battered and then fried to golden - but the yogurt was seasoned with parsley, garlic and bits of fried shallot. The two combined were utter happiness on a plate. Seriously - I could eat this every day and not be bored. It was like having little fireworks go off in my mouth - like Pop Rocks of the sea.
In short, if you're in the market for a tasty Greek meal north of 59th Street, Kefi is the place to be. And you should get the calamari, lamb chops - oooh, and the sweetbreads, if they're still on the dinner menu. The sweetbreads, too.
Kefi
505 Columbus Avenue
Between 84th and 85th Streets
212.873.0200
Saturday 13 Feb’10, when I was having my evening tea after taking a good long sleep of 3 hours. My brother who works with a software company in Pune called me up and asked if I am watching any of the news channels.
I switched on, my tv and started scanning the channels. Meanwhile he told me that there had been a bomb blast in the famous “German Bakery” shop. I was shocked to hear this . This place is usually occupied with foreigners and youngsters. My brother’s voice was broken and he sounded deeply upset. He and his friends used to visit the shop almost every weekend and spend hours there.It took time a while to realize that this had truly happened. I then frantically started dialing in all my friends and relatives, who stay in Pune , just to make sure that they all were fine.
Thank God….everybody was ok….
But wait.. was everybody ok… !!!!!!
8 people were killed on the spot and many received injures. They were also close to someone…..
Then I realized that my responsibility doesn’t end here (just calling my frens and relatives to know if they are safe) but it’s something more than that. Why we (as a citizen) are always suffer at the hands of these militant groups……?? Why can’t we be proactive?? Why do we always start complaining and blaming the govt .when such disasters happen????
Is it only the government’s responsibility????
Aren’t we also responsible for creating awareness and follow certain rules like – ‘Never open an unattended bag and inform Police in such situations OR ‘Inform police about any suspicious person’????
Yes. We are definitely responsible as citizens of this country…. . I am not saying that whatever Government is doing is enough and they can’t do more. Yes, they are also ‘reactive’ and not ‘proactive’. They wake-up only when something bizarre like this happens . They also make mistake by putting a terrorist behind the bars instead of shooting him at sight. Many more actions government can and should take at their end.
But , we should also identify and do what we can be done at our end. That way we can make an effort to avoid such circumstances if we can’t directly prevent them from happening…
Because……. Security is everybody’s responsibility…and ultimately it is the common people like you and me who suffer at the hands of these terrorists ….. as anyways the politicians have policemen around them 24x7 …
... in the 2nd test match at Eden Gardens, Kolkata, at 3am EST. India has to win this match to retain the top spot in test cricket. 3 more wickets... that's all we need in the next 25 overs or so... go India!!!
... in the 2nd test match at Eden Gardens, Kolkata, at 3am EST. India has to win this match to retain the top spot in test cricket. 3 more wickets... that's all we need in the next 25 overs or so... go India!!!
I wish the writer in me is able to express my thoughts like the one below. Never mind, till there are people doing it for me. Thanks to T.O.I. writer who has written the beautiful article below, that truly intercepts my feeling...
Route Map for the Time Trial on the 21st (click for a bigger map)
Date: 21st February 2010
Time: 0700 hrs IST (volunteers meet at 6:30am at the Bangalore University West Gate)
Category: Individual Time Trial
Distance: 12km (6km loop x 2)
Driving directions: directions on this thread on the BangaloreBikersClub
“An individual time trial is a road bicycle race in which cyclists race alone against the clock” – wikipedia
They forgot to add its loads of fun !
There are various threads on the awesome BangaloreBikersClub covering various facets of the upcoming race. Feel free to jump into any of these threads and contribute.
You could also get a lot of info about the upcoming race on the official BBCh site.
All riders must carry all items that they think they would require on the race. There will be aid station(s) providing banana/electrolyte/water refills and an emergency medical kit for cuts and bruises.
Please do try and be self sufficient.
Apart from your name, email-id and participation level (racer/volunteer) you will need to enter a Jersey number while registering. If you dont have one, we will give you one.
Since the Jersey number assignment is not automated it will take some time for your name to appear in the Riders list so don’t worry.
Read the FAQ, Rules and Safety information
Please remember to check your emails on Saturday for route details and driving directions.
These events are great fun and a great place to meet up with fellow cyclists (newbies, gurus and everyone in between). Let your friends know and don’t worry if you ain’t got the fancy jerseys and shorts – the torn jeans and faded tees are just fine as long as you get your helmet, gloves and a bike that you can ride :)
Ride Safe. And a fantastic racing season to all of you.
Our team provides software development services to our firm. Here's our mission:
Excellence in Software Development
- Delight our users with simple, fast and valued solutions
- Consistently exceed sponsor expectations
- Inspire your colleagues
- Understand best practice. Embrace next practices
- Demonstrate software craftsmanship
- Create the best place to work, rich with fun and passion
Note: This is inspired by Google's user experience aspirations, 37 Signal's "Getting Real" book and ThoughtWorks' mission
Our team provides software development services to our firm. Here's our mission:
Excellence in Software Development
- Delight our users with simple, fast and valued solutions
- Consistently exceed sponsor expectations
- Inspire your colleagues
- Understand best practice. Embrace next practices
- Demonstrate software craftsmanship
- Create the best place to work, rich with fun and passion
Note: This is inspired by Google's user experience aspirations, 37 Signal's "Getting Real" book and ThoughtWorks' mission
Last week, Amanda Hesser posted what looked like an incredible recipe to the blog at Food52. For those of you who haven't discovered it for yourselves quite yet, Food52 is an online community of home cooks dedicated to creating a fantastic repository of recipes as well as a series of thoughtfully and collaboratively curated cookbooks. I am personally addicted to it, and follow the site (as well as its founders, Amanda and Merrill) on Twitter - you should, too.
Anyhoo, back to the point. Amanda posted a recipe for a milk-based mayonnaise last week, and I was immediately intrigued. For starters, how would the emulsion work? And how would it taste? The answers, as it turns out, are: very well, and just as Amanda described - pillowy goodness.
Since the protein here comes from whole milk, as opposed to the sticky substance that is egg yolk, the mayonnaise produced is lighter than the usual - pillowy is absolutely the right description; cloudlike would also work. The touch of garlic adds a piquancy to the mix and lends depth to the overall flavor.Mine ended up looking a bit like vanilla ice cream, but don't be deceived - those black flecks are not vanilla bean, but freshly ground black pepper, since I didn't have any white pepper on hand. Either way, the mayonnaise was delicious folded into my go-to chicken salad, and I'm pretty excited to try it out as a sauce for pan-roasted lamb chops tomorrow night. Yum.
I received a call from one of my friend asking if I had any idea about how to decide the cost of a project if it needs to be used for bidding for an Agile SCRUM kind of a project. I was puzzled at the thought at that very moment. I directed him to one of my friend who is an expert in SCRUM.
But, later I searched about this on internet and found few good posts pointing to some solutions and thoughts regarding the same, as following --
....the price for the project was fixed, but the features themselves were negotiable according to rules agreed to in the contract. The features were broken down, and time was tracked on each feature. Whenever the development team took longer than anticipated, the client removed scope. Conversely, when the development team finished a feature early, scope was added. In order to add incentive, effort added or removed was discounted by 50%. For example, if the development team finished 2 days early, only 1 day of extra scope was added. On the other hand, if the team finished 2 days late, the client only removed 1 day of scope. The contract actually specified the rules by which scope was added or removed.....
More detail at -- http://www.codesqueeze.com/how-to-sell-agile-to-fixed-bid-contract-clients/
Additionally, TDD, test coverage reports bundled with CI are key to achieve the required quality and agility during the project execution.
The first race of 2010 at the Bangalore Bicycle Championships is just around the corner.
How ready are you this time around ?
2009 was fantastic, with some hardcore racing. We had some superb volunteering, fantastic coordinating and many many brilliant rides.
Memorable indeed (check out some of the moments. You have more ? Share them with all of us)
The bikers were exposed to all kinds of racing – Time Trials, Road races, Trail rides, Criteriums and even some kiddie races.
2010 promised to be a whole new wheel game.
As usual, its a lot of hard, exciting and satisfying work behind the scenes to deliver race after perfect race. If this excites you and you think you would like to make a difference in this space – ping us. There is always a need for yet another awesome biker who is willing to help out !
Train Hard. Race Harder. Life is too short to be a wimp
Last Tuesday night, Nick, Louisa, Jeremy, Miriam and I went for dessert at Momofuku Milk Bar. We ordered an insane assortment of desserts, including the chocolate chip cake (Miriam's favorite), crack pie (like shoofly, but better), cookies, cookies, cookies, and cinnamon bun pie (my personal favorite).
I, of course, had to buy a cookie or two for the next day. I sprang for a blueberry cream, which I shared for breakfast with my friend Mary, and a chocolate chip-cornflake-marshmallow, which I saved for my mid-afternoon snack.It was, predicatbly, delicious. One of the secrets of a fantastic cookie is, of course, not slacking on the butter. If you're going to do it, go whole hog. Given the transparency of their paper bag the next morning, I can confirm that these cookies are buttery to the max. Another secret is finding the perfect balance of salty and sweet, another place Momofuku (mostly) excels. While a couple of their items are a bit too simply sweet for me, most, like this cookie, are a perfect blend of salt, sugar, crunch and chew.
And butter. Lots and lots of butter.
(Don't forget - if you live in parts distant, you can make your own chocolate chip-cornflake-marshmallow cookies, thanks to Ms. Lorna Yee!)
Momofuku Milk Bar
207 Second Avenue
Corner of 13th Street
212.254.3400
OK, kids. Here is a lesson in preparation.
Remember way back when in April when I reminded you of the virtues of ramp compound butter? My personal stash (a ten-inch log stored in the freezer) has been very good to me over the last eight months or so. I've used it in pastas, tossed bits of it on top of lamb chops & steak, and spread it on toast to give sandwiches some extra oomph.
This past weekend, I used a bit of it to make the most delicious green peas I've had in ages. I was having lamb chops for lunch and wanted to have peas alongside (I always keep a bag of Birds Eye in the freezer). I contemplated mashing them, but then remembered how delicious ramp butter was with lamb, and decided it would also be great with lamb-accompanied peas.
And I was right! The ramp butter lent the peas a slightly funky flavor, and the different greens of the ramps, parsley and peas looked so beautiful together. A pinch of salt helped everything sing.
Without further ado, then, I present what is pretty much the easiest recipe of all time - or, at least, the easiest recipe ever to appear on this blog. Enjoy!
Peas with Ramp Butter
1 cup of good quality frozen peas
2 tbs. ramp compound butter, cut into a few bits
Pinch of kosher salt
1 tbs. finely chopped flat leaf parsley
Place the peas in a small saucepan and fill with just enough water to cover. Set the pan over low heat for a few minutes, keeping an eye on it to make sure it doesn't quite simmer. Cook the peas until they are very warm (since they've already been cooked, you're really just reheating them).
Drain the peas in a strainer or colander and return to the saucepan (but turn off the heat). Add the compound butter, salt and parsley and toss to combine. Once the butter is pretty much melted, taste the peas, adjust for seasoning and serve.
Serves two as a side.
At ACM and other IT industry groups, it seems a shift in thinking is underway in how to attract more girls and young women into careers in STEM (Science, Technology, Engineering and Math). By emphasizing the social impact of technology and its contribution to society, the story goes, more women will be interested in participating. Boys are interested in machines, while girls are interested in communications and people. But is this true?
An article in the February issue of Interactions Magazine quotes the results of recent research:
“For males, the attraction to computers comes early in life and appears to be magnetic. Males are more likely to be fascinated with the computer itself, find satisfaction in controlling and mastering a machine, and enjoy hacking for hacking’s sake. Females’ interest in computing is more likely to be one interest among several others. They are more likely to place a high value on the context of computing, the links between computers and other fields, and the contribution to society that computers can make. We refer to this orientation as ‘computing for a purpose’…. Many women who decide against studying computer science, either before or after starting, do so after concluding that their interests in application, helping people, and being a ‘people person’ do not have a place in computer science.”
Happy long-weekend Saturday, people! It's been a fairly busy day chez Queenie; I've whipped up some homemade mayonnaise (a new recipe - more on that later), given myself a manicure, and met up with a fellow blogger for a little sweet treat. All of this is my way of excusing the tardiness of this treasury post - I hope the goodness of the content makes up for the lateness of the hour!
First up this week, a fantastic resource for your next trip to France. I stumbled on this guide to Parisian restaurants, etiquette and norms last week, and I think it's a godsend for Americans headed for the city, be it your first trip or your twentieth. Seriously good stuff - especially the post about restaurant etiquette. Thanks for sharing your wisdom, Jake & Mo! (And thanks for an excuse to post a photo of Camille's superlative creme brulee!)
Next, something a little closer to home. For a couple of weeks now I've been following this cool blog called Scouting New York. Written by a film industry location scout, it's already opened my eyes to sights I've missed right here in my own fair city, and taught me more about those I thought I knew well. It's a ton of fun, and I highly recommend you add it to your daily reading roster.
Finally, another awesome recipe from Design*Sponge's In The Kitchen series. This week's recipe was for Boston cream pies, and man oh man do they look delicious. Yellow cake, pastry cream and chocolate glaze? Sign me up, because Beantown here I come.
In my last post I started a series on how to write Rails forms that associate a new record with existing data. This sort of requirement comes up for me over and over again at my day job, and so I decided to support scaffolding for these forms in View Mapper.
Today I’ll continue by showing how to use the auto_complete plugin to select an existing record – exactly what Ryan Bates discussed in his screen cast Auto-Complete Association. Using the same Category/Product example, this form would allow the user to create a new product record, and associate it with an existing category tag:
To create scaffolding like this in your app with View Mapper, just run this command:
script/generate scaffold_for_view product name:string bar_code:integer
--view belongs_to_auto_complete:categoryView Mapper will validate you have a line “has_many :products” in your category model, that you have a category model to begin with, and also that the auto_complete plugin is installed before proceeding to generate this form. Also, View Mapper assumes the parent model, “Category” in this example, has a “name” column and will use that value to identify each category in the auto complete list. You can indicate to use a different parent model field instead with this syntax:
script/generate scaffold_for_view product name:string bar_code:integer
--view belongs_to_auto_complete:category[display_name]For more details on View Mapper, see the example below where I create a sample app from scratch.
Code review: model
Since Ryan explains auto complete association so well in his screen cast, I won’t repeat all of that information here. Instead, let’s take a look at the code View Mapper generates and compare it to what Ryan showed. First, in the product model Ryan has a “category_name” virtual attribute:
def category_name category.name if category end def category_name=(name) self.category = Category.find_or_create_by_name(name) unless name.blank? end
This allows the view to display the category for each product easily, and also supports creating new categories on the fly when you submit a new product. The View Mapper scaffolding is a bit simpler and uses “find_by_name” instead of “find_or_create_by_name” since it assumes the category records already exist. Also, Ryan’s code uses “unless name.blank?” to avoid creating empty categories, while the View Mapper scaffolding assumes a blank category name indicates a product without a category, and allows the user to clear the category when editing an existing product. Either approach can make sense depending on the business requirements of your application. Here’s the View Mapper model code:
class Product < ActiveRecord::Base belongs_to :category def category_name category.name if category end def category_name=(name) self.category = Category.find_by_name(name) end end
Code review: controller
In the controller code, the View Mapper scaffolding differs from Ryan’s solution more dramatically. To return the list of matching categories to the auto_complete plugin, Ryan adds this code to the categories controller to query the category records that have a name field that match a given search parameter:
def index @categories = Category.find(:all, :conditions => ['name LIKE ?', "%#{params[:search]}%"]) end
This makes a lot of sense: the categories controller should be used to generate a list of categories. However, for View Mapper I chose to use the products controller instead since the scaffolding generator already generates that code file, and to avoid the need for creating or modifying the categories controller also. View Mapper just adds this one line to the products controller to return the list of category names:
auto_complete_for :category, :name
This simple call actually achieves exactly the same thing as the Category.find call above. In my next post, I’ll take a look at the Ruby metaprogramming used by auto_complete_for and show how it automatically generates a method that executes the same SQL query.
Code review: view
Finally in the view we see a call to “text_field_with_auto_complete” to use the Prototype javascript library’s auto_complete feature. Here’s Ryan’s view code from the screen cast:
<%= text_field_with_auto_complete :product,
:category_name,
{ :size => 15 },
{ :url => formatted_categories_path(:js),
:method => :get,
:param_name => 'search' }
%>“:url => formatted_categories_path(:js)” calls the categories controller code above when the user starts to type in the text field, and the “:param_name =>‘search’” option passes the user’s text in as the search parameter. Ryan’s solution also uses a view file called “index.js.erb” to return the list of completion options in the proper format – this is called by the index action when the categories controller receives the “/categories.js” request:
<%= auto_complete_result @categories, :name %>By contrast, View Mapper’s call to text_field_with_auto_complete looks like this:
<%= text_field_with_auto_complete :product,
:category_name,
{},
{ :method => :get,
:url => '/auto_complete_for_category_name',
:param_name => 'category[name]' }
%>This is very similar, but uses “category[name]” as the search parameter and sets the AJAX url to “auto_complete_for_office_code”, since this is what “auto_complete_for” expects.
Ryan’s approach is more elegant since it follows the REST model for the Ajax URL and controller code: the categories controller is used to handle category related requests, and its index action is used to return the list of category values. The scaffolding code View Mapper generates uses the auto_complete plugin the way it was originally intended with the “auto_complete_for” function, but is a bit ugly in that the products controller returns the category values, and uses a custom action method name instead of the normal “index” action. There’s no need for the index.js.erb file since auto_complete_for renders the response inline.
The advantage of the View Mapper approach is that there’s no need for the categories controller at all, and also you don’t need to code the “index” action or the index.js.erb view file yourself. If you plan to have a categories controller in your application anyway, you might want to change the text_field_with_auto_complete call to use that controller instead.
Detailed example
To make sure you can get a working example on your computer, let’s run through a step by step example:
$ rails sample_app
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
etc...First, let’s create a model to represent our existing data called “Office” that will have two attributes: “display_name” and “code:”
$ cd sample_app/
$ ./script/generate model office code:string display_name:string
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/office.rb
create test/unit/office_test.rb
create test/fixtures/offices.yml
create db/migrate
create db/migrate/20100212193446_create_offices.rb
$ rake db:migrate
(in /Users/pat/rails-apps/sample_app)
== CreateOffices: migrating ==================================================
-- create_table(:offices)
-> 0.0031s
== CreateOffices: migrated (0.0034s) =========================================And now let’s create a few sample office records:
$ ./script/console Loading development environment (Rails 2.3.5) >> Office.create :display_name => 'Boston', :code => 'BOS' >> Office.create :display_name => 'Boise', :code => 'BOI' >> Office.create :display_name => 'Barcelona', :code => 'BAR' >> exit
Now you can install View Mapper – you’ll need version 0.3.3 for the “belongs_to_auto_complete” view:
$ gem sources -a http://gemcutter.org http://gemcutter.org added to sources $ sudo gem install view_mapper Successfully installed view_mapper-0.3.3 1 gem installed Installing ri documentation for view_mapper-0.3.3... Installing RDoc documentation for view_mapper-0.3.3...
And now we can just run View Mapper’s “scaffold_for_view” generator to create the scaffolding code. Let’s try creating a new model called “Employee” that will belong to one of the existing offices:
$ ./script/generate scaffold_for_view employee name:string
--view belongs_to_auto_complete:office
error The auto_complete plugin does not appear to be installed.
$ ./script/plugin install git://github.com/rails/auto_complete.git
Initialized empty Git repository in /Users/pat/rails-apps/sample_app/vendor/plugins/auto_complete/.git/
remote: Counting objects: 13, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 13 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (13/13), done.
From git://github.com/rails/auto_complete
* branch HEAD -> FETCH_HEADTrying again:
$ ./script/generate scaffold_for_view employee name:string
--view belongs_to_auto_complete:office
warning Model Office does not contain a has_many association for Employee.Editing app/models/office.rb:
1 class Office < ActiveRecord::Base 2 has_many :employees 3 end
Trying a third time:
$ ./script/generate scaffold_for_view employee name:string
--view belongs_to_auto_complete:office
warning Model Office does not have a name attribute.
This time we get a warning that our existing model doesn’t have a “name” attribute (we chose “display_name” instead). To make this a bit more interesting, let’s use the “code” attribute for the auto_complete options. You can specify this to View Mapper with this syntax:
$ ./script/generate scaffold_for_view employee name:string
--view belongs_to_auto_complete:office[code]
exists app/models/
exists app/controllers/
exists app/helpers/
create app/views/employees
exists app/views/layouts/
exists test/functional
etc...Now we just run rake db:migrate again, start our server and we’re done!
$ rake db:migrate (in /Users/pat/rails-apps/sample_app) == CreateEmployees: migrating ================================================ -- create_table(:employees) -> 0.0034s == CreateEmployees: migrated (0.0036s) =======================================
You can configure Query Studio to start in preview mode. Users can then create or modify reports without retrieving actual data from the database. Instead, simulated data is shown.
If you later upgrade IBM Cognos 8, you must reapply this configuration.
Steps
1. Using IBM Cognos Configuration, stop IBM Cognos 8.
2. Rename the c8_location\templates\ps\async\system.xml.sample file to
system.xml.
Tip: To restore the regular mode, rename the
c8_location\templates\ps\async\system.xml file to system.xml.sample.
3. Using IBM Cognos Configuration, start IBM Cognos 8.
I got a chance to visit http://webroar.in/ and it seems interesting.
http://webroar.in/blog/2009/11/25/introducing-webroar-v0-2-3-ruby-application-server
WebROaR is an application server that makes deployments of ruby web applications extremely simple. It provides an integrated solution to view the run time performance numbers and email notifications in case any exceptions occur in any of the deployed applications. It is 5 to 55% faster than all other comparable deployment stacks for RoR apps.
Comparison :-
http://webroar.in/blog/2009/11/25/comparison-of-rails-deployment-stacks-2
Some screenshots :-
http://webroar.in/screenshots
Source :-
http://github.com/webroar/webroar/
About 30% of the formatting functions available in IBM Cognos 8 are not supported in Microsoft Excel. In particular, Excel does not allow changing locale-dependent formatting attributes, such as the following:
Decimal Separator
Exponential Symbol
Group Separator
Monetary Decimal Separator
AM String
Day Name
Day Short Name
Decimal Delimiter Symbol
Month Name
Month Short Name
PM String
In addition, Excel does not support the following:
Format Width
International Currency Symbol
List Separator
Percent Symbol (Excel does not support percent symbols for charts)
Multiplier
Overline Text Format
PerMill Symbol
Plus Sign
Scale (Excel has a different scaling formula than IBM Cognos 8)
Calendar (Excel does not allow changing the calendar)
Era Name
First Day Of Week
Show Era
Coming soon, to a market near you...

Have you ever
Get the answers !
When: Saturday, February 20th
When: 6PM
Where: At BumsOnTheSaddle, the terrace
Dr.Major Srinivas, an army major and a doctor will be giving us a CPR and First Aid session in case a friend needs it. He would also be talking to us on how to take care of ourselves should we ever have a fall.
The best part, in the true BBC spirit of gaining critical mass for bicycling, this session is free. Yay. Oh and its a B.Y.O.B event
Thanks to Yogesh and Dr Major Srinivas for making this happen !
<iframe src='http://spreadsheets.google.com/embeddedform?formkey=dGZNOTFwUG8xOXoteWF2X0dfdmlYeWc6MA' height='457' width='560'>Loading…</iframe>Google steps into the world of micro-blogging ....
Rest of the micro-blogging players hide out...
Wanna try -> here
See the video to help yourself...
Well its been long I blogged but better late than never... :)))
Been busy with projects, visit to India etc etc ... I can come up with a long list of excuses but none of them will be procrastinating ... hehehe
I forced my self out of hibernation to blog about a recent (strange ??) problem I faced.
In one of my projects, I came across a fairly common requirement to upload a file (multipart form-data post) through a ruby script. Pretty simple huhhh!
Unfortunately I was stumped to find that net/http library does not support it (still dont believe it!!). The documentation is very poor and it took me sometime to figure out net/http treats them all as string. CRAP !!!.
Some nice libraries eg: rest_client, httpclient, curb etc.. do a decent job in terms of posting the file, but they all mess with either creating incorrect boundaries for multi-part form or mess with content_length header of form-post
My requirement was to make http post call (multipart form data post) to Domino server. The domino app was very particular about content_length header, which is where I faced the biggest hurdle in using them.
Left with no choice, rolled up my sweet multipart form post.
Sharing with you all ruby-multipart-post.
How to use ==> here
Any feedback, most welcome ...
Enjoy !!!
What is Google Buzz?
Why Google Buzz?
I recently read a very good book written by Dr. P.V.Vartak - "Geeta - Vidnyananishtha Nirupan" (Scientific explanation)
As we know, Geeta is a conversation between Lord Krishna and Arjuna which took place on the battlefield of Kurukshetra just prior to the start of Mahabharata war. Responding to Arjuna's confusion and moral dilemma, Krishna explained to Arjuna his duties as a warrior and real path of truth and elaborated on a number of different Yogic and Vedantic philosophies, with examples and analogies. Geeta is often being described as a concise guide to Hindu philosophy and also as a practical, self-contained guide to live life especially with Karma yog. Karma Yog is a science that frees us from the bonds of actions and attachment with the attributes. According to the Bhagawad Geeta, it consists of mentally renouncing the sense of doership in favour of God while performing all actions.
Dr. Vartak has explained all the 18 chapters (addhyay) of Geeta in a very simple but superior language. Many thanks to him !
He has also pointed out some mistakes that Mahaatma Gandhi (M.K.Gandhi) did which ultimately led to a lot of violence during Indian independence. Mahaatma Gandhi used to daily worship/read Geeta, but unfortunately could not grab the real meaning of non-violence, Karma yog described in Geeta. The Geeta was actually told to Arjuna to take away his confusion and encourage him to perform his duties as a warrior. But Mahaatma Gandhi never understood the crux of Geeta and repeatedly made mistakes in terms of following non-violence, forgiving real enemies at National level and unfortunately the Nation also followed wrong leadership during that time.
I would request everyone to read this book and think in solitude on the thoughts explained in the book ... We have yet a lot to improve ...
As soon as I spied a recipe for a tortilla with potatoes, parsnips and watercress on Cannelle et Vanille last week, I knew I had to make it. I halved the recipe to make a single-serving version for lunch, and it was delicious - but the egg-to-filling ration was too low for my liking. I decided to tweak things a bit and make my own version, heavy on the egg, lighter on the potato and parsnip, and generous with the watercress.
The genius move of the recipe - poaching the parsnip and potato in olive oil - remains, because it is just damn tasty. Seriously, intensely, ridiculously tasty.
(A quick aside: watercress is one of my favorite greens, and is especially good sauteed in olive oil with a bit of garlic. Top it off with a sprinkling of soy sauce and a pinch of red pepper, and you have a side dish worthy of a king.)
I also changed the equipment called for by the original recipe; due partly to storage space concern and partly to my belief that there's no reason to own two of everything, I don't own non-stick pans, so the flipping action called for in the Cannelle recipe was a bit tough. use the broiler, though, and there's no need to flip the thing when the egg is still quite runny - and you won't dirty a plate, either!
This recipe makes a generous lunch for one, or part of a lunch for two, but it should multiply easily - just use a bigger skillet.
Tortilla with Parsnip, Potato and Watercress
Adapted from Cannelle et Vanille
1/4 cup extra virgin olive oil, plus an additional teaspoon or so
1/4 medium onion, chopped
1/2 medium russet potato, cut into a 1/2 inch dice
1 small parsnip, cut into a 1/2 inch dice
1/4 tsp. salt
3 eggs
1/2 cup of watercress, roughly chopped
Salt and freshly ground black pepper
In an oven-proof 8 inch skillet, heat the olive oil over medium heat. Add the onions and sweat them for about 2 minutes - you want them cooked, but not browned. Add the diced potatoes, parsnip and the salt. Cook the vegetables at medium for about 2 minutes, then lower the heat to medium low and cook for another 15 minutes. Meanwhile, pre-heat the broiler.
In a separate bowl, whisk together the eggs. Add the watercress. Using a slotted spoon, remove the poatoes, parsnips and onions from the olive oil and add to the egg mixture (It's ok if the eggs cook a bit from the heat of the vegetables.). Wipe out the skillet with a paper towel and return to the heat. Add the teaspoon of oil and swirl to coat the pan, including the sides.
Add the eggs to the pan, turn the heat back to medium and stir the center so the egg starts to cook. When the center starts to scramble, let it be and don't stir anymore. Tuck in the edges nicely with the spatula and cook for about 2-3 minutes. When the edges begin to set, transfer the skillet to the broiler and cook until the tortilla is done to your liking. (I like it crispy on the edges and a bit runny in the middle, which takes about 3 minutes.)
Use a spatula to gently loosen the tortilla from the skillet and transfer to a plate. Slice in wedges if you plan to serve to more than one eater. Season with a bit of black pepper and salt, and serve.
Serves one generously, or two as part of a meal.
My love for cauliflower is well-established, as is my love for wine. But what happens when you combine the two? Delicious, delicious things. Last week I saved a quarter of a head of cauliflower from the roasting pan and reserved it for a pasta dinner. I'd seen a couple mentions of that a red wine barley risotto with cauliflower, and since I didn't have any barley (or arborio rice) sitting around, I decided to improvise with a pasta instead.
I chopped some onion and minced some garlic and decided to keep the florets intact. Cavatappi was the only pasta I had on hand, so it won out automatically. I had about a glass of red wine left in the bottom of a bottle. And since I can always go for something spicy, I added a sprinkling of red pepper flakes to the mix.
The result was a fairly nutritious, hearty, satisfying lunch. As much as I love the sweet, crunchy experience of roasted cauliflower, a quick saute in wine and garlic does a great job of bringing out its sharper, more vegetal side. Good stuff.Pasta with Red Wine and Cauliflower
1/4 pound short pasta, such as penne rigate or cavatappi
Olive oil
1/4 white onion, thinly sliced
1 large garlic clove, minced
1/4 head of cauliflower, chopped into 1-inch florets
1/2 cup dry red wine
Generous pinch of red pepper flakes
Finely grated parmesan cheese
Salt
In boiling, salted water, cook the pasta to al dente. Drain and set aside; do not rinse. (You can also cook the pasta while you make the sauce.)
Set a large skillet (I used my 12-incher) over high heat. Add enough olive oil to lightly coat the bottom of the pan, turn the heat to medium-high, and add the onions. Saute the onions for a few minutes until soft and fragrant, but not browned. Add the garlic and saute for a few minutes more, until you can smell the garlic and it has turned golden.
Add the cauliflower to the pan and saute for 4-6 minutes, until it has acquired a bit of color and begun to release its water. Sprinkle the mixture with a pinch of salt and deglaze the pan with the red wine. Add the pepper flakes and continue to cook, stirring frequently, until the red wine is reduced to a syrupy glaze. Add the pasta to the skillet and cook for a minute or two, mixing it with the sauce and letting everything get to know each other.
Transfer the pasta and sauce to a shallow bowl, top with the cheese, taste for seasoning, and eat!
Serves one.
A pandit crossing a field felt that there was something in his mouth and spat it out. It turned out to be a heron's feather. He could not understand how it had got into his mouth and it perplexed him a great deal. When he reached home he told his wife about it but asked her not to tell anyone lest somebody put a bad interpretation on it. His wife was even more intrigued by the strange occurrence and felt the need to confide in someone. So she swore her neighbour to secrecy and told her what had happened.
Perhaps it was the way she told it, but her neighbour got the impression that several feathers had come out of the pandit's mouth. She was shocked. However, she assured the woman that such things could happen and advised her not to worry about it.
"Please don't tell anyone," said the pandit's wife.
"My lips are sealed," said the woman. But she was longing to tell someone and when she saw the dhobi's wife going past, called her in and told her the whole story. Only, she made it sound as if a whole heron had come out of the pandit's mouth.
"Never have I heard of such a thing," said the dhobi's wife, her eyes popping with excitement, "and he being a vegetarian and all that, but one can never tell..."
She went away promising not to tell anyone but on the way she met her friend and the whole story sort of tumbled out of her mouth. Perhaps in her excitement she said 'herons' instead of 'heron' or perhaps her friend just imagined she had said herons but when she told her husband the story sometime later, she was emphatic that a whole flock of herons had come out of the pandit's mouth.
And as the story spread "herons" became "herons and other birds" and then "hundreds of birds of all shapes and sizes".
By evening the whole village and several other neighbouring villages had heard the story and people began to arrive in droves at the pandit's house to witness the miraculous happenings there.
The pandit steadfastly denied that any bird had come out of his mouth but nobody would believe him and everybody begged him to demonstrate his wonderful power of producing birds from his mouth.
Finally in exasperation, he asked them all to sit in front of his house and when they had done so ran out of the back and hid in the jungle where he remained several days till the excitement had died down and the people had realised that the news was false...
Happy Saturday, my lovelies! Despite forecasts to the contrary, I woke up this morning to a disappointingly snow-free landscape. To soothe my sadness, I've made a giant pot of coffee, put a little Felicity on the DVD player (Whatever; I know you have guilty pleasures, too!) and am ready to share some tidbits with you.
Speaking of coffee, my first pick this week is a super-cool Etsy shop (Brookish) selling mugs decorated with literary sayings. Sounds corny, I know, but the sayings are written in a gorgeous-but-still-only-dashed-off way, and Jane Austen abounds. And you know (or maybe you didn't but now you do) how I feel about Jane Austen: she is balm for my soul, as coffee is balm for my...well, soul. So the two belong together, truly.
I'm coming across as a bit of an Anglophile (or at least UK-phile) today, but I don't care. Next up is the work of illustrator Lehel Kovaco, featured on the lovely blog Ink & Wit. I'm particularly taken with the depiction of Edinburgh. And I love how the illustrations look like they've been sketched in a splayed-out Moleskine travel notebook - nothing beats traveling with Moleskine.
Finally, some seriously adorable (and slightly nerdy) jewelry. I love these mid-century chair charm necklaces, which I discovered through the blog Design Milk. I think I need one, right now. If I had to choose, I'd go for the bent plywood Eames. I think. Which one would you pick?
Lenny Mendonca, a director in McKinsey’s San Francisco office, interviewed Prith Banerjee, director of HP Labs. Mr. Banerjee discusses how he has tried to align long-range innovation projects with the current business plans and vision of the company. He also talks about the value of localizing research talent, the importance of measuring innovation, and the evolving role of corporate research labs.
Watch these videos to experience amazing stuff created by Microsoft. A whole new gaming experience. I am awaiting now to have it available soon :-)
A few Fridays ago, , I had dinner with two of my oldest friends. Lisa, Keith and I met in college doing what is probably the nerdiest thing I do: musical theatre. Oh yes, my friends. Singing, dancing, jazz hands.
Lisa lives in Englewood, just over the George Washington Bridge, so I see her fairly often. But Keith's been living in Philadelphia for a few years and is spending just a few weeks here in New York. Therefore, dinner was in order. We decided to meet up in the West Village at the new-ish Joseph Leonard, described by its owner as a "bar with food" and named for his two grandfathers.
The bar, a right angle set in the middle of the small room, is indeed the heart of the enterprise, where the two mixologists are a constant whirl or shaking and stirring. All that activity turns out some delicious drinks, including one of the best Manhattans I've ever had. Lisa's Saint-Germain and gin concoction was pretty good, too, though I'd have served it up instead of on the rocks. We had a good amount of time to savor our drinks; Joseph Leonard doesn't take reservations, so we spent our 20 minutes of waiting time sipping peacefully in a corner of the dining room.
We sat down at a table set with red checkered napkins, sturdy silverware and a mason jar full of cornichons. Keith, a lover of pickles, was very pleased at this last development. The menu skews toward haute barnyard, with lots of farmer's market veggies (carrots, brussels sprouts and turnips all made the list) on display. We ended up ordering a wide variety of dishes; I went for the friseé aux lardons salad, a steak tartare special and a side of brussels sprouts.
The frisée salad arrived topped with fresh tarragon - something I'd never seen before - and accompanied by a soft-fried egg perched atop a lightly toasted crouton. The egg was creamy and slipped softly down my throat. The salad itself was lovely, dressed in a red wine vinaigrette and taking a pleasantly herbal note from the tarragon. While it wasn't the best frisée aux lardons I've ever had, it was darn satisfying.
Lisa ordered the glazed carrots, which came out of the oven looking like something from a Thomas Keller cookbook - with good reason, it seems. The chef (James McDuffy) used to work for Keller at Bouchon Bakery. Perfectly turned and tossed with butter and chives, the carrots (and turnips) were sweet, tender and delicious.
My steak tartare - a special that really should go on the permanent menu - didn't photograph well, but it was absolutely delicious. The meat was finely chopped, mixed with a healthy amount of shallots, capers and mustard and topped with a poached egg. Though the disc of tartare was surrounded by more than enough toasts to go around, I ended up eating each of my bites with the prototypically American onion rings (thick and beer-battered specimens) that sat alongside.
Best of all, though, were the brussels sprouts. The leaves were separated from the cores, roasted till they were black around the edges, and tossed with copious amounts of butter. Topped off with a squeeze of Sriracha and a healthy pinch of salt, they were like green leaves of crack. None of the three of us could get enough.
(It's also worth noting that the service at Joseph Leonard was fantastic - attentive and friendly, enthusiastic (I love when I can tell that the staff adore the food at a restaurant.), and just plain sweet. The staff did a fair job of corralling an increasingly obnoxious crowd, and were happy to help me extract our coats from underneath an outerwear mountain.)
Finally, dessert. Keith and Lisa were partial to the chocolate pot de creme with cherries, I fell for the caramel pudding topped with whipped cream and cookie crumbs. Yes, cookie crumbs. Oh. My. Gah. This was just too delicious. The pudding was creamy and rich and had a mellow kind of sweetness that I found really satisfying. The cookie crumbs took the whole thing over the top into full-on retro nostalgia land, a place I'm enjoying these days.
Joseph Leonard
170 Waverly Place (At Christopher Street)
646.429.8383
Enterprise 2.0 champions aren't where you think they are. Many managers these days are trying to identify members of their organization who will embrace social media tools and practices within their organization. That's a healthy d evelopment for Enterprise 2.0....
Just got to know that the term Smoke Testing got its use in IT when a piece of hardware was continuously plugged into electricity and it passed if the circuit did not burn and no smoke was produced!! Interesting, isn't it?
Few more notes from the Agile Testing book:
1) Developing a project dialect or team jargon is one of the key things tester should do. What it means is developing a common ground for communication or rather developing and facilitating a common language in which customer and team can communicate with and understand each other.
2) Agile teams are very high on expectations form return on their investments. It makes sense. Agile works in short iterations, a thing like a tool or a concept or technology, if after implementation does not return results quickly, it is left and team moves on. This is can not be considered negative when you are delivering a production ready software within two weeks.
3) Many of the agile development practices are synergistic, means they wont work as well in isolation. If they are implemented in isolation, they might not provide the benefit teams are looking for.diverse viewpoints help but its necessary for everyone to head in the same direction.
4) Another good sentence, "You need courage to allow others to make mistakes because that is the only way to learn the lesson."
BTW, ever since I reported on my blog about this book, I haven't read a single chapter!! So it might be some time before this free flow supply of cool agile advice resumes back ;)
I've blogged about my favorite cauliflower recipe before (roasted cauliflower with lemon and honey), but given that cauliflower is still one of the (very few) vegetables in season here in the northeast, I thought it bore repeating.
I also thought that - since I'm boring you by showing you photos of the same salad - I'd share a few of my other favorite cauliflower recipes with you. Check out the list below for inspiration, and find all kinds of new ways to enjoy winter's albino goodness.
? Cauliflower pickles (Gourmet Magazine)
? Cauliflower gratin (Bouchon Cookbook)
? Cauliflower barley risotto (Gourmet Magazine)
? Cauliflower with almonds, raisins and capers (Smitten Kitchen)
? Roasted curried cauliflower (Epicurious)
Eat up, and enjoy!
There are very few things I love more than browned butter. Cucumbers are up there, as are tomatoes, lamb and Vietnamese food. But browned butter is the top ten, for sure.
It's no surprise, then, that I fell in love with Lorna's browned butter pound cake the second I added the cooled butter to the two sugars. The smell of butter and sugar being creamed into one fluffy mass is always delightful; when it's browned butter that's involved, the aroma is downright intoxicating.
This cake is as easy as can be to make; its prep time is even folded into the recipe, since you can gather and measure your ingredients while the browned butter cools in the freezer. It bakes up beautifully, the crumb a deep golden color specked with brown, and the crust a crunchy, dark brown shell. It's so dense and fine that you don't even need a serrated knife to cut it, and the smell of the whole thing will linger in the house for at least 24 hours.
This is a dense cake, one that takes well to ice cream or crème fraiche. Last night, Miriam and I ate our slices topped with her homemade ginger whiskey ice cream, a most perfect combination. Lorna herself recommends crème fraiche and toasted pistachios. It's also fabulous eaten standing up while slurping your morning coffee. It may not be dignified, but that hardly matters, does it?
I am not the only one, it seems, with Paris on the brain.
Yesterday, Decor8, one of my favorite shelter blogs, posted a reader question that went like this: "Hi Holly, I am going to Paris in March with my husbands band, Montage Populaire, do you or any of your readers know of places to go/shop/eat/visit which wouldn’t be in the tourist guides?"
Obviously, I immediately chimed in with a vote for Camille (Naturellement!), and was thrilled to see the other fantastic suggestions from Holly's creative, inspiring readers. I can't wait to try them out for myself - and since I'm already getting nibbles on my home exchange ad (more on this soon), it seems I won't have to wait too long!
Fine, i know i am a little late. It took me some time to get my new laptop and a new internet connection and so instead of 1Jan2010, my first blogpost for this year is on 1Feb2010. Does it matter? I dont think so..I am probably going to blabber the same things anyway ;-)
Mike Cohn, yes The Mike Cohn, personally recommended this book to me "Agile Testing" by Lisa Crispon and Janet Gregory. I have been reading it from past few days and here is a list of couple of notes I had made for myself from the book:
1) Agile testing means using each team member's skill to improve quality. When Agile says quality is a whole team's responsibility, it doesn't mean that testers are not necessary, but the approach here is to make testing everyone's responsibility. It should never be considered as a means to lessen the team size by avoiding to have a specialist tester.
2) Agile is not all about speed, but its all about quality. A team that delivers on time but not delivers on quality, is not an agile team at all..
3) Being an agile tester is not at all easy. It requires one to know something of everything an agile team might use. So an agile tester should know how to translate business needs into application requirements, should participate with developers to achieve maximum amount of unit test coverage, should be able to automate the regression tests, and should be a good if not excellent at exploratory testing. The most important trait is the willingness to learn.
4) Testers tend to be customer focused. This is a very minute thing to be balanced within an agile team as though testers work with other members, they always or most of the time represent customer's point of view. This is a delicate position to be in and if not handled properly, can be a little annoying for the team and may effect the coherence of the team.
5) A very nice sentence that I came to read in the book goes, "Successful projects are a result of good people allowed to do good work"
will keep sharing more as I read on ;)
I'm a sucker for a change in season. I love the first crisp evenings of autumn, the puffy breezes of early spring, and even the first day or two of summer's sweltering heat. And I truly love the frigid cold of winter. I love bundling up in my coat and scarf, pulling on my gloves, and heading out into a world whose edges seem somehow more sharply defined than in warmer weather.
But when winter's doldrums descend, I start to miss summer's bounty in earnest. I crave tomatoes and corn and berries; I yearn for bunches of peonies and dahlias, and I dream of ice cream and cold coffee. And while I've found frozen corn to be a decent, craving-sating substitute for its fresh counterpart, I've never been a huge fan of canned tomatoes. They've always seemed a bit cloying to me, somehow lacking in the earthy, muddy flavor that makes their fresh brethren so delicious.
Finally, though, I think I've found a reason to keep canned tomatoes in the pantry. Thanks to Smitten Kitchen's post about Marcela Hazan's simple, winter-friendly tomato sauce, I'm now prepared to invest in multiple cans of San Marzano tomatoes.
The recipe is the epitome of ease; you open the can of tomatoes and dump them into a three-quart pot along with the better part of a stick of butter and a halved onion. Turn the heat to medium, simmer for about an hour - and you're done. You should stir it every once in a while, and don't forget to use the back of your spoon to mush the increasingly tender tomatoes against the side - it's what passes for pureeing in this recipe.
I disagree with Deb on one point - I think the sauce profits a good deal from a modest sprinkling of Parmesan cheese; it adds to the creaminess already going on, and adds a funky note to things that really gets the party started.
Tomato Sauce with Butter and Onions
Adapted from Marcela Hazan’s Essentials of Italian Cooking
28 ounces whole peeled tomatoes from a can (San Marzano are the best!)
5 tablespoons unsalted butter
1 medium-sized yellow onion, peeled and halved
Salt to taste
Put the tomatoes, onion and butter in a heavy, 3-quart saucepan over medium heat. Bring the sauce to a simmer then lower the heat to keep the sauce at a slow, steady simmer for 45 minutes to an hour, or until drops of fat float free of the tomatoes.
Stir occasionally, crushing the tomatoes against the side of the pot with a wooden spoon. Remove from heat, discard the onion, add salt to taste and keep warm while you prepare your pasta.
Serves four.In one of my previous projects, I worked on ruby script to read the emails from mail-in database and process the emails as per the business requirement. In ruby, we have a libray called Net::POP3 which provides functionality for retrieving email via POP3. I went ahead with a thought of converting this to a gem.
The emails retrieved from mail-in database are stored in some sort of data structure to process further. The utility makes use of Net::POP3 and TMail libraries and provides with some handy methods such as 'retrieve emails' as array of hashes. The hash has email's from,to,cc,bcc,subject,body fields. Email body with attachment has not been considered for simplicity.
It also provides 'delete_emails(unique_email_ids=[])' method which takes array of unique email ids (retrieved with pop email unique_id) as parameter and deletes those.
Install :-
gem install email_pop_reader
(It has been pushed to http://gemcutter.org) - http://gemcutter.org/gems/email_pop_reader
OR
Download the gem file from http://github.com/NiranjanSarade/email-pop-reader.git/
gem install email_pop_reader-0.0.1.gem