Logo

The (food) moments that shaped my decade.

8 months ago | Megan Blocker: Queenie Takes Manhattan

The aughts are coming to a close tonight, and I've decided to join the frenzy of lists appearing across the interwebs. Mine is a fairly personal, navel-gazing sort of list; instead of naming the biggest events in the food world in general, I've decided to focus on the most significant moments of my food- and drink-centered life over the last decade.

I turned 21 in 2000 and graduated from college in 2001, so the aughts have encompassed my early adulthood, my twenties. They're the years I spent finding my home (Hello, New York!), my career (user experience research and design, for now) and my taste (Sriracha, bacon and Vietnamese food, FTW!). In fact, it's pretty darn hard to distill the most important moments of my eating life down to a list of just ten top ones, so please forgive me for any that seem like I'm cheating by, say, essentially granting a tie to every single moment of my 2006 trip to Europe. Please?

All right, here goes!

Number 10: My first taste of Far Niente's Dolce.
As you all know, I am a huge fan of dessert wines both funky and sweet, and particularly of those that combine the two. Before I tried Sauternes or Banyuls, though, I drank Dolce - which is America's most delicious answer to the former. I still remember my first sip, which took place one boozy Saturday night in 2004, at Ouest with Nick and Louisa, when Nick ordered a 375 ml bottle for the three of us to share. I'd never tasted anything quite like it - syrupy, but not sickly, and infinitely musky and complex. I'd go on to tour the winery in 2006, where my mom practically had to restrain me from buying a whole case.

Number 9: Dinner at Alinea.
This one just made it in under the wire, happening as it did in November 2009. My first (and hopefully not last) dinner at Alinea was predictably delicious, and - despite the giant spoiler effect of following Grant Achatz's restaurant for years - surprising and exciting. It was a meal unlike any other I've ever eaten, one where craftsmanship was present in every bite and whimsy never once trumped flavor. A truly incredible experience.
Number 8: Discovering the wonder of Vietnamese food.
Gradually, over the last eight years, my Asian cuisine of choice has slowly shifted from Chinese, to Thai, and finally alighted on Vietnamese. The original Asian fusion, Vietnamese food combines Asian ingredients and flavors with French technique, and has given us such culinary delights as pho (a noodle soup like no other) and the currently super-trendy banh mi, a sandwich full of terrine, herbs, pickles and pate, served on that most French of breads, the baguette. It's slightly funky, thanks to the ever-present fish sauce, but also refined, thanks to a balance of flavors and textures. And I just can't get enough.

Number 7: Making banh mi at home.
Speaking of Vietnamese food - but, seriously, folks...I'm including this past summer's banh mi-fest not only because the results were delicious, but because I think it marks a culmination of the collaborative cooking and exploration Louisa and I have done together. We push one another to try new and different techniques and ingredients, using our time together each summer to tackle a couple of new projects. These banh mi, for which we made everything from scratch - even grinding our own meat - save the bread, are our proudest achievement to date. A repeat performance is planned, and we'll be upping the ante by baking our own baguettes.

Number 6: Ditching vodka for booze with actual flavor.
Just as there's a place for water in the pantheon of great beverages, there's one for vodka. That place, however, is not in a cocktail, and certainly not in a martini. If there's one thing for which my boozehound side is most grateful to the aughts, it's the cocktail craze, and, in particular, the resurgence of brown spirits and gin. Gin is just...better. As is bourbon. And dark rum. And...everything. Vodka is great in a Russian restaurant, served ice cold alongside caviar, but that's about it. I know some of you disagree, and that's your perogative. But, you're, um, wrong.

Number 5: Discovering Thomas Keller.
Obviously, I didn't discover Chef Keller, but he didn't mean much to me before, oh, 2003 or 2004, at which point I became obsessed with eating in at least one of his restaurants. Since then, I've cooked from three of his cookbooks (Bouchon, The French Laundry and Ad Hoc), eaten at three of his restaurants (Per Se, Bouchon and Bouchon Bakery) and become a devoted fan. His mashup of American ingredients and know-how with classic French technique may no longer be revolutionary, but it's still revelatory: I dare you not to fall in love with Bouchon's entire menu. Go ahead - in fact, I double-dog dare you.

Number 4: Joining eGullet.
I joined the internet food fray in 2005, when I became a member (and, eventually, a staffer) of eGullet. For a time, it was my absolutely favorite place on the web. Full of interesting, smart people who knew a ton about home cooking and the restaurant world, it was where I first stretched my food-loving wings, and, in particular, my food-writing muscles. It's where I learned about Sriracha and how to make puff pastry. It's where I learned how to take decent photographs of food. And, most significantly, the two week-long foodblogs I did there in 2006 and 2007 gave me the confidence I needed to start my own blog, which is coming up on its (gasp) third anniversary.

Number 3: Making my first mayonnaise.
I read Amanda Hesser's memoir Cooking For Mr. Latte when it first came out in 2003. It was a sweet book, but I was more interested in the food than in the love story, and was determined to become as sophisticated an epicurean as Ms. Hesser herself. Thus inspired, I made my first mayonnaise from her recipe, and have been whisking ever since. It marked the first time I ventured into truly classical, technique-focused cooking, and the deliciousness of homemade mayonnaise convinced me that (most) shortcuts are, indeed, for suckers.

2. My trip to Europe with Louisa.
Louisa and I spent two weeks in Prague, Strasbourg, Champagne and Paris in 2006. The trip cemented us as best friends, thanks in great part to the enormous amount of bonding we did over food and drink. Whether it was duck in a Prague pub, flutes of Champagne in a Reims tasting room, or steak tartare in Paris, the food we ate and the sights we saw created a common set of memories and experiences that will be ours, alone, forever. It also happens that the trip included two of my top meals of all time (at Chez Yvonne and Camille in Strasbourg and Paris, respectively), the best eclair in history, and the most satisfying doner kebab ever. All in all, two weeks that will live in memory - actually, in perpetuity, thanks to the internet.

1. Shopping at the Union Square Greenmarket.
Blame it on Dan Barber, Michael Pollan - whomever. For a myriad of reasons, I started shopping seasonally and locally a few years ago, and have no plans to go back. Oh, sure, I still buy frozen vegetables, and I do buy cucumbers out of season - not to mention the occasional flown-in fish. But, thanks to New York City's incredible Greenmarket network, I've been able to do a remarkable thing: support local businesses, reduce my carbon footprint, and make super food - all at the same time. Nothing's changed my eating habits more drastically in the last decade than my effort to shop as much as possible in Union Square (or at one of the other Greenmarket outposts around the city), and, for that I am grateful.

So, folks - if you've managed to stick it out this long - what were the formative moments of the aughts for you? Share in the comments - and Happy New Year!

Bring on the pork (and the pickles, and the sprouts)!

8 months ago | Megan Blocker: Queenie Takes Manhattan

As I mentioned yesterday, we had quite a crowd here in New York for the holiday last week. Family, friends - you name it, they came. For dinner on the Wednesday before Christmas Eve, I'd made us a reservation for Momofuku Ssäm Bar's famous Bo Ssäm dinner. The Bo Ssäm is the only way to make a reservation ahead of time (much like the fried chicken dinner at Momofuku Noodle Bar), and is quite the event: a Berkshire pork shoulder, smothered in sugar and spices and slow-roasted, a dozen raw oysters, rice, kimchi, condiments, and lettuce in which to wrap it all up.

But we'd have be remiss if we didn't sample some of the other menu items, wouldn't we? (The answer is, yes, we would.) In order to prevent such a situation, we provisioned ourselves with some tasty items from the regular menu. First, and most deliciously, the fried brussels sprouts. Deep fried and dressed in a fish sauce vinaigrette, the sprouts are then topped with chili-dusted crisped rice. Crispy, salty, spicy heaven. We ordered two bowlfuls, and I ate mine with Sriracha.

Next up, another old favorite, and a particular obsession of my little brother, Jeremy. The steamed pork buns. I love these buns (though I'm now slightly more in love with the mushroom buns at Noodle Bar), but not without - you guessed it - a healthy glug of my beloved Sriracha. The spiciness brings the crisp, lightly-pickled cucumbers and fatty pork belly into stark, perfect relief. Without it, the buns are a bit flat for my taste.

Bread and butter is an obvious must, and Momofuku's version, predictably, takes things way over the top. Warm, crackly baguette compliments rich, creamy butter (topped with musky black pepper) and whipped lardo (cured, rendered pig fat, people) (topped with red pepper). The butter is perfect as-is, but the lardo is brought to life by a sprinkle of salt.

After two orders of seasonal pickles (so popular they didn't even make it to my camera) and several gorgeous cocktails poured by the incomparable Don Lee (The Reverend Palmer, made with tea-infused bourbon, lemon syrup and bitters, is my new obsession), it was time for the main event.

One by one, the waiters set the components of the Bo Ssäm down on the table. First up, the dozen oysters, which were destined to be tucked inside our little lettuce wraps. Next came the lettuce itself, along with the four different condiments: kimchi, pureed kimchi, barbecue sauce and ginger scallion sauce (which also made an appearance at our fried chicken dinner).

Then, alongside two bowls of steamed white rice (nice and sticky) came the big piece of meat. There's no other way to describe it, really - it's a giant, gorgeous, hunk of pork. Crispy and sweet and fatty, it's tender all the way through and covered with a delicious, chewy skin. It is, in a word, fantastic in its pure, indulgent porkiness.

My favorite combination was lettuce, rice, a bit of kimchi, some barbecue sauce, and a squeeze of Sriracha. Can't forget the Sriracha.

After stuffing ourselves silly (between the ten of us, we finished about 7/8 of the shoulder), we turned down the offer of dessert, but accepted a round of eggnog. Light and fluffy (for eggnog, of course) and just slightly boozy, it was a great way to end what was, no doubt, the most over-the-top meal of the week. Sigh. Bo Ssäm, how I do love thee.

A festive (if delayed) repast.

8 months ago | Megan Blocker: Queenie Takes Manhattan

When you have a group of 10 for Christmas, there's only so much cooking you can handle. That's why, for dinner on Christmas Eve, my motley crew of family and friends headed to one of my favorite, most reliable spots: Ouest.

We arrived a bit early and ordered a round of drinks. Sadly, the bar was out of the brown butter-infused bourbon I'd so enjoyed a couple of weeks ago, so I ordered a plain old Manhattan, straight up. Nick sprang for the Oue-side, a new sidecar variation that turned out to be a bit too sweet - sad, too as it's so awfully pretty (evidence above).

Our table for 10 wasn't ready until almost forty-five minutes after our reservation time, which was a problem mostly because we had a church service to make later in the evening. However, despite this snafu, I have to commend Ouest's staff for whisking us through dinner without sacrificing quality of food or service - and for buying our wine and desserts. They definitely made up for the issue.

The most popular first course at the table (I think three of us ordered it) was a new menu item. It's a bone marrow dish, but one unlike any I've had before. The bone marrow was removed from the bone and seared, which turned it into a crisped nugget of gooey goodness, and the bone was filled with a creamy, sweet short rib and onion marmalade. While I still see a place for the traditional bone marrow and parsley combo, I have to say that this version was absolutely delicious.

Jeremy ordered one of my long-time favorites, a crispy duck egg served atop a few razor-thin slices of smoked duck breast, some greens and a healthy dose of aioli. Crunchy, meaty, smoky and garlicky, it's a dish that simultaneously satisfies multiple cravings.

For my main, I went with another old standby - the squab with duck liver risotto. It it always fantastic, and Christmas Eve was no exception. The squab was perfectly cooked to a tender medium-rare, and the risotto was creamy but retained that essential bite - after all, it's not porridge, people!

Many folks stayed for dessert, but I and a few others hopped up and out to make it to church on time (I go twice a year, so it doesn't do to walk in late, you know?). Marrow, squab and Christmas carols - what more could a girl want?

Back to basics.

8 months ago | Megan Blocker: Queenie Takes Manhattan

After almost two weeks of nonstop cooking, hostessing, and general merriment, this past Sunday was a true day of rest for me. With nowhere to go and nothing to do (until a 4:10 showing of Up In The Air, which I saw with my brother, and which we both really enjoyed) - it was time for a little cooking and a little relaxation.

Nothing says comfort food to me like pasta, and since I happened to have some saffron fettucine lying around (from an aborted attempt at pasta with beets during one of those bouts of hostessing), I decided to whip up a big bowl of comfort. I chopped some bacon, onion and garlic, defrosted a handful of frozen peas and drained a carton of heavy cream of its last dregs. A sprinkling of parmesan and a few grinds of pepper later, I had a perfect plate of pasta.

I ate it on the couch, in front of the television. I may or may not have geeked out entirely by watching Doctor Who. I'll never tell.

Pasta with Peas, Bacon and Cream

1/4 lb. fresh fettucine (plain old spaghetti from a box would work, too)
1/4 c. bacon, sliced into 1/4 inch batons
1 tsp. olive oil
1/4 of a white onion, thinly sliced
1 clove garlic, thinly sliced
1/3 cup frozen peas, defrosted
1/4 c. chives, finely chopped
1 tbs. heavy cream
1/8 c. finely grated Parmesan cheese
Salt and pepper

In a large pot of boiling, salted water, cook the pasta to al dente. Drain and set aside.

Place a medium skillet over high heat until a drop of water sizzles when dropped on its surface. Reduce the heat to medium-high and add the bacon, cooking until crisp and until most of the fat is rendered. Remove the bacon with a slotted spoon and set aside. Pour all but a light coating of the bacon fat off.

Add the olive oil to the pan and saute the onions (with a pinch of salt) for a few minutes, until they are slightly softened and beginning to turn a little golden. Add the garlic and saute for a few minutes more, until fragrant. Add the peas and half the chives, a bit more salt, and a few grinds of black pepper. Saute for a few minutes, until peas are warmed through and garlic is golden.

Add the pasta to the pan along with the cream, and combine with the pea mixture. Keep on the heat a few minutes to cook everything together, then transfer to a plate or shallow bowl. Top with Parmesan cheese and the remaining chives, adjust seasonings and eat!

Serves one, generously.

How does the complex-form-examples sample app work?

8 months ago | Pat Shaughnessy: Pat Shaughnessy - Home

The complex-form-examples sample application written by Ryan Bates and then updated by Eloy Duran and many others is the standard example of how to implement a complex form in Rails. It shows how you can create and update more than one model using the same form. Last month, I wrote about how to create scaffolding for a complex form; using my View Mapper gem you can create a simplified version of the sample app right inside your application for your models.

Today I’d like to take some time to explain how my simplified version of the complex form actually works – the key to using scaffolding in your Rails application is understanding how it works so you can eventually modify and adapt it for you needs, and discard the code you don’t need. However, since this sample application is fairly complex I decided it would be more interesting and fun to follow a single code path through the app in a series of small steps, seeing how each small piece works in detail. To do this, I wrote a series of short blog pages or slides; to see it, click the “Follow Code Path” link… once you’re on the first page you’ll see links to move forward and backward through the slides.

Follow Code Path

Let me know here if you have any feedback on either the content or the style of the code path pages since they are just hard coded HTML for now and not part of my blog. Thanks!

Formatting rules for UseModWiki

8 months ago | Niranjan Sarade: InLoveWithNature

Here are some formatting rules and how to use guide for UseModWiki :-

- Creating a new page
Every Wiki page has an edit button. Click on the edit button and type a wiki word. A wiki word starts with a capital letter and has at least one more capital letter in it. Between the capitals there must be lower case letters. There cannot be two capitals in a row.

e.g. MyWord will bw displayed as MyWord?
Now click on the ? to go to the wiki page

- See the Recent Changes
Type in the URL as http://localhost/cgi-bin/wiki.pl?RecentChanges

The Recent Changes page shows the dates on which the individual pages have been updated.

- Editing Content
Click the edit button on a wiki page. Input the contents in the text field and press the save button.

- Create Links
Page Link: wiki words are treated as links to the corresponding wiki pages.

External Link : use the corresponding URL e.g. http://c2.com

- Search content
Enter the key word that needs to be searched in the text field labelled search at the end of the wiki page.

- Creating Inter Wiki
Our wiki can refer to pages in other Wikis. Edit intermap file in cgi-bin folder and add the entry for the mapping. It contains the mapping for the key word and the corresp URL.

e.g.: UseMod? is the key word and the URL is http://www.usemod.com/cgi-bin/wiki.pl?. Now if we want to refer to a page WhatIsaWiki? in the wiki http://www.usemod.com/cgi-bin/wiki.pl, we just need to refer it as follows: UseMod:WhatIsaWiki

- Having a non-wiki word as a link
[http://c2.com/ppr/about/author/martin.html Martin Fowler] will be displayed as [Martin Fowler]

- Sub Pages
The [SubPage] - [http://www.usemod.com/cgi-bin/wiki.pl?SubPage SubPage] idea allows every main page to contain its own wiki universe of subpages. The subpages can be used to help refactor a large page without the problems /LongPrefixBeforeEachPage?.

It's a hat AND a drink.

8 months ago | Megan Blocker: Queenie Takes Manhattan

I'm always up for a new bourbon cocktail, so when Nick and Louisa suggested we try one at their hotel last week, who was I to refuse? They were staying at The Surrey, which has this nifty in-room cocktail service where you order a bottle of booze and in-room dining provides the cocktail's other ingredients. So cool.

We decided to try the Brown Derby, a bourbon cocktail named for the restaurant where it was invented, the legendary Hollywood eatery. Made with grapefruit, bourbon and honey, it seemed an intriguing blend of sour and sweet, a sort of pucker-inducing twist on a bourbon sidecar.

We were right! The cocktail is a boozy delight, garnished with a grapefruit twist for an extra kick of bitter-sour-citrus bite and fairly alcohol-forward, thanks to, well, all that bourbon. A perfect winter cocktail, and with grapefruits coming into season shortly, I plan to try this one at home - soon.

Brown Derby

2 1/2 oz. bourbon
1 oz. grapefruit juice
1/2 oz. honey
Grapefruit twist (a 1-inch section of peel, minus the bitter pith)

Place all ingredients in a cocktail shaker half-filled with ice. Shake gently until condensation appears on the side of the shaker. Strain into a chilled cocktail glass, and serve immediately.

Serves one.

Easy + impressive = entertaining perfection.

8 months ago | Megan Blocker: Queenie Takes Manhattan

I love gravlax. I love its slightly oily sweetness, its silky texture, its gloriously hot pink color. I also love how incredibly easy it is to prepare, and how easily it impresses those to whom you serve it. When you think about it, there is something truly special about any foodstuff cured at home - but making gravlax is a heck of a lot easier than making your own bacon.

See, this is all you have to do. This. Is. It. You take a piece of skin-on salmon fillet, rub it all over with sugar and salt, cover it in some more of the same (plus some peppercorns and dill), and let it sit for a couple days. That. Is. All.

Seriously.

Well, you do have to make the sauce to serve alongside, it's true. Sure, you could serve it plain, or with sour cream, but why? This espresso mustard sauce, adapted from a recipe by Aquavit's chef, Marcus Samuelsson, is so good that you'll want to eat it on everything (It's particularly good on warm potatoes, especially when you add a little dill.).

Oh, and - you still have time to make this for your New Year's Eve cocktail party (or New Year's Day brunch). Just sayin'.

Home-Cured Gravlax with Espresso-Mustard Sauce
Adapted from Marcus Samuelsson

For the gravlax:
2 c. granulated sugar
1 c. kosher salt
2 tbs. cracked peppercorns (black or white)
2 lbs. skin-on salmon fillet, in one or two pieces
1 bunch fresh dill

For the sauce:
2 tbs. Dijon mustard
1 tbs. honey
1 tsp. sugar
1 tbs. instant espresso powder
1 1/2 tbs. white wine vinegar
3/4 c. grapeseed or canola oil
Salt and freshly ground black pepper

To prepare the gravlax:
Combine the sugar, salt and peppercorns in a small bowl. Place the salmon in a shallow, non-reactive (glass or ceramic) dish large enough to hold the fish in one layer. Rub the fish all over with the sugar and salt mixture, then lay flat in the dish. Cover with the rest of the salt and sugar, then top with dill. Cover with plastic wrap and set in a cool place to cure for 6 hours. After 6 hours, place the dish in the refrigerator to cure for another 24-36 hours.

When ready to serve, slice off the skin and thinly slice the fillet across the grain. Serve with crackers or thinly-sliced bread and the espresso-mustard sauce.

To prepare the sauce:
Combine the mustard, honey, sugar, espresso powder and vinegar in the bowl of a blender or mini-prep. With the blender on, add the oil in a thin stream until combined. Mixture should be thick and creamy. (You can also do this with a whisk; use the technique described here for mayonnaise.) Taste and adjust for seasoning. Serve alongside the gravlax.

Serves 6-8 as an appetizer.

Nominate Queenie for a Homie - if you don't mind...

8 months ago | Megan Blocker: Queenie Takes Manhattan

It's time for Apartment Therapy's annual Homie Awards, a series of awards recognizing shelter blogs, including design & cooking. If you're so inclined, it would be lovely if you could pop over and nominate Queenie Takes Manhattan in the Home Cooking category - and don't forget to vote for your other favorites while you're there!

You can nominate Queenie here (just click on the little "+add" button in the house icon), and see all other nominees right here.

Go forth and nominate - and thank you!

Are you Wiki ?

8 months ago | Niranjan Sarade: InLoveWithNature

I gave a try to UseModWiki (an implementation of the original Wiki concept created by Ward Cunningham) and found it simply superb! We can use this internally across the teams for sharing information :-)

The name wiki comes from the Hawaiian word wiki wiki, which means quick/fast. There is a famous quote by Glen Wilber: "Knowledge grows faster than the way to organize it !". Wiki does provide an efficient and simpler way to organize and spread the ever growing knowledge across the entire team. It enables easy collaboration and sharing of information across the network.

Why wiki ?
- Similarity to HTML
- Instant Feedback Mechanism
- Accessible anywhere
- Easy Searching
- Easy to learn and use
- Open Source
- Tracking of pages

Installation steps on Windows :-

- Install active perl (http://www.activestate.com/activeperl/)
- Install Apache Web Server (http://httpd.apache.org/download.cgi)
- Extract usemod10 (http://www.usemod.com/wikicode/usemod-1.0.5.zip.)
- Copy wiki.gif from extracted usemod directory to apache htdocs folder.
- Copy wiki.pl from extracted usemod directory to apache cgi-bin folder.
- Edit the first line of wiki.pl so that it shows the right path to perl.exe. (say c:/perl/bin/perl)
- Edit wiki.pl to change the value of $DataDir so that it points to "wikidb" folder (say d:\usemodwiki\wikidb )
- Edit wiki.pl to change the value of $FullUrl so that it points to 'http://localhost/cgi-bin/wiki.pl'
- Start the Apache server.
- Open a browser and type in the url : http://machine-name/cgi-bin/wiki.pl where machine-name refers to the name of your local machine.
e.g. http://localhost/cgi-bin/wiki.pl

Once installed, the wiki is accessible across all machines in the same domain.

This is the simple page that I created on my local machine :-



And clicking on 'RailsTips' link navigates to other page that I created as :-



I will be writing more on formatting rules in my upcoming blog ...

Enjoy being wiki ... :-)

Gitanjali - Poor Heart

8 months ago | Niranjan Sarade: InLoveWithNature

" I had gone a-begging from door to door in the
village path when thy golden chariot appeared in
the distance like a gorgeous dream and I wondered
who was the king of all kings!

My hopes rose high and I thought my evil days
were at an end, and I stood for alms to be
given unasked and for wealth scattered on all sides in the dust.

The chariot stopped where I stood. Thy glance
fell on me and thou camest down with a smile, I felt
that the luck of my life had come at last. Then
of a sudden thou didst hold out thy right hand
and say "Why hast thou to give me?"

Ah, what a kingly jest was it to open thy palm
to a beggar to beg ! I was confused and stood
undecided and then from my wallet I slowly
took out the least little grain of corn and gave it to thee.

But how great my surprise when at the day's
end I emptied my bag on the floor to find a least
little grain of gold among the poor heap. I bitterly
wept and wished that I had had the heart to give
thee my all. "

- Rabindranath Tagore

Merry Christmas!

8 months ago | Megan Blocker: Queenie Takes Manhattan

Merry Christmas, my lovely readers!

I hope that today brings you all kinds of delightful gifts and togetherness, be it family or otherwise. I'll be spending the day with family and friends - a group fairly similar to the one that accompanied me to California to celebrate my 30th birthday, including my best friend, Louisa - and I couldn't be more excited about it. Add to that the fact that I didn't have to travel this year, and I'm practically over the moon.

My mom sent me this shot of my grandparents' Connecticut living room on Christmas morning (I'm guessing it's 1984 or 1985). That there on the left is my first kitchen, which, much like my current version, has no dishwasher. I feel, therefore, that it prepared me well for Manhattan living. Well done, Mom!

What Christmas present do you remember best from years past? And what are you all up to today? Can't wait to hear all about it!

Seven wonders

8 months ago | Niranjan Sarade: InLoveWithNature

A group of students were asked to list what they thought were the present "Seven Wonders of the World." Though there were some disagreements, the following received the most votes:

Egypt's Great Pyramids
Taj Mahal
Grand Canyon
Panama Canal
Empire State Building
St. Peter's Basilica
China's Great Wall

While gathering the votes, the teacher noted that one student had not finished her paper yet. So she asked the girl if she was having trouble with her list. The girl replied, "Yes, a little. I couldn't quite make up my mind because there were so many."

The teacher said, "Well, tell us what you have, and maybe we can help." The girl hesitated, then read, "I think the 'Seven Wonders of the World' are:

to see
to hear
to touch
to taste
to feel
to laugh
and to love."

The room was so quiet you could have heard a pin drop. The things we overlook as simple and ordinary and that we take for granted are truly wondrous!

A gentle reminder -- that the most precious things in life cannot be built by hand or bought by man.

Aw, thanks!

8 months ago | Megan Blocker: Queenie Takes Manhattan

I'm deep in the midst of Christmastide here in New York, and was very excited to see an early Christmas present in my RSS feed this afternoon. The Internet Food Association (a super-cool blog started by a bunch of D.C.-area journalists) chose my photo of Ouest's gougeres for their daily Food Porn pic.

Thanks, guys!

Smörgåsbord!

8 months ago | Megan Blocker: Queenie Takes Manhattan

Louisa and I hosted one hell of a dinner party on Saturday night (full details soon, I promise), at which eight bottles of wine were consumed between six people. (Not to mention the Manhattan apiece enjoyed by me, Nick and Louisa.) Like I said - a hell of a party. So it's no wonder that the three of us were a bit dazed when we gathered at Aquavit for brunch.

The waiter started us off with a glass of Glögg each. Glögg, for those of you who, like me, are among the uninitiated, is not dissimilar to the German mulled wine Glühwein. Marcus Samuelsson, the chef at Aquavit, starts his with citrus and spice-infused vodka and adds red wine, port and sugar. If you think that sounds potent, you'd be right. Wowza. Delicious, but a bit too much for this one post-party.

In addition to the Glögg, Aquavit offers a complimentary cocktail or glass of juice with its brunch, which is a traditional Swedish smörgåsbord - yes, a smörgåsbord! An all-you-can eat, stuff-yourself-with-gravlax-and-pickled-herring-and-meatballs brunch! For my cocktail, I chose the Danish Mary, made with aquavit (instead of vodka) and garnished with a cucumber, lemon wedge and fresh horseradish. Unlike the Glögg, this hit the spot, and the magic of the hair of the dog kicked right in.

First up, fish and eggs! Nick went straight for the table of pickled herring (there are always at least six varieties on offer), but I couldn't face it, and opted instead (clockwise from three o'clock) for a big pile of gravlax, a pond of the unparalleled espresso-mustard sauce, a bit of mushroom omelet, a tomato wedge, potato salad and a cup of langoustine bisque.

Everything was delicious, in particular the potato salad, which has a healthy dose of salty capers, and, like everything else, a bunch of chopped dill. The mushroom omelet also deserves a shout; it was filled with sauteed wild mushrooms (Yay!) and some kind of oozy, delicious, creamy substance (could have been a very mild cheese) that soothed my wounded soul.

The gravlax was, as always, superlative. I cannot get enough of Aquavit's gravlax, and I can't imagine I ever will.

Next up, a cold meats course! As you can see from my plate, I couldn't resist the siren call of the gravlax this round, either. Clockwise from the gravlax, we've got cornichons, another tomato wedge, steamed potatoes, beet salad, bread and, in the center, a slice each of foie gras and country pâté, topped with grainy Swedish mustard.

Aside from the gravlax, my favorites in this round were the country pâté (I think I'm hopelessly doomed by my Eastern European peasant roots to prefer it to foie gras forever and ever.) and the perfectly steamed potatoes. The latter went a looong way to curing my hangover blues.

Finally, the hot meats course - or, as Louisa termed it, "the hot meat injection." (I may pay later for revealing that one.) The one problem with this course is how full of gravlax I typically am by the time I make it here. I suppose I could work on that, but I don't wanna! In any case, here we have (clockwise from top) red cabbage, cucumber salad, Swedish meatballs, Johansson's Temptation (potatoes with cream and anchovy), roasted brussels sprouts and parsnip, cider-mustard rib, venison and Swedish sausages and lingonberry sauce in the middle.

I have a special affection for Aquavit's Swedish meatballs (particularly smorgasbord-style, when I can freely up the proportion of cucumber to meatball), but they were outshone by the awesomeness of the braised ribs. Holy man, were those good. Possibly their fattiness worked some sort of alchemy on my alcohol-soaked body - whatever the reason, I really want them again for dinner, preferably tonight. And the Johansson's Tempation? Also sinfully delicious. (And the fantastic name doesn't hurt, either.)


Finally, dessert. I couldn't even get up from the table to help myself, so Louisa brought me a yeasted, brioche-like roll studded with raisins and glazed with egg and sugar. It was great with coffee, but didn't rock my world like the savory courses. In fact, I have to say that dessert at Aquavit has never rocked my world. For me, it's all about the meatballs.

And the gravlax, of course.

Aquavit
65 East 55th Street
Between Park and Madison
212.307.7311

Patanjal Yogadarshan

8 months ago | Niranjan Sarade: InLoveWithNature

I recently read a very intuitive and scientific book written by Dr. P.V.Vartak -"Patanjal Yog - Vidnyananishtha Nirupan" (Scientific explanation)

Dr. Vartak has explained the Yoga Sutras (threads) in a very scientific language in Marathi with real life examples. He has also established the date of Patanjali as around 5000 BC from reference of Brihadaranyaka Upanishad.

Patnjali was an authority on Yoga and had written way to enlightenment through Yoga (Yoga darshan - vision of Yoga). The Yoga system of Patanjali or the ancient Hindu doctrine of concentration of mind, ways to achieve it, are called Yoga-sutras, of Patanjali.

The Yoga Sutras consist of four chapters (called padas - Pada means 1/4th) :-
1. Samadhi Pada
2. Sadhana Pada
3. Vibhuti Pada
4. Kaivalya Pada

- Samadhi refers to a blissful state where the yogi is absorbed into the One.

- Sadhana is the Sanskrit word for "practice" or "discipline". The author explains karma yoga and ashtaanga yoga.

- Vibhuti is the Sanskrit word for "power" or "manifestation". 'Supra-normal powers' (Sanskrit: siddhi) are acquired by the practice of yoga. e.g. becoming invisible, travelling with a speed much more than a speed of light, reading minds, enter into foreign bodies (parakaya pravesh), etc.

- Kaivalya literally means "isolation", but stands for emancipation, liberation and used interchangeably with moksha (liberation), which is the goal of Yoga.

Here is the link for whoever is interested in reading Patanjal Yogasutras -
http://www.santosha.com/samadhi-pada1.html

But only reading would not help, every one needs to practice this as it is a practical knowledge !

Really great work done by Dr. Vartak ! Hats off to him for bringing this true ancient knoweldge in a very simple and heart touching language !

Want a cake? A really, really tasty cake?

8 months ago | Megan Blocker: Queenie Takes Manhattan

Well, then, you're in luck! Serious Eats is giving away a whole Two Little Red Hens cake this week. If you've read the blog before, you know that I am a big fan of Two Little Red Hens' goodies - I'm even serving their scones for breakfast on Christmas morning.

That's an endorsement if ever there was one, in my opinion - but, in case you're not convinced, have a look at some of my past posts about the Hens and their fabulosity. But don't spend too long dawdling here; much as I'd love you to spend the whole day poking around in my archives, you have to enter the giveaway by noon EST on December 24th to qualify!

Go, go, go!

Display SQL queries in ruby script/console

8 months ago | Niranjan Sarade: InLoveWithNature

Whenever we use ruby script/console during development, we often would like to see the SQL queries instantly that get being generated at the backend. Those queries can be a result of method calls on model, named scope, etc.

We just need to execute the below 2 lines to have this enabled on console.

ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.clear_active_connections!


And now whenever we will interact with ActiveRecord object method calls, the SQL query will get displayed immediately in the console.

e.g.

Snow!

8 months ago | Megan Blocker: Queenie Takes Manhattan

Snow has a way of transforming New York, of softening its edges and making it just a smidge more magical than usual. This weekend's snowstorm was a gorgeous one, leaving heaps and drifts of the white stuff in its wake.

Even midtown is magical when it snows, don't you think?

And nothing says "Christmas" like a tree covered in real, honest-to-goodness snow. Yay!

Dont forget to do your year end personal retro!

8 months ago | Biju Bhaskar: Thoughts on enterprise application development...

Its that time of the year again .... time for delivering year end evaluations. I am almost done with delivering evals,except for one. Plan to complete that by tomorrow. Then I am done for the year.

This is also the right time for each one of us to look back and assess how the year has been professionally and personally for us. I call it the time for personal retro (retrospective).  Obviously enjoy your holidays, but make sure that you find some time to reflect upon your performance as an individual this year ...preferably  across four domains Work/Career, Home/Family, Community/Society, Self:mind, body, spirit (as defined by Dr. Friedman). The year end performance evaluation you received is just one input.

Think about these two questions...
- What went well for you in 2009
- What could have been improved

Also, ask yourself .... have you grown this year,  or has this year helped you in moving toward your long term personal vision. Irrespective of whether your answer being either yes or no .... ask why? Do you think you should change your personal vision based on the new circumstances and/or things you learned?

Doing a retrospective of your performance this year and then prioritizing the areas of improvement, will help you figure out what you should focus on next year.

The newest addition to our family has arrived!

8 months ago | Biju Bhaskar: Thoughts on enterprise application development...

God has blessed us with a new baby boy!

Tarun Bhaskar

Arrived on December 13th,2009 at 4:29 AM
6 pounds and 12 ounces, 20 inches



Queenie's Treasury

8 months ago | Megan Blocker: Queenie Takes Manhattan

The holiday craziness has descended upon me, my friends. I've been cooking up a storm for two days now, getting ready for the dinner party I'm throwing with Louisa tonight. It's going to be quite a feast (if I do say so myself), and I promise full details shortly. In the meantime, here's some Treasury goodness to keep you going.

First, from New York Magazine's annual Reasons To Love New York issue, a look at the best and brightest of the city's soups. Just in time for the bitter cold weather we've been having (and my two weeks off from work). Score! (For those of you not lucky enough to be in New York right now, the magazine's Grub Street blog offers guides to soup in Boston, Philly, Chicago, San Francisco and Los Angeles.)

You all know how obsessed I am with Serious Eats' Food Lab series (mainly, I think, because I could never be patient enough to be so scientific about my food), and this week's edition is no exception. Just in time for Christmas (Does any other holiday scream "big piece o' beef" quite so loudly?), a look at how to make the perfect prime rib.

Finally, from one of my favorite blogs - Cherrypatter - comes a fantastic idea for how to spend your Christmas Eve. Apparently, a group of people gathers each year to carol around the tree in Washington Square Park. All are welcome - nay, encouraged - to join the fun, which begins at 5 PM. Let me know if you go; can't wait to hear all about it!

Focus on solutions

8 months ago | Niranjan Sarade: InLoveWithNature

When NASA began the launch of astronauts into space, they found out that the pens wouldn't work at zero gravity (Ink won't flow down to the writing surface). In order to solve this problem, they hired Andersen Consulting (Accenture today). It took them one decade and $12 million. They developed a pen that worked at zero gravity, upside down, underwater, in practically any surface including crystal and in a temperature range from below freezing to over 300 degrees C. And what did Russians do ?

The Russians used a Pencil !!!

So, learn to focus on solutions not on problems

"If you look at what you do not have in life, you don't have anything. If you look at what you have in life, you have everything... ! "

Faith...

8 months ago | Niranjan Sarade: InLoveWithNature

Once a priest had been on a long flight. The first warning of the approaching problems came when the sign on the airplane flashed on: "Fasten your seat belts." Then, after a while, a calm voice said, "We shall not be serving the beverages at this time as we are expecting a little turbulence. Please be sure your seat belt is fastened."

As he looked around the aircraft, it became obvious that many of the passengers were becoming apprehensive. Later, the voice of the announcer said, "We are so sorry that we are unable to serve the meal at this time. The turbulence is still ahead of us." And then the storm broke. The threatening cracks of thunder could be heard even above the roar of the engines. Lightening lit up the darkening skies, and within moments that great plane was like a cork tossed around on a celestial ocean. One moment the airplane was lifted on terrific currents of air; the next, it dropped as if it were about to crash.

The priest confessed that he shared the discomfort and fear of those around him. He said, "As I looked around the plane, I could see that nearly all the passengers were upset and alarmed. Some were praying. The future seemed ominous and many were wondering if they would make it through the storm.

And then, I suddenly saw a girl to whom the storm meant nothing. She had tucked her feet beneath her as she sat on her seat and was reading a book. Everything within her small world was calm and orderly. Sometimes she closed her eyes, then she would read again; then she would straighten her legs, but worry and fear were not in her world. When the plane was being buffeted by the terrible storm, when it staggered this way and that, as it rose and fell with frightening severity, when all the adults were scared half to death, that marvelous child was completely composed and unafraid."

The priest could hardly believe his eyes. It was not surprising therefore, that when the plane finally reached its destination and all the passengers were hurrying to get off, he stayed back to speak to the girl whom he had watched for such a long time.

Having commented about the storm and behavior of the plane, he asked why she had not been afraid.

The sweet child replied, "Sir, my Dad is the pilot, and he is taking me home..."

Movin' on up to the east side.

8 months ago | Megan Blocker: Queenie Takes Manhattan

Some very exciting news was unveiled in yesterday's Dining & Wine section of the New York Times: Shake Shack has signed a lease for space at 86th and Lexington. That would be, oh, three blocks from my apartment.

Am I excited? You bet your bum I'm excited! A delicious, relatively cheap, well-made burger and fries within walking distance? On the way home from the subway, no less? Next to a bookstore?

2010 is looking up, my friends.

Cocktail hour.

8 months ago | Megan Blocker: Queenie Takes Manhattan

My love for the bar at Ouest is well-documented. The affair continued this weekend, when I met my friend Cristin there for a drink and an early dinner. Dinner was, as usual, delicious (I swear I'd sell my soul for that green salad.), but my favorite part of the evening was cocktails and gougères.

Ouest always has at least one signature brown-spirit cocktail on their menu, and their latest and greatest is the Watson, a riff on the Manhattan made with brown butter-infused (YES, you read that right.) bourbon, a dash of sweet vermouth, and an orange peel. Round, nutty, smoky perfection. (By the way, check out this interview with Eben Freeman to find out the trick of infusing liquor with fatty flavor, minus the grease.)

And, right alongside, a sizable basket of the house gougères, ripe with stinky cheese and speckled with black pepper. If you still need to be convinced of a reason to eat at the bar, these ought to do the trick. And if you're sweet, Seth might snag you a few extra when they come out of the oven.

Ouest
2315 Broadway
Between 83rd and 84th Streets
212.580.8700

Worth the wait.

8 months ago | Megan Blocker: Queenie Takes Manhattan

Every few weeks, I head down to the Lower East Side to have my hair done by the fabulous Holly Ivey at Fringe Salon. The neighborhood is a culinary wonderland, and whenever I go I try to squeeze in a bit of food adventure. Fringe is right next to Babycakes, the vegan bakery, and I can rarely resist an agave brownie bite. In the summer, I head around the block to Il Laboratorio del Gelato. And, this weekend, I decided it was high time for a stop at Doughnut Plant.

Doughnut Plant, in case you haven't heard, is home to what are widely regarded as the best doughnuts in New York. Mark Israel opened Doughnut Plant in 1994, making doughnuts out of a basement and selling them, wholesale, to venues around the city. In 2000, he opened a storefront on Grand Street, where the doughnuts can still be had, fresh as a daisy and piping hot, every day.

I'd had Doughnut Plant's doughnuts before; they're available all over the city, most notably at Dean & Deluca. They were always good, but I never thought they were something to write home about. I now know that's because - like all doughnuts - Doughnut Plant's doughnuts are exponentially better when they're super-fresh. For this reason, a visit to the actual store, complete with ridiculously long line, is completely worth the trip.

This time around, I ordered an Israel trademark, a yeasted, square doughnut filled with house-made jam (All the jam fillings are made in-house.). This one was also coated in a peanut butter glaze, and dotted all over with little bits of peanut. It was fantastic. Still just slightly warm from the oven, it was squishy and filled with deeply-flavored jam. Since it had only been sitting for a few minutes, the glaze was creamy rather than flaky, and melted in my mouth.

Doughnut Plant also boasts pretty respectable coffee, which you serve yourself - pints of milk are also available, for those who wish to fully recapture the taste of their youth. No matter what your beverage of choice, though, there's no denying that you'll turn giggly and goofy at one taste of the doughnuts.

Doughnut Plant
397 Grand Street
Between Essex and Ludlow
212.505.3700

Windows Skydrive vs Google Docs

8 months ago | Lalita Chandel: Emotional Intelligence

Following up on my previous post, here is a link to an article comparing the features of Skydrive and Google Docs.


My preference would be to use Skydrive as an online storage spot on the cloud, but for all import, export and emailing work, Google docs would be my first choice.

Santa, baby...forgot to mention one little thing...

8 months ago | Megan Blocker: Queenie Takes Manhattan


How could I? I completely forgot to include Judith Jones's cookbook The Pleasures of Cooking For One in my original gift guide. For shame!

The books is a delightfully old-fashioned ode to taking the time and trouble to cook for oneself, a reminder that those of us who eat alone (either occasionally or on a regular basis) deserve delicious, homemade food just as much as those who feast together. Part memoir, part cookbook, it's a hugely useful and inspiring book.

I'm so sorry, Judith! Maybe passing you on the street the other day got me too excited to think clearly. (It really was an exciting moment for this fangirl.)

Google Docs Finally Makes It Easy to Download All Your Documents

8 months ago | Lalita Chandel: Emotional Intelligence

Google docs has now expanded the export feature with a new download "Export All" option. Using this functionality, we can download our entire library of Google Docs documents to the harddrive as a zipped file. This feature will be very handy if we ever want to move from a standard Gmail account to Google Apps (with our own domain).


To download Google Documents, select "Export" under the "More Actions" drop-down menu and then select the "Export All" checkbox. You can export up to 2 GB of files but if your account has more data, you’ll see a message with a list of files that aren’t included in the zip file.







Santa, baby...

8 months ago | Megan Blocker: Queenie Takes Manhattan

It's that time of year again - time for gift-giving and getting, for wishes made and granted. I thought I'd jump into the gift guide fray and share a few of the items from my own wish list, along with a few things I find either essential or just too darn neat to pass up.


all i want for christmas, part ii
First up, a few items from my own wish list. It's a mix of the practical and whimsical, with a bit of Julia mixed in for spice. Clockwise from the top left, here we go. First, a DVD set of Julia Child's complete French Chef series from PBS. The original, and still the best, cooking show. Next, from Anthropologie, a set of their ikat bowls - gold-rimmed and covered in one of the hottest motifs around, they turn cereal or salad dressing into an event.

I'm still searching for the perfect cream-and-sugar set, and this version from Design Within Reach comes awfully close to perfection. I have a couple of antique mortar and pestle sets, but not one that actually works. I love the color of this Le Cresuet model. Next, also from Anthropologie, a cute faux-bois mug for my desk at the office.

Next, something every cook should have: a Le Creuset Dutch oven. I love my 7-quart Martha Stewart model, but I wouldn't turn my nose up at an oval 5-quart version. Preferably in Caribbean Blue. Two more items from Anthropologie, including a dish towel (they have the cutest ones on offer) and gorgeous salad servers. Finally, smack in the middle, a set of grinder attachments for my KitchenAid stand mixer (the better to make homemade terrines) and a set of fishy coasters. They're my color, what can I say?
Design Within Reach has been haunting my dreams recently, not least because of these tiffin lunch pails. I've been bringing my lunch to work almost every day for about a year now, and I think it might be time to graduate from leftover shopping bags to a real-life lunch pail.
I already have this one, and I use it at least twice a week - more during the holidays. It's a KitchenAid stand mixer, and it makes life worth living. If you bake, you must have this. If you whip cream or egg whites more than twice a month, you need this. If you want to bake or whip cream more often, you need this. Via its myriad attachments, the mixer can also become an ice cream maker, food mill, meat grinder...

As I said, you must have this. A perfect splurge of a present, and it comes in many delicious colors.

Speaking of splurges - if you can't afford a trip to Paris this winter (which I can't), why not do the next best thing and get your Francophile a box of Pierre Hermé's macarons? Various delicious assortments are available for shipment anywhere in the EU on his website. Stuck here in the USA along with me? Pick up an assortment at a Bouchon Bakery outpost (in Las Vegas, New York or Yountville) or order a selection from Payard Patisserie.

I'm almost as obsessed with books as I am with food, so it's no surprise that my cookbook collection is getting a little out of control. This year was a banner one for cookbooks; these are just a few of my favorites. Clockwise from the middle of the top row, we have a fantastic baking book from Cindy Mushet, The Art and Soul of Baking. The recipes in here run the gamut from simple to complex; it's a great manual for long-time or beginning bakers. Next, a second volume from Gourmet and (former) editor-in-chief Ruth Reichl. Gourmet Today was released just before the magazine was closed in early October, and Reichl spent the weeks after the closing promoting the book around the country. She truly believes in it, and she's right - like The Gourmet Cookbook, it's chock-full of the best the magazine's crack staff had to offer.

I Know How To Cook, by Ginette Mathiot, is a bible of French home cooking that's been legendary in France for generations. Clothilde Desoulier (of the blog Chocolate & Zucchini) just completed the first English translation of the book, and I have to admit that I can't wait to cook from it.

Thomas Keller's latest book, Ad Hoc At Home, is by far his simplest - though, given that this is Thomas Keller, that isn't saying much. However, I've already made a few of the recipes (notably the chocolate chip cookies), and I can promise you that anyone can tackle the items in these pages. David Chang's Momofuku cookbook, on the other hand, is not an easy one to take on. It's a fantastic read, though - part memoir, part cookbook, really - and is worth buying if you're at all interested in either Chang, the NYC restaurant scene, or really awesome pork buns. (One word of warning: the book is full of cursing. Being rather foul-mouthed myself, I like that, but it may not be everyone's cup of tea. Also, beware the ridiculously fawning introduction from co-author Peter Meehan.)

Finally, a book that really isn't a cookbook, per se, but a love story: My Life In France. It's the story of Julia Child's two great loves: her husband, Paul, and the food of France. This is the book upon which the (far, far superior) Julia half of the Julie & Julia film was based, and if you haven't read it yet, you absolutely must. It's one of the most inspiring, delightful things I've read since graduating from college eight years ago. Seriously.

I don't think about food all the time - really, I don't! This year, I've got my eye on a couple of definitively non-food gifts, all from Etsy (Of course!). This scarf from ArtLab is dramatic and warm - not to mention infinitely practical. It's big enough to be worn, belted, as a vest, or as a shawl.

Next, a gorgeous, unique ring from Toosis, a jewelry designer based in Istanbul. Made of vermeil (gold-coated sterling silver) and featuring a teeny diamond, a pearl and a raw amethyst, it's the sort of thing I can see myself wearing every. Single. Day.

Finally, a little lace-patterned ceramic bowl for the ring to live in. (It would also make a great pinch bowl for salt or pepper, come to think of it. OK, maybe I do always think about food!)

Queenie's Treasury

8 months ago | Megan Blocker: Queenie Takes Manhattan

It's t-minus 13 days to Christmas, folks, and preparations are in full swing chez Queenie. This weekend I'm finishing up my Christmas shopping, writing up a Queenie gift guide and shifting focus to finalizing menus and shopping lists for my pre-Christmas dinner party and Christmas dinner itself.

With that in mind, I thought we'd take a break with some non-Christmasy stuff in today's Treasury. Who's game?

First up, a super-cool, eco-friendly, nifty little find. This felt coffee cozy by Megan Auman (available at her Etsy store) doubles as jewelry. A cuff and cozy in one, all for under $35? Beautify yourself and help save the earth, all at the same time.

Next up, the December issue of Lonny Magazine, which in just two months has taken the shelter mag-starved design blogosphere by storm. Lonny is a monthly online publication chock full of great interior design and fashion ideas, most easily compared to the dear, departed Domino. (Sob.) This month's issue features a few fabulously-styled shop interiors, and talks about how to translate their aesthetics to your living space. Among them is one of my long-time favorites, Kate Spade. Colorful, preppy-modern at its best.

Finally, a giveaway alert! Jauntsetter is launching a Jauntsetter Weddings site, which will feature destination weddings and nuptials-related travel. To celebrate, they're giving away a trip to the Whiteface Lodge in Lake Placid. To enter, send them an email describing (with photos!) your awesome destination wedding or fabulous honeymoon. Full instructions over here - good luck!

How to convert a Rails plugin into a gem

8 months ago | Pat Shaughnessy: Pat Shaughnessy - Home

Recently I decided to convert my fork of the auto_complete plugin into a gem; I called it “repeated_auto_complete.” In the end it was very easy to convert a plugin into a gem; all I had to do was:

  • Make sure there was a code file in the lib folder with the same name as the gem, and
  • Move or copy the init.rb into a subfolder called “rails.”

This is simple enough, but why do I need to do this? These changes seem rather odd, and also it took me about 3-4 hours of debugging to figure out what I needed to do. The answer has to do with the way the Rails framework loads gems… this is more confusing and complicated than you might think! The rest of this article will show exactly how this works in detail, comparing how gems and plugins are loaded.

The load path works the same way for plugins and gems

Rails treats the load path in the same way for gems as it does for plugins. This is a relief, and also not a surprise since gems and plugins are very similar to each other. The best way to get a sense of how the load path works with plugins and gems is just to inspect it directly in the console. To do this, let’s start by creating a new sample app:

$ rails sample
      create  
      create  app/controllers
      create  app/helpers
      create  app/models
etc…

And now let’s install the auto_complete plugin:

$ cd sample
$ ./script/plugin install git://github.com/rails/auto_complete.git
Initialized empty Git repository in .git/
warning: no common commits
remote: Counting objects: 13, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 13remote:  (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (13/13), done.

If we start a Rails console we can use the command in bold to just look at the load path:

$ ./script/console 
Loading development environment (Rails 2.3.5)
>> $LOAD_PATH.each { |path| puts path }; nil
.../gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/lib
.../gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12
.../gems/activesupport-2.3.5/lib/active_support/vendor/memcache-client-1.7.4
/Users/pat/rails-apps/sample/app/controllers/
/Users/pat/rails-apps/sample/app
/Users/pat/rails-apps/sample/app/models
/Users/pat/rails-apps/sample/app/controllers
/Users/pat/rails-apps/sample/app/helpers
/Users/pat/rails-apps/sample/lib
/Users/pat/rails-apps/sample/vendor/plugins/auto_complete/lib
/Users/pat/rails-apps/sample/vendor
.../gems/rails-2.3.5/lib/../builtin/rails_info/
.../gems/rails-2.3.5/lib
etc…

Here we can see the various application paths for my new sample app, as well as the paths of a few of the gems found on my laptop. For clarity, I've shortened the path to my gems folder, and there are many more gems that I’m not showing here. The line in bold indicates that the lib folder for the auto_complete plugin is included in the load paths array, allowing Rails to look inside the auto_complete plugin in order to find missing constants.

Now if I remove the auto_complete plugin…

$ rm -rf vendor/plugins/auto_complete
… and install the repeated_auto_complete gem (from gemcutter):
$ gem sources -a http://gemcutter.org
http://gemcutter.org added to sources
$ sudo gem install repeated_auto_complete
Password:
Successfully installed repeated_auto_complete-0.1.0
1 gem installed
Installing ri documentation for repeated_auto_complete-0.1.0...
Installing RDoc documentation for repeated_auto_complete-0.1.0...

… and add a call to config.gem in config/environment.rb:

Rails::Initializer.run do |config|
…
  config.gem "repeated_auto_complete"
…
end

… and view the load path again:

$ ./script/console 
Loading development environment (Rails 2.3.5)
>> $LOAD_PATH.each { |path| puts path }; nil
.../gems/activesupport-2.3.5/lib/active_support/vendor/i18n-0.1.3/lib
.../gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12
.../gems/activesupport-2.3.5/lib/active_support/vendor/memcache-client-1.7.4
/Users/pat/rails-apps/sample/app/controllers/
/Users/pat/rails-apps/sample/app
/Users/pat/rails-apps/sample/app/models
/Users/pat/rails-apps/sample/app/controllers
/Users/pat/rails-apps/sample/app/helpers
/Users/pat/rails-apps/sample/lib
.../gems/repeated_auto_complete-0.1.0/lib
/Users/pat/rails-apps/sample/vendor
.../gems/rails-2.3.5/lib/../builtin/rails_info/
.../gems/rails-2.3.5/lib
etc…

In bold I can see the gem’s lib folder appear just as the plugin’s lib folder did earlier. In fact, it even appears at the same position in the array so classes should be loaded in exactly the same way for a gem as they were for a plugin.

For a gem, you need to have the expected code file in your lib folder

This next issue caused me some serious headaches… hopefully this explanation will save you some time. To explore how gems are loaded by Rails, let’s unpack my “repeated_auto_complete” gem that I just installed above:

$ rake gems:unpack
(in /Users/pat/rails-apps/sample)
Unpacked gem: '/Users/pat/rails-apps/sample/vendor/gems/repeated_auto_complete-0.1.0'

Now I have a local copy of the gem’s code in my vendor/gems directory. Next, let’s see what happens when I delete the “repeated_auto_complete.rb” file from the lib folder – in other words, the code file with the same name as the gem:

$ rm vendor/gems/repeated_auto_complete-0.1.0/lib/repeated_auto_complete.rb 
$ ./script/console 
Loading development environment (Rails 2.3.5)
no such file to load -- repeated_auto_complete
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
.../gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
.../gems/activesupport-2.3.5/lib/active_support/dependencies.rb:521:in `new_constants_in'
.../gems/activesupport-2.3.5/lib/active_support/dependencies.rb:156:in `require'
.../gems/rails-2.3.5/lib/rails/gem_dependency.rb:208:in `load'
.../gems/rails-2.3.5/lib/initializer.rb:307:in `load_gems'
.../gems/rails-2.3.5/lib/initializer.rb:307:in `each'
.../gems/rails-2.3.5/lib/initializer.rb:307:in `load_gems'
.../gems/rails-2.3.5/lib/initializer.rb:164:in `process'
.../gems/rails-2.3.5/lib/initializer.rb:113:in `send'
.../gems/rails-2.3.5/lib/initializer.rb:113:in `run'
/Users/pat/rails-apps/sample/config/environment.rb:9
etc…

Now we get an error trying to load the Rails environment! The reason why is simple: when Rails loads each gem specified in the environment.rb file with a call to config.gem, it tries to load a code file with exactly the same name. Let’s take a look at line 307 of initializer.rb which appears in the stack trace above:

def load_gems
  unless $gems_rake_task
    @configuration.gems.each { |gem| gem.load }
  end
end

What’s going on here is:

  • load_gems is a method of the Rails::Initializer object. This is the class that we refer to in environment.rb.
  • @configuration is the configuration object that was yielded to the initializer block in environment.rb… in order words the value of the “config” variable that we used in our call to “config.gem”
  • @configuration.gems is an array of GemDependency objects; each one created by a config.gem call. If you’re interested, you can see these are created at line 811 in initializer.rb.
  • For each GemDependency object Rails calls “load.”

Let’s take a look at the GemDependency.load method: line 208 in gem_dependency.rb, also in the stack trace above:

def load
  return if @loaded || @load_paths_added == false
  require(@lib || name) unless @lib == false
  @loaded = true
rescue LoadError
  puts $!.to_s
  $!.backtrace.each { |b| puts b }
end

When the GemDependency object was created earlier, two of its attributes were loaded with values as follows:

  • name: this is set to the name of the gem – “repeated_auto_complete” in my example
  • @lib: this is set to the value of the “:lib” option provided to the config.gem call.

So if you read the code above, you’ll see that Rails allows for three possible cases when loading a gem:

  1. config.gem ‘repeated_auto_complete’ – in this case Rails will call require “repeated_auto_complete” and fail if a code file with that name is not present in the load path. This is what just happened to us above.
  2. config.gem ‘repeated_auto_complete’, :lib => ‘something_else’ – in this case Rails will call require “something_else” and fail if a code file with that name is not present in the load path.
  3. config.gem ‘repeated_auto_complete’, :lib => false – in this case Rails will not call require at all for this gem.

Note that for plugins none of this is an issue: Rails simply adds the plugin's lib folder to the load path array and that's it. But when you convert a plugin into a gem, you need to decide which variation of config.gem your users will have to put in environment.rb.

Init.rb has to move

The next thing Rails does after loading each plugin or gem is to execute a file called init.rb. If you’re the author of a gem or plugin this gives you a chance to initialize your code… for example to add certain modules you’ve written to classes in the application, etc. But as I mentioned at the beginning, if you’re writing a gem or converting a plugin into a gem, you need to be sure the init.rb file is located inside a folder called “rails.” Let’s see if we can find out how Rails does this; first let’s restore the original gem’s code:

$ rm -rf vendor/gems/repeated_auto_complete-0.1.0
$ rake gems:unpack
(in /Users/pat/rails-apps/sample)
Unpacked gem: '/Users/pat/rails-apps/sample/vendor/gems/repeated_auto_complete-0.1.0'

And now let’s edit the init.rb file, located at vendor/gems/repeated_auto_complete-0.1.0/rails/init.rb:

puts caller
ActionController::Base.send :include, AutoComplete
ActionController::Base.helper AutoCompleteMacrosHelper
ActionView::Helpers::FormBuilder.send :include, AutoCompleteFormBuilderHelper

I added the first line in bold: “puts caller.” This will display a stack trace leading to this file when we startup the sample application:

$ ./script/console 
Loading development environment (Rails 2.3.5)
.../gems/rails-2.3.5/lib/rails/plugin.rb:158:in `evaluate_init_rb'
.../gems/activesupport-2.3.5/lib/active_support/core_ext/kernel/reporting.rb:11:in `silence_warnings'
.../gems/rails-2.3.5/lib/rails/plugin.rb:154:in `evaluate_init_rb'
.../gems/rails-2.3.5/lib/rails/plugin.rb:48:in `load'
.../gems/rails-2.3.5/lib/rails/plugin/loader.rb:38:in `load_plugins'
.../gems/rails-2.3.5/lib/rails/plugin/loader.rb:37:in `each'
.../gems/rails-2.3.5/lib/rails/plugin/loader.rb:37:in `load_plugins'
.../gems/rails-2.3.5/lib/initializer.rb:369:in `load_plugins'
.../gems/rails-2.3.5/lib/initializer.rb:165:in `process'
.../gems/rails-2.3.5/lib/initializer.rb:113:in `send'
.../gems/rails-2.3.5/lib/initializer.rb:113:in `run'
/Users/pat/rails-apps/sample/config/environment.rb:9

This time I’ve bolded the “plugin.rb” file; if you look at line 152 in plugin.rb you’ll see this:

def evaluate_init_rb(initializer)
  if has_init_file?
    silence_warnings do
      # Allow plugins to reference the current configuration object
      config = initializer.configuration
      eval(IO.read(init_path), binding, init_path)
    end
  end
end

So this just calls “eval()” on the init.rb file, assuming that “init_path” indicates the path of this file, executing the plugin’s or gem’s initialization code. If you poke around a bit inside of plugin.rb, you’ll see this code for the Rails:Plugin class, which represents each plugin that Rails finds in your application:

def classic_init_path
  File.join(directory, 'init.rb')
end

def gem_init_path
  File.join(directory, 'rails', 'init.rb')
end

def init_path
  File.file?(gem_init_path) ? gem_init_path : classic_init_path
end

If we read the definition of init_path, we see that it uses either rails/init.rb or init.rb, whichever it finds first. This seems to indicate that for a Rails plugin, you can place init.rb either in the “rails” subfolder, or in the main plugin folder, and that it will find and use the copy in the “rails” folder if you happen to have both.

However, for a gem things don’t work this way. You can see why if you look down towards the bottom of the plugin.rb file:

class GemPlugin < Plugin
  # Initialize this plugin from a Gem::Specification.
  def initialize(spec, gem)
    directory = spec.full_gem_path
    super(directory)
    @name = spec.name
  end
  def init_path
    File.join(directory, 'rails', 'init.rb')
  end
end

It turns out that Rails uses a different class to represent gems, called “GemPlugin” (what a confusing name!). In this case we can see that init_path is defined to be the path rails/init.rb and nothing else. This means that gems intended to be used in a Rails application must put their init.rb file in the rails folder.

To summarize this logic:

  • Rails plugins can place init.rb either in the root plugin folder, or in a subfolder called “rails.” If they have both, the rails folder copy will be used.
  • Rails gems must place their init.rb file in a “rails” subfolder.

The actual reason why Rails was implemented this way was that possibly a gem might be used by more than one Ruby framework (e.g. Merb, Sinatra, etc.) and might have different init.rb code for each framework. But a Rails plugin can only be used in a Rails application. Finally, Rails has allowed for plugins to work in the original manner with init.rb in the root folder, or for a plugin to be a gem at the same time, with init.rb in the rails folder.

Google Goggles

8 months ago | Erika Santos: Santos on Technology and Life

Google Goggles (now say it five times, as fast as you can) is breaking some grounds on mobile web search. When you take a picture on Google Goggles, that picture becomes the query against a database of billions of images.


This products is in an infant stage, still at Google Labs, and is currently available only on Andriod 1.6 and above.

Learning to love your small space.

8 months ago | Megan Blocker: Queenie Takes Manhattan

I made chocolate chip cookies last night, and it got me to thinking. Well, that plus a conversation I had yesterday morning with some coworkers who couldn't believe that my apartment really is only 350 square feet.

I love living in a small space. Do I wish I had a guest room so that I could trade my AeroBed in for something my guests look forward to napping on? Of course. And do I wish I could have more than six people for dinner? Damn right I do.

But, overall? I love my tiny apartment. It keeps me organized, it keeps my packrat tendencies in check, and it makes me creative. Nowhere is this more evident than in my kitchen.

People often ask how I manage to cook so often (and, sometimes, multiple courses for so many) in such a small space. Don't I go crazy from the mess, they wonder - and where on earth do I store all my gadgets? And, wait - you don't have a dishwasher?

Well, last night I realized I live my cooking life guided by a few easy principles, ones that apply equally to those of us with teeny kitchenettes and those of us with giant expanses of range and marbletop. I hope you find these maxims as helpful as I do - and I hope that you'll add your own in the comments!

Visual organization is key.
Even if you don't consider yourself a terribly visual or design-oriented person, there's no denying that organization in general calms the mind. For me, organizing my space according to a mix of usefulness and visual cues helps me feel in control and ready to cook at any moment.

For example, I group my assorted tools (spatulas, wooden spoons, salad servers, tongs) in two Ikea (You'll see that name a lot in this post; can't beat 'em for value when organizing.) planters, where they're organized by color. Reds, pinks, oranges on the left, and blues, greens and yellows on the right. This means everything is out and accessible, but looks neat and tidy to the eye. I do the same with my cookbooks (and all my books, actually), which are grouped not only by color, but by height.

Maximize your space.
Whether you have a small space or a large one, you probably want to maximize its potential. I've fit the accoutrements of a well-equipped kitchen into a 10x10 space by going vertical and using my walls. I store everyday pantry items, my food processor, my champagne and dessert wine glasses and my most-used cookbooks in one of Ikea's Billy bookcases. A frosted glass door hides the jumble (see maxim number one, above).

My knives are stored on a magnetic wall strip instead of in a bulky knife block, and I've placed magnetized birds and two big magnetic pin boards above my kitchen cart and next to the stove, respectively. These let me pin up reminders - but, more importantly, give me a place to tack up recipes while I'm working with them, freeing up critical counter and table space. And recently, I've been seriously considering a vertical pot rack - the perfect, apartment-friendly way to use an empty or awkward corner.

Don't be afraid to mix & match.
Don't be precious about where you keep your stuff - if you need more kitchen storage, why not use your linen closet, or your hall closet? My extra baking supplies reside in my linen closet, right next to a basket full of my evening bags. My linens live in storage boxes in my sleeping space. Works for me.


Plan, plan, plan.
Whenever I have a big dinner, I spend a little time the week before planning out the work schedule. Having a set order in which to do things keeps me from having to make unnecessary decisions in the heat of the moment, and makes things run much more smoothly overall. It will also help you identify any potential conflicts with equipment or counter space - always key in a smaller kitchen.


Clean as you go.
Once you've started cooking, clean as you go. You won't need five of everything, which saves space, and you'll have regular breaks in the action to think through your plan. Plus, it means you're washing stuff before the food gets all caked on.

Cook. Often.
The more you cook, the less scary it is. The highs will always be high, but the occasional low will bum you out less if you understand what you're doing and know where you went wrong. Plus, you'll never get yourself organized in quite the right way if you can't try out your system on a regular basis. So cook a lot - even if it's just a simple pasta or a roast chicken - it does a kitchen good.

YAGNI

8 months ago | Riju Kansal: Riju's Thoughts Captured...

You ain't gonna need it.

Yesterday we were doing a DB design in our project which is just in its first sprint. I was paired with my team mate for this task and we were just going into discussions shaping our DB structure. Normalizing it and so on.

At one point I suggested a point from the perspective of extensibility in future. My team mate who is also our SCRUM master suddenly said YAGNI. And he started laughing. I was wondering what was that. Which language? Latin? Greek?

He quickly googled for the word YAGNI and the all the results said - "You ain't gonna need it". Instantly I recollected the SCRUM phillisophy of NO Big Design Upfront - NBDU. Just be in present do not worry a lot about future.

We laughed for while and continued back to work.

If You've Been Waiting for Apple's Tablet...

9 months ago | Erika Santos: Santos on Technology and Life

If you are a bit tired of the wait for the the rumored Apple Tablet, check out JooJoo. It does not offer everything we speculate the Tablet will, but Joojoo's price may be significantly lower than the Tablet and the experience satisfying to those who are primarily interested in using a touch screen gadget to search the web.


The 411:

- On sale staring December 11th

- Price tag of US$499

- 12.1-inch diagonal 720p capacitive touch screen

- 1366x768-pixel resolution

- Runs a proprietary Linux-based operating system

- 4GB of cache memory

- Undisclosed processor

- Thinner than a MacBook Air

- Built-in camera

- Microphone

- Speakers

- One USB port

- A card slot

- One button: the power switch

- The browser supports Flash and other standard HTML extensions, but it won't run non-Web apps (e.g.: No Skype)

- Solely focused on running the Web


source: CNET.com

A peanut butter cookie so good it makes you want to play hooky.

9 months ago | Megan Blocker: Queenie Takes Manhattan

A couple of weeks ago, my colleagues Lory, Julie and I decided it was high time for a proper lunch, one not eaten at a desk or conference table, but in a restaurant - with waiters and everything! Our other reason for venturing outside was to check out the offerings at Má Pêche, David Chang's new restaurant in the Chambers Hotel.

Chang is taking over the old Town. space (No, that period is not mispunctuation. The restaurant really had a period in its name.), and the full-scale restaurant is set to open in January. In the meantime, he's trying out a pared-down version of the Vietnamese menu in the hotel's lounge area, just upstairs from the lobby. The experience is indeed lounge-y, with low-slung tables, couches and poufs.

There's an à la carte menu (featuring a rumored-to-be-delish burger and fries) as well a $10 prix fixe option. (Note: a salad in midtown will run you about $12, so this is an excellent deal.) We all went for the prix fixe; Lory and I ordered the bun (rice noodles with pork) and Julie went for the chicken terrine banh mi.

The noodles were delicious; the pork ragout was rich and meaty with a nice spicy kick (me being me, I added a bit of Sriracha to mine) balanced by the saw leaf and some of cilantro. (There was a bit too much cilantro for me, though I know other people just can't get enough.) The noodles themselves were sheets of rice noodle rolled into cigars and lightly browned. I'd never seen bun done that way, but I loved the alternately chewy, crispy and tender textures the method produced. The best part might have been the crispy shallots sprinkled all over the top - Lory and I both wanted a whole bowl of just those.

Julie's terrine was also tasty; a thoroughly respectable version of Momofuku's standard three-terrine model, this banh mi was served with the traditional herbs and carrot-and-daikon pickle. The chicken terrine was moist and really flavorful; for some reason, I was worried this would be just another grilled chicken sandwich - luckily, I was wrong!

For dessert, we each ordered a Milk Bar peanut butter cookie. These cookies were INSANE. Big, but not huge, they tasted strongly of peanut butter and had some sort of caramel swirl running through them...I'm now in desperate need of the recipe, lest I never taste anything this delicious ever again. If you have it, give it up.

I mean it.

Má Pêche
15 West 56th Street
Between 5th and 6th

Cool cocktail for a cold night.

9 months ago | Megan Blocker: Queenie Takes Manhattan

On Saturday night, my brother, sister-in-law and I tramped through the cold, biting snow to see Where The Wild Things Are. None of us enjoyed it all that much (I must not be a hipster...), and by the time I made it home, I was chilled to the bone and ready for a cocktail.

I wasn't in the mood for a martini, and I was running low on bourbon - but I had plenty of lemons and Laird's Applejack, an apple brandy made just over the river in New Jersey. I decided to make my new go-to autumn cocktail, an applejack sidecar. Sidecars have lemon juice, which makes apple pie taste good, so why not apple liquor?

As you know, thanks to Nick, I'm awfully fond of a bourbon sidecar. An applejack sidecar is a bit lighter in taste, but packs just as much punch at the finish. And since applejack is essentially apple brandy, I figure it's even less a bastardization of the original, which calls for brandy or Cognac.


It's key that you use fresh lemon juice (just as it's paramount to use fresh mixers in all drinks) to ensure the right amount of tart, citrusy bite. It would also be good to do half lemon juice, half fresh cider. Oooh, yeah, that would be awesome. You could sub (or even supplement) Grand Marnier in for the Cointreau...you could even do what Nick does with his sidecars and add a little Grand Marnier float to the top.

After all, you're already breaking with convention - have fun, wouldja?

Applejack Sidecar

This makes a smaller, quite civilized cocktail - feel free to double up. I often do.

1 sliver of lemon, reserved
Granulated sugar
2 1/2 ounces Laird's Applejack
1 tbs. lemon juice
1 tbs. Cointreau or Triple Sec

Drag the lemon sliver, fleshy side down, around the rim of a cocktail glass. Once the rim is evenly damp with juice, put some sugar on a small plate and spin the glass around in it a couple of times to coat the rim with sugar. Place the glass in the fridge or freezer to chill while you make the cocktail.

Fill a cocktail shaker 1/3 full with cubed ice. Pour in the Applejack, lemon juice and Cointreau. Cover and shake gently until the shaker fogs with condensation.

Pour the cocktail into the prepared glass and enjoy.

Serves one.

Queenie's Treasury

9 months ago | Megan Blocker: Queenie Takes Manhattan

Happy weekend, readers! Here in New York it's a cold, sleety sort of day; the kind of day made for curling up with a book in front of the fire - or, in my case, the teeny Christmas tree. If your weather is similarly gray, I hope these tidbits will brighten it up a bit.

First off, a new project from three great food bloggers (Maggie of Pithy & Cleaver, Jennie of In Jennie's Kitchen and Olga of Sassy Radish). Those of us who miss Gourmet will do just about anything for a fix of the real thing. Luckily, Gourmet, Unbound has arrived to fill a little bit of the hole left behind. Each month, they're collecting a series of posts about Gourmet recipes past and publishing them on their new site. Each month they'll feature recipes from any year in Gourmet's history; the recipe, however, must be from an issue matching the month in question. (In other words, January will feature recipes from Gourmet's January issues, and so on.) Check out their December posts for holiday meal planning inspiration!

Next, from Design*Sponge, a super-cool (and pretty) recipe for wassail, the traditional Christmas punch. Booze + pretty photos + the holidays = happy Queenie.
Last, but not least, an inspiring reading list from Michelle over at Feminine Modern. I've read a few on this list, and am now lusting after French Market Cooking. France? Local produce? Sign me up! A great list for gift-giving inspiration, to be sure.

How much land does a man need ?

9 months ago | Niranjan Sarade: InLoveWithNature

The physical desires can never be satiated. The more one attempts to satisfy them, the more intense they grow, even as fire blazes instead of going out when oil is poured into it.

Tolstoy has written a very instructive story under the title "How much land does a man need ?"

- A man was promised free all land he could run round from sunrise till sunset. In his sheer greed to cover more and more land, he ran so far that he never got back to the starting place before sunset, and in utter exhaustion, he died. Only a strip of land, 7 feet, was needed to bury him !

2010 Top Web Trends

9 months ago | Erika Santos: Santos on Technology and Life


Pete Cashmore, founder and CEO of Mashable predicts the top 10 web trends for 2010:

  1. Real-time ramps up- including real-time collaboration
  2. Location sharing services- our whereabouts may optionally be appended to every Tweet, blog comment, photo or video we post.
  3. Augmented Reality- e.g.: Layar
  4. Content curation- filters to prevent information overload
  5. Cloud computing
  6. Internet TV and Movies
  7. Convergence conundrum- while many of our gadgets are folded into our smartphones, task-specific devices gain popularity, such as e-readers and flip video cameras
  8. Social gaming- FarmVille on Facebook allegedly has more active users than does Twitter
  9. Mobile Payments
  10. Fame abundance, privacy scarcity
Source: http://www.cnn.com/2009/TECH/12/03/cashmore.web.trends.2010/index.html

A View of UX from the Balcony

9 months ago | Amy Grandov: Technology for Social Innovation

Unless you have a particular passion for user interface design, you may be tempted to see user experience (UX) for your software application as a low priority, particularly for an administrative enterprise system that is hidden from customers or clients.

But keep in mind that your application will have a design, and users will experience it. The only question is whether it will be a good experience or a bad experience.

Does a bad user experience matter? After all, administrative enterprise systems are serious utilities. You care about function, not what the interface looks like or whether it's fun to use.

UX is not just about an attractive interface with all the bells and whistles. A well designed system allows users to accomplish their goals efficiently and effectively. Users will get more done in less time with fewer mistakes. They will require less training and ramp-up time when new to the system, and generally be happier. They may experience less stress and burnout, and lower turnover. All this lowers costs and delivers business value.

Administrators will also provide better service to your customers and clients. Imagine checking in for a flight with a ticket agent who is struggling with a poorly designed reservations system. You will never see the interface the agent is using, but you will have a long wait in line as she painstakingly helps other customers. If the agent seems unsure of how to book your seat, and has to undo some changes, you may not trust that your seat has been confirmed correctly. If the agent misreads a confusing screen, you could wind up at the wrong gate. Its likely you won't feel confident getting on that flight (if you haven't missed it altogether!).

If you get on the balcony, you will see an airport full of people trying to reach destinations, and depending on Administrators and support systems to get there. This is true in an enterprise as well.

A solid user-centered approach to designing administrative applications will help meet the needs of all key stakeholders, and help the organization delight customers and clients. UX is more than fancy graphics. Ultimately, its about delivering business value.

For further reference, see also: http://www.slideshare.net/wctschumy/what-is-ux-and-why-should-i-care-in-line-of-business-applications


Acceptance TDD

9 months ago | Riju Kansal: Riju's Thoughts Captured...

1. In acceptance TDD we first define the specific user- or customer-valued functionality we want our system as a whole to exhibit and only then implement the said behavior,most likely using TDD.

2. Acceptance test are:
-Owned by customer
-Written together with customer, developer, tester
-It is about what and not about how
-expressed in the problem domain -consize, presize

3. The requirement is to achieve correctness at feature level and not at code level.

4. Dev Cycle:
-Select a User Story
-Write Acceptance tests for the story
-Automate above tests
-Implement the story to pass teh above automated acceptance tests.

Back to SCRUM...

9 months ago | Riju Kansal: Riju's Thoughts Captured...

Long time.. almost 7-8 months.. I was missing SCRUM actually.

Thanks to my new assignment in my new job :). I am back to a SCRUM team, playing the role of the tester. I am happy that I can use all my learnings from my Waltham University :) for my new team and project.

Right on my first day I heard back all things about SCRUM, which I was forgetting slowly being out of touch since last few months. I had my first standup meeting today and people are talking about TDD and Acceptance TDD. Cool.

Encounter with fascinating JQgrid plugin

9 months ago | Gourav Tiwari: easy_software = Agile.find(ruby_on_rails)

In one of my earlier projects, there was a requirement from product owners, to show data in grid format. It was way back in summar of 2008. We had to load the whole data by hand-coding the trs and tds in table and shown the results in html table's grid format.

Back to the current project, I did a little research and found jquery-grid-rails-plugin
I found it pretty useful and up to the mark as far as results are being displayed on the Grid (AJAX calls). You can look at the Demo as well (http://github.com/ahe/jqgrid_demo_app/tree/master), also a detailed explanation on installation and usage mentioned here -> http://www.2dconcept.com/jquery-grid-rails-plugin

The response is pretty quick, from 1000 records in DB to fetch 25 on one page it took around 500 ms. Also, you can use various JQuery themes if you do not like the default look and feel: http://jqueryui.com/themeroller

Lets take a very small example and see how to use JQgrid:

I have User controller's index method to write logic to display all users.
User model has attributes as:
id : integer (row id)
name : string
created_at : date

I have User's view (users/index.html.erb file) to display the grid with above attributes.

Steps:
1. Install plugin: $ ./script/plugin install git://github.com/ahe/2dc_jqgrid.git
2. In layout include JS and CSS for grid:
<%= jqgrid_stylesheets %>
<%= jqgrid_javascripts %>

3. In User controller:
def index
users = User.find(:all) do
if params[:_search] == "true"
name =~ "%#{params[:name]}%" if params[:name].present?
created_at =~ "%#{params[:created_at]}%" if params[:created-at].present?
end
paginate :page => params[:page], :per_page => params[:rows]
order_by "#{params[:sidx]} #{params[:sord]}"
end

respond_to do |format|
format.html
format.json { render :json => users.to_jqgrid_json([:id, :name, :created_at], params[:page], params[:rows], users.total_entries) } # total entries will get User.all.size
end
end

4. In view:
<%= jqgrid("All users", "users", users_url, # my recommendation as putting /users sometimes does not work in all cases
[ { :field => "id", :label => "ID", :width => 35, :resizable => false },

{ :field => "name", :label => "User Name" },
{ :field => "created_at", :label => "Created on" }
]
) %>

Now everything is fine, it should work fine and show us the grid with name and created at time.

Problem that I faced: When you have to show any attribute of model with formatting , there was nothing mention on the blog, like I would like to Capitalize the name here in the grid (First letter is capital).

So, I dug into the code and found my solution

Solution:
In index I have to change the format.json in index method like this:
render :json => users.to_jqgrid_json([:id, "name.capitalize", :created_at], params[:page], params[:rows], users.total_entries)

and in view I need to change following line as :
{ :field => "name.capitalize", :label => "User Name" },

and it works!

Another problem: If I need to change the format of the created_at, can I do this in controller and view?

Controller:
render :json => users.to_jqgrid_json([:id, "name.capitalize", 'created_at.strftime("%Y-%m-%d")'], params[:page], params[:rows], users.total_entries)

View:
{ :field => "name.capitalize", :label => "User Name" },
{ :field => 'created_at.strftime("%Y-%m-%d")', :label => "Created on" }

Answer is NO.

Because, the way jqgrid ruby plugin written, you cannot use method with parameters.

Solution: I used instance method.

In model, I wrote:
def formatted_created_at
created_at.strftime("%Y-%m-%d")
end

def capitalized_name
name.capitalize
end

In controller:
render :json => users.to_jqgrid_json([:id, :capitalized_name, :formatted_created_at], params[:page], params[:rows], users.total_entries)

In view:
{ :field => "capitalized_name", :label => "User Name" },
{ :field => "formatted_created_at", :label => "Created on" }

That's it!

It's that time!

9 months ago | Megan Blocker: Queenie Takes Manhattan

Well, my lovelies, it's finally here - the most magical time of year. And I say that completely without irony. If there's something I truly love, it's Christmastime. As I told my friend Dave a couple of weeks ago: I'm Christmas crazy. The music, the decorations, the search for the perfect present, the search for the perfect wrapping, the food, the parties, the feeling that regular business has been suspended - I love it all.

And nowhere on earth does Christmas the way New York does. While spending the season in France is high on my wish list, every Christmas I get to spend in New York makes me fall more deeply in love with my city.

I promise loads of photos from all over the city over the course of the next few weeks, when I'll be all over the place celebrating like crazy. (I hit several carol sings and a Messiah sing-along each year, even though my voice isn't quite was it once was.) In the meantime, I thought I'd show you a couple of the decorations I've put up on my home turf.

As you probably know, my apartment is fairly teeny (only 350 square feet total), so I stick with a similarly teeny tree that doesn't even pretend to be real - I call it my Charlie Brown tree - and hang my favorite Gorham silver snowflakes and crystal ornaments from bare cherry branches. (I'm seriously considering grouping some tiny pine cones around the base of the pitcher - what do you think?) It may not be much, but it's home - and doesn't take up too much space, leaving plenty of room for entertaining galore!

How are you decorating your space this season?

Photo of the Empire State Building courtesy of DeaPeaJay on Flickr.

Apples, cranberries, crumble.

9 months ago | Megan Blocker: Queenie Takes Manhattan

Much to my brother's dismay, I'm constantly looking for the perfect apple pie. While his tastes run to a sweet, traditional pie, my own are sated by a tarter version. This year, a Gourmet recipe for a cranberry-apple crumble pie caught my fancy.

I tested the recipe out at my office potluck two weeks ago, and had a good bit of success. The pie uses Gala apples, as opposed to the more typical (and tarter) Granny Smiths. The Galas cook up beautifully, their slightly grainy texture turning to silky (but durable) velvet in the heat of the oven.


To counter the sweetness of the Galas, the recipe calls for brown sugar in place of white and adds a handful of cranberries to the mix. The cranberries (plus a bit of lemon juice) turn the pie filling a gorgeous pink color and add a different texture to the mix.

The real star, though, is the crumble topping. A basic mixture of flour, butter, brown sugar and cinnamon is made special by the addition of chopped pecans, which turn rich and dark during baking. I wasn't sure the topping would be contrast enough for the filling, but it was - very much so.


Next year I might do my experimenting with the pumpkin pie and let Jeremy have his traditional version of the apple...or not.