Chilly as it was over the weekend, flowers abounded at the Greenmarket. Daffodils, hydrangea and cherry blossom branches were particularly plentiful, as they often are at this time of year. But it's still too cold for the orchids, who warmed their toes by the warmth of a little transportable heater.
It's still too early for spring chickens, but their eggs are on full display, along with small, bluish pheasant eggs and their large, pale duck cousins. Me? I settled for some delicious chicken eggs from Knoll Crest, my favorite of all.
Those of you who live in the northeastern United States no doubt shared my disappointment in the subfreezing temperatures we experienced this weekend. It's the end of March; I shouldn't be schlepping to the Greenmarket in gloves, a scarf and my winter coat!
But schlep I did, and I'm better off for it. Root vegetables abounded, and I decided that some celeriac (also known as celery root) soup would be just the thing for my lunches this week. I didn't want to do anything too complicated, so I just sauteed some aromatics (leeks, shallots, garlic), added some celeriac and other root vegetables (carrots, potatoes) and threw in a few sprigs of thyme for good measure.
When the soup was done, I tasted it and decided it needed something a bit richer to balance out all the veggie goodness. In went a touch of half-and-half and a smidge of browned butter. The result? Creamy, satisfying soup, the perfect antidote to an early spring chill.
Celeriac Soup with Browned Butter
2 tbs. olive oil
2 small leeks (white and light green parts only), cut into half-moons and washed
1 medium shallot, chopped
1 clove garlic, sliced crosswise
1 pound celeriac, peeled and cut into 1-inch chunks
2 small, waxy potatoes, peeled and cut into 1-inch chunks
1 carrot, peeled and cut into 1/2-inch chunks
2 sprigs thyme
1/2 cup dry white wine
4 cups chicken or vegetable stock
1/4 cup half and half
2 tbs. butter
Kosher salt
Freshly ground black pepper
Set a medium pot (I used my 3 1/2 quart French oven.) over high heat. After a minute or so, add the olive oil and reduce the heat to medium-high. Once the oil is hot, add the leeks and saute for a moment, then add the shallot and garlic. Saute until the leeks are translucent and just beginning to brown. Add the celeriac and stir to combine well with the leek mixture, then add the carrots and potatoes, along with a healthy pinch of salt and some pepper.
Add the thyme sprigs to the pan and pour in the wine. Allow to cook at high heat, stirring, for a few minutes, until it doesn't smell too boozy. Pour the chicken stock over the vegetables and bring the soup to a boil. Reduce to a simmer, cover, and cook for 25 to 30 minutes, until the vegetables are tender and easily pierced with a fork.
While the soup is cooking, melt the butter in a small skillet or saucepan set over medium heat. Continue to cook the butter until it begins to turn brown and smells nutty. Take off the heat immediately and set aside.
Once the vegetables are tender, remove the soup from the heat. Pull out the (now bare) thyme sprigs. Using an immersion blender, puree the soup until it is thick and smooth. (If you want to go crazy, you can also pour it through a strainer or chinois to make the soup super-smooth.) Stir in the half and half and browned butter.
If serving immediately, taste and adjust for seasoning. If not, allow the soup to cool to room temperature, cover, and transfer to the fridge. Reheat gently over medium heat, taste for seasoning, and serve.
Serves four.
My team recently used Kanban for the first phase of a software platform upgrade project. After a recent release we are taking the opportunity to transition to Scrum going forward. This was my first experience with Kanban, and led to some lessons learned from a Product Owner's perspective that may be helpful for choosing between the frameworks for future software projects.
At the highest level, Kanban is a 'pull' system, where the development team takes units of work ("stories") from a prioritized queue of pending requests. When the work is complete, the team selects the next item from the pending queue. The Product Owner may make as many changes as desired to the pending list until an item is selected. In contrast, Scrum teams commit to delivering a total number of story points within a fixed "sprint" iteration. Once the sprint begins, the scope of work for the sprint is fixed. There are several sites providing an overview and comparison between Scrum and Kanban, so I won't try to improve on them here.
Kanban
The biggest advantage of Kaban came from not being bound to fixed-duration iterations (typically 1 or 2 week sprints). We moved an existing inventory of reports, which varid in size and complexity, to an upgraded environment. Our stories - typically a report or "package" of reports - didn't fit neatly into the fixed timebox of a sprint. Attempting to size the stories to make them comply didn't seem to add value to the project. Instead, pending work was queued up by business priority, and the developers simply selected additional work off the queue when the existing stories were complete, in assembly line fashion.
As a result, there was less overhead for planning and estimating. Until a report has been run in the new environment, it is difficult to predict how much rework a set of reports will require to make it work in the upgraded environment. Velocity from one set of reports does not have much value in predicting the velocity for the next set. Instead, I looked backward and took an average of the throughput time (i.e., actual time required to move through the development phase) to help gauge progress.
It is also easy with Kanban to allow an urgent request jump the queue to take priority. This is good or bad depending on your perspective. There is no need to protect the scope of the current sprint, beyond the immediate story that is in progress.
Scrum
Despite these advantages, we ultimately decided to use Scrum going forward for a couple reasons. While Scrum is still relatively lightweight on processes, it provides more structure than Kanban. The process of discussing stories and assigning story points prompts helpful team discussions. A commitment to deliver a certain amount of work is made at the beginning of each sprint, providing some additional discipline and transparency.
Best of both?
There are ways to modify either process to take on some of the qualities of the other. For instance, I'm keeping my Kanban visual board, which works equally well with Scrum. One week
sprints can also increase the team's responsiveness to changing business priorities. To make story pointing more feasible, it could have been possible to have a story for impact assessment in one sprint, allowing for a more reliable estimate on complete testing and rework in the next sprint. In fact, this is what we are starting to do now.
Generally, Kanban seems especially helpful in an operations or helpdesk type environment where sprints of any fixed duration may not be practical. Scrum is my preferred methodology for software development work given the increased structure provided, though Kanban could work for some teams as well.
I'd be interested to hear from others who have experience with both Kanban and Scrum.
See also:
Henrick Kniberg's blog - comparison of scrum and agile
Putting the Lean in Agile - What can we learn from Kanban?
The weekend is here, and I am psyched! I'm not so psyched about the weather, though; I went to the Union Square Greenmarket this morning when it was still below 30°F, and the tips of my ears are still recovering from the trauma. I did make out pretty well, though, with a haul that included the first chives of the season. And ramps are expected next week! In the meantime, here are some things to cuddle up with in the warmth of your living room...or bed...or coffee shop. Wherever, so long as it's warm.
First up, something to help with that whole warm thing. I saw this recipe for corn soup on Food52 last week, and have been dreaming of it ever since. Like Jenny, I rely on frozen corn (and peas) to keep me going through the winter months, and find no shame in it. The vast majority of the time, it's better than what's available fresh. Her recipe includes curry powder and mint, and sounds comforting and refreshing at the same time. Sign me up.
Next up, courtesy of Design*Sponge, a peek into the home of the founders of Paris' famed Hidden Kitchen eating club. It's a gorgeous place, all glamour and comfort and, well, Paris. I would move there in a New York minute.
Finally, another tidbit from Design*Sponge. (I know, I'm kinda boring this week.) Look at this pantry. Don't you want it? How could you not? It is, quite simply, amazing. To have everything you need so readily accessible, and so beautifully stored? I swoon and sigh at the mere thought.
I'm behind on my reading... In last few weeks the list of books to read has grown...
On my list are -
I'm behind on my reading... In last few weeks the list of books to read has grown...
On my list are -
I don't know about you guys, but I pretty much worship Ruth Reichl. She's funny, she's humble and she's too damn talented. Her memoirs (especially Tender At The Bone and Comfort Me With Apples) are on my read-this-at-least-once-every-two-years list, and I'm still deep in mourning over the loss of Gourmet, the magazine she helmed spectacularly for 10 years. (Until Condé Nast shuttered it in October 2009. Grrrr.)
Most recently, I've been re-reading Tender At The Bone, Reichl's first memoir. It spans about 20 years' time, from her childhood in Greenwich Village to her move to Berkeley in the early 1970s. Somewhere in there, she penned her first cookbook, entitled Mmmmmm, A Feastiary. I first heard the book mentioned by name when Reichl did a Q&A on eGullet a few years ago, and promptly searched eBay for a copy. I snagged one in pristine condition for just a few bucks, and it's occupied a precious spot on my shelf ever since.
On Sunday, when confronted with a refrigerator full of leftover rice, steamed chicken and broccoli, I decided a bowl of fried rice would be just the thing to eat for lunch. And I knew Ruth was just the person to tell me what to do. When a browse through the Gourmet cookbook didn't rustle up what I needed, I turned to Mmmmmm, and was not disappointed. Right there on page forty-three is a ridiculously simple recipe for fried rice.Reichl encourages an improvisational approach, telling the reader to use whatever bits and bobs populate the recesses of her crisper drawer. She also Americanizes the recipe somewhat, suggesting sherry in the place of Shaoxing cooking wine. No matter what you throw in or what wine you grab from the shelf, though, the result is a fast, piping hot, satisfying lunch.
Cleaning out the fridge is a pretty good side benefit, too.
(And, since matzo abounds this week, I think Mmmmmm's matzo brei may be next on the list.)
Ruth's Fried Rice
Adapated from Mmmmmm, A Feastiary by Ruth Reichl
1 cup cooked rice
2 tsp. vegetable oil
1 egg
1/4 cup white onion, diced
1 clove garlic, smashed
Any vegetables you want to add (broccoli, cabbage, carrots, peppers), thinly sliced
2 tsp. Shaoxing cooking wine (or sherry, or vermouth)
1/4 cup water or chicken stock
2 tsp. soy sauce mixed with 1/4 tsp. sugar
Kosher salt
Freshly ground black pepper
Sriracha (optional)
Heat a skillet until very hot. Add the oil and a bit of salt; swirl the pan to coat the bottom. Break the egg into the pan and scramble lightly. Add the onion, garlic and vegetables to the pan, and stir to combine with the egg.
Add the meat and then the wine, and stir the contents of the skillet for another 30 seconds. Add the rice and stir to combine evenly. Cook for another 30 seconds to a minute, until the rice is hot and has lost all of its refrigerator stiffness.
Add the soy sauce mixture and grind some pepper over everything. Serve immediately, topped with a few squirts of Sriracha.
Serves one, generously.
Every cook needs a classic vinaigrette in his or her repertoire. Much like roasting a chicken or making an omelet, whipping up a vinaigrette is one of the basic foundational skills of good cooking. To do it, you need decent knife skills (if you include shallot or garlic, that is), a good sense of proportion and the ability to season properly.
It's the simplest of the classic sauces and is a great opportunity to make your own mark. Every cook I know has his or her own formula, typically representative of his or her entire oeuvre.
My vinaigrette is no exception. It includes several of my favorite ingredients (shallots, sherry vinegar, mustard, honey), and I'll eat it on almost anything. I use my vinaigrette on simple green salads, my summertime composed salad, my green bean and new potato salad, on top of grilled chicken or steak...you name it, I'll put this dressing on top of it.It took me a while to land on this recipe; for years, I used white wine vinegar and olive oil, but about four years ago I fell in love with sherry vinegar and never looked back. The honey tempers the tang of the vinegar without diluting its flavor, and also helps to emulsify the dressing without using too much oil. Mustard is a classic ingredient in vinaigrette; in addition to being yet another emulsifier (hence its appearance in most homemade mayonnaise recipes), it adds a winey, earthy flavor to the proceedings. And canola oil is light, neutral and far cheaper than grapeseed.
I hope you like this dressing - and I hope you'll share your own signature vinaigrettes in the comments below!
Queenie's Vinaigrette
1 large shallot, minced
2 tsp. good Dijon mustard (I use Maille.)
1 tsp. honey
1/4 cup sherry vinegar
1/3 cup canola oil
Kosher salt
Freshly ground black pepper
Combine the shallot, mustard, honey, vinegar and a pinch each of salt and pepper in a medium bowl. Stir with a small whisk to combine.
Whisking constantly, pour the oil into the bowl in a thin stream. Continue whisking until the mixture is emulsified. If using immediately, taste and adjust for seasoning.
Otherwise, cover the bowl with plastic wrap and place in the refrigerator. The dressing will keep (and will actually get better for the sitting) for up to 10 days.
Makes enough vinaigrette to last one person at least a week.
I do not have a dishwasher.
This is not an unusual situation for a New Yorker; in fact, it's considered the norm for most rentals, especially those built before the most recent real estate boom. And since I live alone, it's not too much of a pain to do my dishes by hand.
What it does mean, though, is that I'm particularly tuned in to which dishes and utensils get more use than others, and I've noticed something interesting. While there are always a bounty of forks available in the cutlery drawer, I am frequently out of spoons, and my whisks and knives are constantly dirty.
I realized that, aside from actually eating (which, let's face it, we can do with our hands), almost every task I need to accomplish in the kitchen can be tackled using a combination of knife, whisk and spoon. Making a salad? Knife, whisk, spoon. Making a cake? Whisk, spoon. Making soup? Knife, spoon. An omelet? Knife, whisk, spoon. You get the idea.
It's not that I don't love my tongs or my fish spatula or my vegetable peeler. But if I had to choose three tools to take with me on the road, or to a desert island, the trio of knife, spoon and whisk would win, by a long shot.
How about you? What are your most essential kitchen tools?
• Right click on ‘Directory Server’ and say ‘Add connection’.
• A pop-up will appear as shown in the snapshot below.
• Add the following details in the pop-up
Add host: Cognos url
Port : 389
Base DN : o=organization.com
The connection is added.
Now we see the ‘Default’ namespace under the Directory Server.
Under the default namespace we see
To make LAE :
Right click on the namespace and say ‘Export to .LAE’
Scheduling Reports
You can schedule reports to run at a time that is convenient for you, such as during off hours when demands on the system are low.
You can schedule reports individually or in a group by using a job. You can schedule reports to run by minute, hourly, daily, weekly, monthly, or yearly.
Only one schedule can be associated with each report or job. If you require multiple schedules for the same report, you can create report views and then create a schedule for each report view. Jobs have their own schedules, and these schedules are independent from report schedules.
After you create a schedule, the report or job runs at the time and date specified. You can then manage the properties of your schedules.
Prompts in Scheduled Reports
If a report that contains prompts is scheduled, you must save the prompt values or specify default values to ensure that values exist when the report runs according to the schedule.
In a job, you can specify prompt values for job steps. When a report runs as part of a job, the prompt values saved in the job definition are used instead of the values saved with the report. If no values are specified in the job definition, ReportNet uses the values saved in the report.
SCHEDULE A REPORT
You schedule a report to run it at a later time or at a recurring date and time.
If you no longer need a schedule, you can delete it. You can also disable it without losing any of the scheduling details. You can then enable the schedule at a later time.
ReportNet keeps history information and report outputs each time a report runs according to a schedule. You can specify how many occurrences to keep or for how long to keep them. For example, you can keep the history and report outputs for the ten latest occurrences or for schedules that ran in the last two months. Use the report history to see the times at which the reports ran and whether the reports ran successfully.
To schedule a report or report view, you must have read, write, execute, and traverse permissions for it. You also require the following access permissions to any data sources used by the report.
• dataSource - Execute and Traverse
• dataSourceConnection - Execute and Traverse
(With only Execute access, you are prompted to log on to the database.)
• dataSourceSignon - Execute
You can set the same schedule for multiple reports by creating a job. A job identifies a collection of reports, report views, and other jobs that are scheduled together and share the same schedule settings. When a scheduled job runs, all the reports in the job run.
Jobs contain job steps, which are references to individual reports, jobs, and report views. You can specify whether to run the steps all at once or in sequence.
When the steps are run all at once, all the steps are submitted at the same time. The job is successful when all the steps run successfully. If a step fails, the other steps in the job are unaffected and still run, and the job has a Failed status.
When the steps are run in sequence, you can specify the order in which the steps run. A step is submitted only after the preceding step runs successfully.
The individual reports, jobs, and report views in steps can also have individual schedules.
To schedule a report or report view, you must have read, write, execute, and traverse permissions for it. You also require the following access permissions to all data sources used by the report.
(With only Execute access, you are prompted to log on to the database.)
You can schedule a report based on an event, such as a database refresh. You specify an event to act as a trigger. When that event occurs the report runs.
This functionality is also available through Event studio.
A few weeks ago, Louisa and I paid a visit to Frankie's Spuntino on Clinton Street, where we had an absolutely fantastic meal. Ever since, I've become obsessed with recreating two of the dishes: cavatelli with hot sausage and browned butter, and the roasted beets with avocado and balsamic vinegar.
Others have come before me where the cavatelli is concerned (and I'll be offering my version shortly), but I wasn't able to find any versions of the beet and avocado salad anywhere online. The salad is deceptively simple and relies heavily on the inclusion of superlative ingredients - the best beets, avocado and balsamic vinegar that you can find.
That last one means you'll have to shell out a bit - you need a vinegar that's been aged long enough to become thick, sweet and complex. The young, sour versions just will not do. Not to worry, though - the cash will be more than worth it. You only need a tiny bit, and the flavor is incomparable.
The salad combines two slightly different textures - the tender, toothsome beets and the creamy avocado - and three delicate flavors to create a distinctly refreshing and exciting dish. I tried to stick to the three ingredients in my version, but ended up needing a little help to bring out the depth and excitement I remembered in the Frankie's version.
Luckily, I'll soon be able to see how close I was to the truth: Frankie's Spuntino is coming out with an eponymous cookbook in early June. Pre-order? Don't mind if I do.
Frankie's Roasted Beet & Avocado Salad
4 small beets
Olive oil
Juice of one lemon
1/4 tsp. cinnamon
2 ripe avocados, halved and sliced into 1/4 inch slices
Very good balsamic vinegar
Kosher salt
Freshly ground black pepper
Pre-heat the oven to 350 degrees Fahrenheit. Clean and trim the beets. Spread a piece of foil on a cookie sheet, place beets on the foil, and drizzle with olive oil, salt and pepper. Fold the foil to form a packet, and place the packet (on the cookie sheet) in the oven. Roast for 45 minutes to an hour, or until the beets are tender when poked with a fork. Remove pack from oven and set aside to cool.
Once the beets are cool to the touch, peel them and slice them into 1/3 inch wedges. Place the wedges in a medium bowl and toss with the lemon juice, a bit of salt and pepper and the cinnamon.
Leaving the lemon juice behind, divide the beet wedges between four plates or bowls and arrange them in a starburst pattern. Add the avocado, building on the starburst. Sprinkle each salad with a bit of salt and pepper, then drizzle generously with the balsamic vinegar. Serve immediately.
Serves four.
In case you've missed the fun over the last couple of days, I think it's my obligation to clue you into some of the silliest, most wonderful times being had over on Twitter.
If you follow Ruth Reichl, you know that her tweets are gorgeous pieces of poetry, evoking a life lived in freshly baked bread, briny oysters and flaky croissants. They make you smile, salivate and hungry for more. And we tweeps aren't the only ones who've noticed. Anthony Bourdain and Eric Ripert have started airing a segment called "The Tao of Ruth" as part of their radio show. They read Reichl's latest tweets reverently, like haikus, all the while playing Beat era percussion in the background.
It's hilarious.
But the most recent development in this saga is even better - an anonymous genius has created Ruth Bourdain, a mashup of Reichl's tweets with Bourdain's foul language and penchant for exotic foods and illicit substances. The result is pure brilliance.
Even better, Reichl appeared on Bourdain's and Ripert's show this week to laugh with them about their segment and ponder the identity of Ruth Bourdain's creator. One thing's for certain, though: that picture is scary.
Happy Saturday, folks! It's a stunning morning here in New York, and I'm getting ready to go get pretty at the salon this afternoon. I'm sure most East Coasters, at least, are out and about today (I'm hearing good things about the weather out west, too) - but, just in case you're not, here are some fun treasury items to psych you up!
First, what seem to be the ultimate answer to (the pure, unadulterated nastiness that is) the Cadbury Creme Egg. Vosges has created a series of Easter eggs, the most intriguing of which (to me, at least) are the Wink of the Rabbit (caramel, pecans and dark milk chocolate) and the Bacon and Eggs (bacon caramel and dark chocolate). These will definitely be making an appearance in my Easter basket. Swoon.
Next, a recipe for Dijon chicken from Kerry Saretsky's French in a Flash series over on Serious Eats. This looks like a delicious, easy one-pot meal, and I predict that I will make it for lunch sometime soon. Mustard and wine and thyme - what could be better?
Finally, some ridiculously delicious looking apple dumplings. These look absolutely insane. I must have them. Now. Immediately. Many thanks to Design*Sponge and their contributor, food photographer Stacy Newgent, for making my day.
a new detailed map to the race start
A mechanic was removing a cylinder head from the motor of a Harley motorcycle when he spotted a well-known heart surgeon in his shop. The surgeon was there, waiting for the service manager to come and take a look at his bike. The mechanic shouted across the garage, "Hey, Doc, can I ask you a question?"
The surgeon a bit surprised, walked over to the mechanic working on the motorcycle. The mechanic straightened up, wiped his hands on a rag and asked, "So Doc, look at this engine. I open its heart, take valves out, fix 'em, put 'em back in, and when I finish, it works just like new. So how come I get such a small salary and you get the really big bucks, when you and I are doing basically the same work?"
The surgeon paused, smiled and leaned over, and whispered to the mechanic...
"Try doing it with the engine running."
I recently had the opportunity to judge at the New York City Science and Engineering Fair (NYCSEF), held on March 7 at City College. NYCSEF is the largest city-wide science, math and technology research competition for high school students.
About 500 students were competing for 20 spots at an international competition in May. I was inspired by some very strong, polished, and well prepared students, along with the impressive resources being offered by NYC government agencies, research institutions, and universities. It was good to join 200+ area professionals who want to support and encourage young people who are potentially interested in a career in science, technology, engineering or math (STEM).
I was particularly moved by a pair of enthusiastic students who were collecting survey data to advocate for the health of their classmates and influence school policy. In the short time we had to talk, I was able to give them some basic feedback about using data to build a case and influence decision makers. In my focus on encouraging STEM careers, I had overlooked the power of math and statistics literacy for anyone who wants to have a voice and make an impact in their community. I wonder how many more students could be excited about math if they saw practical applications to their everyday life.
See: http://collegenow.cuny.edu/sciencefair
Back to blogging after a gap of 8 months. I have been working on some cool optimization stuff related to Hibernate. Here is a brief summary of the best practices i have come across on this and past assignments involving Hibernate. # Practice What? Why? How? 1 Use Lazy Load Don’t load objects until you need to use them. Queries involve lesser joins, so [...]
Continuing our tradition of exploring the city's best lobster rolls, my brother Jeremy and I met up for a pre-theatre lunch at Luke's Lobster on Saturday afternoon. Luke's, in the East Village, has a distinctly different sensibility than our last lobster roll venue, Pearl's. While Pearl's is a sit-down restaurant with wine and desserts, Luke's is a strictly order-and-eat-at-the-stool-in-the-window kind of place. Both, though, have their roots in the classic New England seafood shack.
Where Pearl's roll is more of a salad roll (mayonnaise, onion, celery), Luke's is pure and simple. The generous heap of lobster meat is served in a butter-toasted hot dog roll (the classic choice) and topped with more butter (drawn, this time) and some dusty, diner-style black pepper. The lobster itself is fantastic - juicy, tender and full of that wonderful, clean flavor of the North Atlantic.
Even better, you can feel good about eating the seafood at Luke's. It's all sustainable, caught in Maine, and shipped in quickly. I'm not saying that being virtuous makes the food taste better, but it sure doesn't hurt.
Jeremy also ordered a cup of the clam chowder, which was stellar. It's hard to tell from this photo, but the soup was full of little chewy bits of fresh clam and tender potato. It was creamy, but not overwhelmingly thick, and had that nice sweetness I look for in a seafood chowder. I can't wait to go back and try the shrimp and corn chowder, and soon.
Overall, our verdict is that Luke's is a fabulous bargain ($14 for a lobster roll) and delicious. Our heart, however, remains at Pearl's. Both of us prefer a lobster roll that bites back, even just a little bit. And it's no secret that I love me some mayonnaise. That said, I highly recommend a trip to Luke's - a must for any seafood-loving New Yorker, for sure.
Anyone have a vote for where we should head for our next lobster roll?
Luke's Lobster
93 East 7th Street (Between 1st and A)
212.387-8487
Some days back, my 5 year old son had this question about why do I need to go to office. My husband and I tried to explain to him how I earning money helps us to buy him toys, chocolates etc. He did not seem convinced, and said that his father is already earning money! Discussion got into another topic, and this was left as is.
Again yesterday he talked to me about why do I go to office, when the lady at my neighborhood is a home maker. I thought probably he sees lot of women who are not working, and are home makers, and hence this question is still on his mind.
Thought of giving a different answer to him this time. Started explaining him that everyone chooses a field that they like, study in that and later work on it. I said, I liked engineering, so studied that, and then got into this computer field, and I love doing that now. So I go to office, because its my choice. Some do not go, because they like don't like to. I also tried to push in examples of how his teacher likes to teach them and hence goes to school, which is her office. He loves his teacher, so probably was happy that she goes to her office :)
I hope he liked the answer this time, as he hasn't come back to me with this question again. But I am glad that he is thinking about what he sees around him, and talking to me about it. It makes me think as well :)
After Louisa's most excellent reading at the Lady Jane Salon, she and I and our friend Arie decided to walk a block west and get some dinner at Lupa. Now, normally I don't get to eat Italian food with Louisa, since it's Nick's least favorite cuisine. But she was sans Nick on this trip, so I decided the time was right for an introduction to my beloved Roman pastas.
We started with the verdure misto, a platter of seasonal vegetables, each prepared in a unique way. The night we went, the platter featured assorted olives, broccoli rabe with ricotta, marinated squash, beets with pistachio sauce, treviso and brussels sprouts with pecorino. I enjoyed the sprouts, but thought they had a bit too much cheese going on - it was hard to find the spicy bite of the sprouts under all of that. The beets, though, were the star of the show. The pistachio sauce was insanely delicious, and the light nuttiness played beautifully with the sweetness of the beets.
Next, we each ordered a plate of pasta. I went for the bucatini all'amatriciana, a long, hollow pasta with tomatoes, red onion and guanciale (cured pork jowl, similar to bacon). I make this a lot at home, since it can be thrown together with ingredients I always keep on hand (I use fresh tomatoes in the summer, canned in the winter.) - and, I have to say, I like my version better. This one was good and bacony, but the red onion was a bit too sweet to act as a foil to the tomatoes, and there wasn't enough red pepper going on. The pasta was perfect, though.
Louisa's dish, on the other hand, was stellar. She ordered the bavette cacio e pepe, a classic Roman dish. Bavette is a thin, flat pasta - a bit like fettucine, but made without egg. The pasta is tossed with copious amounts of cheese (cacio) and pepper (pepe) until it's both creamy and mildly spicy. This version was perfect - silky, smooth, creamy, but with a bit of a bite.
We drank a bottle of Italian white and stumbled out into the chilly spring evening. Fortified by pasta and beets, though, it didn't seem so cold anymore.
Lupa
170 Thompson Street (Between Houston & Bleecker)
212.982.5089
This is a follow-up to my earlier post on performance evaluation in agile teams
Traditionally our organization followed a balanced scorecard approach where organizational priorities get cascaded down to each individual in the form of performance goals for each evaluation period. Usually the Goals of the Appraisee is tied to the goals of appraiser. Performance evaluation happens in a bottoms-up manner where performance of each individual is aggregated to the next level (i,e, individual -> project team -> account team -> solution unit etc)
Tailoring done for Self Organizing Agile Teams
While we retained the basic philosophy of Balanced Scorecard, we did a number of tailoring specific to a self organizing agile teams. Following are the salient points:
1. Introduce certain degree of flexibility in selecting your individual goals: While we retained the alignment of individual goals to organizational priorities, we allowed some flexibility for individuals to pick their own goals. We defined a framework around Impact on end customers, Impact on organization and effort towards self development and allowed individuals to pick their own goals and targets around these.
2. Peer Evaluations: While we retained the best practices of bottom up evaluations, we added an additional step of "Peer Evaluation" specific to the agile teams
Peer Evaluation process
As the name suggests, Peer Evaluation process focuses on sharing your own assessment of your performance with your Peers (i.e Project teams) and getting their feedback. While we encouraged team to give constructive feedback on areas of improvement, we deliberately avoided any criticism of performance in this forum (Other mature teams may choose to disagree). At the end of the session, each individual provides a performance ranking of rest of the team and hands it over to the 'Appraiser' or 'functional Manager' as appropriate. Looking at the sensitivity around performance evaluations, we chose to keep this part confidential (again - other team may chose to share these rankings with the team too). The Appraise/Functional manager aggregates these rankings from all member of the team and prepares the performance ranking of the entire team.
This process work in conjunction with the one-to-one performance evaluation discussion where the appraiser provides subjective feedback. At the end of the evaluation cycle, the performance ranking of the team gets rolled-up to the next level.
In the next post, I will share our experience and learning from applying the above approach within our team.
I thought a historical opportunity had passed me by, but a full decade after the turn of the millennium in 2010 I found my first Y2K bug! If you, like me, were working in eCommerce (who remembers that buzzword?) in the late 1990s and thought you missed your chance I'm here to tell you its still not too late. As long as you work for the right company with the enough legacy technology around you can still find a Y2K bug of your own!
What was going on?
I was writing a new Rails application on top of an old Oracle database. The database had a constraint
graduationdate BETWEEN TO_DATE('01-JAN-1900','DD-MON-YYYY') AND TO_DATE('31-DEC-2100','DD-MON-YYYY')
validate :validate_graduation_date
def validate_graduation_date
unless graduationdate.nil?
earliest_date, latest_date = Date.parse('01-JAN-1900'), Date.parse('31-DEC-2100')
errors.add(:graduationdate, 'must be between 01-JAN-1900 and 31-DEC-2100') unless graduationdate > earliest_date and graduationdate < latest_date
end
end
describe 'graduation date' do
it 'should not allow July 4, 1776' do
education = Factory.build :education, :graduationdate=>Date.parse('04-JUL-1776')
education.should_not be_valid
end
it 'should allow Aug 1 1970' do
education = Factory.build :education, :graduationdate=>Date.parse('01-AUG-1970')
education.should be_valid
end
it 'should allow Mar 15 2000' do
education = Factory.build :education, :graduationdate=>Date.parse('15-MAR-2000')
education.should be_valid
end
it 'should not allow Jan 1, 2525' do
education = Factory.build :education, :graduationdate=>Date.parse('01-JAN-2525')
education.should_not be_valid
end
end
select count(*) from education where graduationdate = to_date('01-jan-1900')
COUNT(*)
----------------------
116232
>= and lt;=.
validate :validate_graduation_date
def validate_graduation_date
unless graduationdate.nil?
earliest_date, latest_date = Date.parse('01-JAN-1900'), Date.parse('31-DEC-2100')
errors.add(:graduationdate, 'must be between 01-JAN-1900 and 31-DEC-2100') unless graduationdate >= earliest_date and graduationdate <= latest_date
end
end
it 'should not allow Dec 31 1899' do
education = Factory.build :education, :graduationdate=>Date.parse('31-DEC-1899')
education.should_not be_valid
end
it 'should allow Jan 1 1900' do
education = Factory.build :education, :graduationdate=>Date.parse('01-JAN-1900')
education.should be_valid
end
it 'should allow Dec 31 2099' do
education = Factory.build :education, :graduationdate=>Date.parse('31-DEC-2099')
education.should be_valid
end
it 'should allow Jan 1 2100' do
education = Factory.build :education, :graduationdate=>Date.parse('01-JAN-2100')
education.should_not be_valid
end
Finally! I found a decent picture of the (unsliced) cake from Caroline's shower. This creation was a labor of love on the part of Ellie's mom, Mrs. Maletta. Isn't it gorgeous? And, I hasten to add, it was delicious. Three layers of plain yellow cake (Caroline's favorite) with one layer of dulce de lece and one of nutella in between.
I die.
The treasury is back, and I'm ready to rock! In penance for my absence last weekend, I've got a couple of extra tidbits for you here. Let's get to it!
First up, a house I would move into this very instant, though I can't imagine its inhabitants would ever willingly leave. Design*Sponge posted this amazing tour of Fitzhugh and Lindsay's Brooklyn brownstone earlier this week, and I've been wiping the drool off my chin ever since.
Next, one of my new blog obsessions, Mrs. Lilien. If you love colorful, preppy-modern fashion, this is the blog for you. It's like a daily shot of happiness, the blog equivalent of eating a tiny little clementine each morning. While I chafe slightly at the "Mrs." moniker being used to apply to all the (imaginary) stylish women conjured by the author (Kelley Lilien, an incredible designer and stylist), I can't help but love the jewelry. And the shoes. And the sunglasses.
I know I just threw a party, but I'm already hankering for another one, and this post from Such Pretty Things isn't helping matters one bit. This is pretty much the most adorable slumber party ever, complete with natural soda, candy, a great cake and popcorn for the movie. Want, want, want.
Before I go, here's one last adorable apartment. Imagine having your mom, professional interior designer, fix up your first apartment. Just imagine! I'd love to have that now, for goodness' sake. Regardless, we can all crib ideas from Lauren McGrath's adorable home. I love that lucite bench with the vanity, and the yellow lamp makes me plotz.
Class Factory will dynamically create classes using a factories model similar to factory_girl. But instead of passing a block with model attributes into the factory definition, you pass in a migration defining the attributes of the new model class you want to create:
ClassFactory.define :person do |p| p.string :first_name p.string :last_name p.integer :age end
Now when you need a “Person” class in your tests you create one like this:
ClassFactory :person => Person(id: integer, first_name: string, last_name: string, age: integer)
This can be useful if you're writing tests for a gem or plugin and don't want to load the entire Rails environment, or have access to existing models in a target application. By default Class Factory creates ActiveRecord model classes, but using the :super option you can create any sort of Ruby class. Class Factory also makes it easy for each of your tests to use a different variation on a target class. For example, this will delete the Person model we created above, and create a new Person model that belongs to a group:
ClassFactory :person, :class_eval => 'belongs_to :group' do |p| p.string :first_name p.string :middle_name p.string :last_name p.string :group_id end => Person(id: integer, first_name: string, middle_name: string, last_name: string, group_id: string)
Creating different variations of the same class can be useful if you're writing tests for a generator, plugin or some other code which has different behavior depending on what classes you run it against.
Options
Default: create a new ActiveRecord model, along with a corresponding table in your database:
ClassFactory :person
Execute a migration on the new table specified as a block, defining the attributes of the new model class:
ClassFactory :person do |p| p.string :first_name p.string :last_name p.integer :age end
Create a class with a specified superclass (default is ActiveRecord::Base):
ClassFactory :person_array, :super => Array
If the super class is not a subclass of ActiveRecord::Base then Class Factory won't create a table or run a migration. You can use this to create plain Ruby object classes.
Create a class called “DifferentClass” instead of “Person:”
ClassFactory :person, :class => 'DifferentClass'
Run the given code inside the new class using class_eval:
ClassFactory :person, :class_eval => 'has_many :shoes'
Create a table with the given name, instead of a table called “people:”
ClassFactory :person, :class_eval => 'set_table_name :table_name', :table => 'table_name'
If you provide options when the factory is defined they will be applied to each class created with the factory. You can also provide options when you create a class, in which case they will override the factory options.
Install
gem install class_factory
Code
Detailed Example
Start an irb session and require class_factory (this will also require active_record):
$ irb > require 'rubygems' => true > require 'class_factory' => true
Create an in-memory SQLite test database:
> ActiveRecord::Base.establish_connection({ :adapter => 'sqlite3',
:database => ':memory:' })
=> #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x19cfecc...
Define a person class factory, and create a Person class:
> ClassFactory.define :person do |p|
> p.string :first_name
> p.string :last_name
> p.integer :age
> end
=> #<ClassFactory:0x19c6fac @definition={:name=>:person, :migration=>...
> ClassFactory :person
=> Person(id: integer, first_name: string, last_name: string, age: integer)
Now create an instance of a Person and count how many records we have in our test database:
> Person.create :first_name => 'Barack', :last_name => 'Obama', :age => 48 => #<Person id: 1, first_name: "Barack", last_name: "Obama", age: 48> > Person.count => 1
Next redefine the Person class and override the options set in the factory above; this time it will belong to a group. Note that the existing people table will be dropped and a new, empty people table created:
> ClassFactory :person, :class_eval => 'belongs_to :group' do |p| > p.string :first_name > p.string :middle_name > p.string :last_name > p.string :group_id > end => Person(id: integer, first_name: string, middle_name: string, last_name: string, group_id: string) > Person.count => 0
Create a group class that has many people:
> ClassFactory.define :group, :class_eval => 'has_many :people' do |g|
> g.string :name
> end
=> #<ClassFactory:0x18a05d8 @definition={:class_eval=>"has_many :people", ...
> ClassFactory :group
=> Group(id: integer, name: string)
Finally, recreate the Barack person record and add him to the “presidents” group:
> g = Group.create :name => 'Presidents'
=> #<Group id: 1, name: "Presidents">
> p = Person.new :first_name => 'Barack', :last_name => 'Obama', :age => 48,
:group => g
=> #<Person id: nil, first_name: "Barack", last_name: "Obama", group_id: 1,
age: 48>
> p.save
=> true
> g.people
=> [#<Person id: 1, first_name: "Barack", last_name: "Obama", group_id: "1",
age: 48>]
Racing bicycles does keep you happy. Check out that smile :)
Raceday is just around the corner and we have a kick ass trail all ready to be burnt up.
Date: 21st March 2010
Time: 0700 hrs IST (volunteers meet at 6:30am)
Category: Off road Trail ride
Distance: 22km (5.5km loop x 4 laps)
What are you waiting for, go ahead and REGISTER NOW
This race onwards, we will have a small handout which will have all the details (driving directions, checklist, map etc) about the race. Makes it much simpler to keep a printout with you on race day rather than scrambling for driving instruction. Please try and use waste paper to take this printout.
If you have ideas on how to make this better, please do let us know.
Growing up, Caroline and I spent pretty much every afternoon together. We rode our bikes all over our little town, clambering down hidden paths and through marshland to get to the tiny coves and tidal pools ringing the shoreline. We took my dog, Buster (cutest dog ever) for long walks and introduced him to shellfish and seaweed at the beach. We ate whole packages of Chips Ahoy at her house, and baked endless batches of Tollhouse cookies at mine. We made gingerbread houses every Christmas, and Caroline was one of the few people who kept in touch with me when I went off to boarding school in 9th grade.
So when our friend Ellie suggested that the two of us throw Caroline a shower (and volunteered her parents' lovely home as a venue), how could I disagree? We started off by talking about some of Caroline's favorite things: birds (she's had at least one bird as a pet at all times since we were little), the color blue and candy. Lots and lots of candy.
My incredibly talented friend Miya created some gorgeous invitations for us, and we were off and running. Next came menu planning (ladies who lunch with a Southern twist, plus a ton of candy), decorations (Can you say tissue paper arts and crafts?) and games.
I headed out to Connecticut on Friday morning to spend the day cooking and crafting with Ellie and her incredibly gracious mom (known to one and all as Mrs. Maletta). We chopped and baked and boiled and mixed for hours; the menu we'd chosen was simple, but preparing food for 25 when you're used to cooking for - at most - six is a completely different proposition.
By Friday evening we settled in to make decorations for the dining area. Inspired by the profusion of pom-poms and poofs I'd seen on event planning and wedding blogs, I'd decided to make a bunch of them in different sizes and hang them over our tables. We also hung a wall of streamers near the front door, the better to make a little spot for photo ops.
And, of course, we had candy. Jelly beans, Reese's Pieces Easter eggs (Twice the peanut buttery goodness!) and M&Ms. A little chocolate, a little gummy, a little peanut butter: most of the major candy food groups covered.
We started with two hors d'ouevres: my trusty homemade gravlax, and my Aunt Cathi's ridiculously delicious endive leaves with goat cheese, walnuts, oranges, chives and a bit of balsamic. They are even easier than the gravlax, and will definitely be a recurring feature in my repetoire. In fact, they were so popular with the assembled ladies that I only managed to snap a photo of the last one on offer.
Next, we moved into the dining room and onto lunch. We feasted on a green salad with cucumbers and artichoke hearts, green beans with butter and herbs, curried chicken salad, beet salad with oranges and Thomas Keller's buttermilk biscuits. I chose the menu items based on a couple of criteria: things Caroline loves, things that are easy to serve in a buffet and things that will be hearty enough for a vegetarian or someone who gave up meat for Lent.
A little present opening (during which the bride-to-be was presented by yours truly with Peeps) and a Schramsberg toast later, and things were winding down. We sent everyone home with orange sugar cookies shaped like birds and sent the bride and groom home with a trunkful of goodies. And Mrs. Maletta? She liked the pom-poms so much that we left those with her.
Endive with Walnuts, Goat Cheese and Oranges
Adapted from Cooking Light
2 heads Belgian endive
1/4 cup goat cheese
1 blood or Cara Cara orange, peeled and sliced into 1/2-inch segments
1/3 cup walnuts, coarsely chopped
2 tbs. chives, finely chopped
A few tablespoons very good balsamic vinegar (It needs to be thick and sweet!)
Kosher salt and freshly ground black pepper
Separate the leaves from the endive head and place them on a platter. Crumble a bit of goat cheese into each leaf, then add one orange piece to each. Add the walnuts, diving them evenly amongst the leaves. Top with the chives.
Sprinkle each endive with a few drops of the vinegar, and top with a bit of salt and pepper.
Serve, and watch your guests swoon.
Serves 6 as an hors d'ouevre.
Curried Chicken Salad
Adapted from The Barefoot Contessa
3 whole (6 split) chicken breasts, bone-in, skin-on
Olive oil
Kosher salt and freshly ground black pepper
1 1/2 cups good mayonnaise
1/3 cup dry white wine
1/4 cup Major Grey's chutney
3 tablespoons curry powder
2 large stalks celery, cut into a quarter-inch dice
2 thinly sliced scallions, white and green parts
1/4 cup raisins
1 cup whole roasted, salted cashews
Preheat the oven to 350°F.
Place the chicken breasts on a sheet pan and rub the skin with olive oil. Sprinkle liberally with salt and pepper. Roast for 35 to 40 minutes, until the chicken is just cooked. Set aside until cool enough to handle. Remove the meat from the bones, discard the skin, and dice the chicken into large bite-size pieces.
In the meantime, make the dressing. Combine the mayonnaise, wine, chutney, curry powder, and 1 1/2 teaspoons salt in the bowl of a food processor fitted with the steel blade. Process until smooth. (You can also do this with an immersion blender - or a normal blender as well!)
Combine the chicken with enough dressing to moisten well. Add the celery, scallions, and raisins, and mix well. Refrigerate for a few hours (or overnight) to allow the flavors to blend. Add the cashews and serve at room temperature.
Serves 6-8.
This is a three part blog discussing ways of doing effective performance management in agile teams. In this part, I will try to establish the problem statement. In Part II, we will discuss one approach I am trying out as a pilot in my team. In the concluding part, I will share results from the pilot.
As usual, i would request all netizens to add their valuable feedback on the way.
Problem Statement:
For quite some time, I have been grappling with finding ways to do effective performance evaluations in Agile teams.
In ideal agile organizations we should be assessing the performance of the project teams, instead of assessing performance of individuals. Extending that line of argument, agile teams should also share the realized business value delivered by their project. But that's Utopian.
In real world, enterprise IT invariably is treated as a support function to the business. Instead of sharing business value, enterprise IT is typically run with a predefined budget with a certain number of project teams. Most of the enterprises (like ours) use Forced Ranking as a means to incentivize high performance. Performance of individual employees are ranked relative to each other and the resultant grouping is fitted into the form of a bell curve, there-by separating high performers from average performers and from the rest.
This approach works for many organizations. In order to make forced ranking model work efficiently, pioneers of this model - General Electric Corp, defines following three success criteria for your performance evaluation system:
- have dimensional consistency: Its scales and criteria must be applicable across all employee categories
- be based on objective data: "You just aren't going to be able to find quantitative measures for everything that is important to you. But you can still be objective—you can make decisions that are not colored by your emotions or personal preferences."
- produce rich analytical feedback: Employees value meaningful assessments of their work more than any other performance motivator
So far so good..but things get blurry when it comes to agile teams. Is it possible to set "dimensional consistency" for agile teams? Can there be a single scale for a number of different self organizing agile teams? How objective can you get to derive performance indicators vis-a-vis following agile practices of reducing ceremonies and minimizing waste. Most important, who does performance evaluation in agile teams? A functional manager? Or (in scrum context) the scrum master/ product owner?
So how do we approach performance evaluations (maintaining the essence of force ranking from organizational standpoint) in agile teams? In following post, I would discuss the process we are trying out within my group (comprising of a number of agile teams).
Reference:
For whom the bell curve tolls
Punishing by Rewards
For all first time tablet users:
Before committing to the pricey apple iPad, here is a cheaper option to get familiar with tablets..
FirstView offers $95 tablet, running on android 1.4 (??# - Well..there is a plan to upgrade to latest version of Android!)..comes fully loaded with wi-fi and 3G..
Lately I've been thinking about the facets of Agile that are important to me on a distributed team.
Rich Communication
A major hurdle in working with a distributed team is maintaining as rich communication channel as possible. A couple of points to consider:
Think globally by going local
All development should be local to the workstation. Incredible efficiencies can be gained by not worrying about network bandwidth, development servers, outages during "off hours" and so on. At any time in the development cycle the developer should be able to unplug their workstation and continue uninterrupted.
Conform to best practices, not "best tools"
We are craftsman in the trade, the tools we use are very personal and a certain level of freedom should be maintained. Of course still share ideas and tricks to learn and grow. If the code integrates at the CI server, the tests pass, the code is clean, and productivity maintained.. Who really cares how it got there.
Continuous Integration
This is a must in a distributed team. All code submissions should be integrated and deployed with every submission. This allows the developer to work on their local copy and still integrate regularly with the product. It also provides a direct feedback loop to the stakeholder. This is a no-brain win.
Virtual Walls for Story Boarding
Story boarding is a fantastic tool for release planning and iterative development. Try to emulate that "face-to-face whiteboard" experience (above) as much as possible. There are several free tools that can facilitate this, the tool is irrelevant. What is important is a real time representation of the fluidity of stories that the developers have access too. I discourage spreadsheets as this is usually centrally managed, hard to maintain, and restricts the developers access. This is the developer process, let them have access to it, take ownership, pride, and understand impact.
I was thrilled to know that India would soon be the first country in the world to put its e-governence infrastructure on the cloud. This would include the most awaited Uniquie ID project led by Nandan Nilekani and the online railway booking system plus few other services. What this means is faster transactions on websites like IRCTC which already has more than a million registered users. Way to go India!
When I stumble on a really innovative technology application for the social good, it seems that web designers are in the thick of things (IDEO comes prominently to mind). Today I'm looking at ushahidi.com, an open source platform for crowdsourcing information on a crisis/disaster relief efforts and displaying it visually on a map or timeline. The link comes compliments of the IXDA discussion forum, a professional network for interaction design professionals. For people interested in efforts to help Haiti, or developers or designers looking to contribute their skills to a good cause, this site is definitely worth a look.
Hello, dear readers! I know, I know - it's been a few days since last we met. Things have been crazy on my end, thanks in large part to the owner of the adorable dog staring so plaintively at you above (He just wants some of your food - is it so hard to share?). I have a crazy weekend approaching, as well - I (along with two partners in crime) am throwing a bridal shower for an old friend on Saturday, so I may well be MIA till Sunday.
I'll try to post a bit before then, though. I really, really will!
I couldn't find anything on how to connect to an Oracle database using ruby's sequel with just a TNS configuration....here is what worked for me:
1
|
Sequel.connect(:adapter => 'oracle', :user => 'something', :password => 'secret', :database => '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<somehost>)(PORT=<someport>))(CONNECT_DATA=(SID=<somesid>)))') |
I'm interested in exploring web-scale analytics* and prediction markets in 2010...
* cloud computing, mapreduce, robust batch processing etc.
I'm interested in exploring web-scale analytics* and prediction markets in 2010...
* cloud computing, mapreduce, robust batch processing etc.
A beautiful line said in the below article. I'f recommend reading the article at below link multiple times. It is so truly beautiful.