Logo

Excellence

5 months ago | Prasoon Sharma: Enterprise Software Does not Have to Suck



What an excellent way to think about excellence...

Source: http://sethgodin.typepad.com/files/what-matters-now-1.pdf

Excellence

5 months ago | Prasoon Sharma: Enterprise Software Does not Have to Suck



What an excellent way to think about excellence...

Source: http://sethgodin.typepad.com/files/what-matters-now-1.pdf

Spring at the Greenmarket.

5 months ago | Megan Blocker: Queenie Takes Manhattan

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.


Wait - I thought it was spring!

5 months ago | Megan Blocker: Queenie Takes Manhattan

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.

Kanban vs. Scrum - Lessons Learned

5 months ago | Amy Grandov: Technology for Social Innovation

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?

Queenie's Treasury

5 months ago | Megan Blocker: Queenie Takes Manhattan

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.

Rework book review

5 months ago | Prasoon Sharma: Enterprise Software Does not Have to Suck


Finished reading Rework by Justin Fried and DHH... I highly recommend it... Two thumbs up!

It is unconventional like Getting Real... To gen a sneak peek before you pick it up, check out Fast Company's (pre)view.

As I reflect on the book, I feel inspired. There are many tips that we practice as an organization but many that we need to adopt

My favorite part is how the authors conclude... "Inspiration is perishable. If you want to do something, you've got to do it now... Inspiration is a magical thing, a productivity multiplier, a motivator. But it won't wait for you"





It was a quick read... took me ~ 3 hours in all (between all the interruptions during the day :)
It was easy to read and hard to put down once I started (read a couple of chapters while walking the streets of midtown Manhattan... I don't recommended it, unless you want New Yorkers to give you a stare when you bump into them ;)

Here's what I was doing while reading this book...
  • I was laughing... yes, laughing... not something you see while reading a book on such a topic but it made me laugh... Jason and DHH have used a casual yet striking style to send across their message
  • I was reading it in 15 minute bursts. Great idea to break the book into many small chapters... the authors took their own advise and broke down a 200+ page book into many 1 - 2 page chapters. Finishing each chapter gave me a sense of accomplishment :-) and was also a great way to leave it at a meaningful point to pick it up again... Small chapters with large actionable titles also made it easy to refer back...
  • I started highlighting some sections in the book and kept a highlighter with me throughout. I ended up marking more than I've ever done in other business books (Yes, all my science books look like my daughter's color book). I marked sections as must-read for my friends, my family and myself
  • I was using it in my conversation (already!). The book is filled with great, actionable tips and "soul-searching" questions. Do you expect anything short of that from the guys at 37Signals? In fact, the insights are so actionable that I requested a couple of team members to read a chapter or two while discussing improvement opportunities
  • I stopped and reflected. "Are you working on your best idea?" and other soul searching questions like this made me search deeper... Inspired me to keep looking...
  • I felt good.... there are some tips that I breezed through smiling as we practice it already in our team (planning is guessing, ignore the details early on, start at the epicenter, meetings are toxic, less mass, embrace constraints, throw less at the problem, launch now, interruption is the enemy of productivity, good enough is fine, quick wins, hire when it hurts, test drive employees, own your bad news etc.)

Parts that will help me re-focus, re-energize, and improve overall...
  • Ignore the real world: "The real world isn't a place, its an excuse. It's a justification for not trying. It has nothing to do with you."
  • Learning from mistakes is overrated: "What do you really learn from mistakes? ... what not to do again, but how valuable is that? You still don't know what you should do next." "Success is the experience that actually counts"
  • Make a dent in the universe: "What you do is your legacy."
  • No time is no excuse: "...the perfect time never arrives"
  • "Let your latest grand ideas cool off for a while"
  • Build an audience: "share information that's valuable and you'll slowly but surely build a loyal audience"
  • Everything is marketing: "... everyone in your company is doing 24/7/365.... phone... email..."
  • "Instead of explaining what something sounds like, hum it. Do everything you can to remove layers of abstraction."
  • Hire the better writer: "Clear writing is a sign of clear thinking." It reminded me how badly I need to improve my writing skills. As a start, I need to finish the book Jeanine gave me (On Writing Well by William Zinsser)


    Here are some favorite parts...
    • Workaholism: "Workaholics aren't heroes. They don't save the day, they just use it up"
    • "When you don't know what you believe.... everything is debatable. But when you stand for something, decisions are obvious."
    • "Scaring away new customers is worse than losing old customers"
    • Out-teach your competition: What a great tip! I became a fan instantly (although I don't use any software products from 37Signals). It actually inspired me to pen down how I felt about the book (something I have'nt done before... so bear with me while I struggle thru my first book review). It reinforced the idea that we can build trust with a large online audience too (one-on-one interactions aren't the only way and I can't use it as an excuse). 
    • Emulate drug dealers: "Make your product so good, so addictive, so "can't miss" that giving customers a small free taste makes them come back with cash in hand"
    • Do it yourself first: "Never hire anyone to do a job until you've tried to do it yourself first." We've practiced this successfully in past and second it completely. For example, before hiring our first Ruby engineer (Matt), Amit and I took time to understand it, try it out on a project for 3 - 4 months. It worked really well (no, not the code we produced but the process of identifying what exactly we needed).
    • How to say you're sorry
    • "Don't create a policy because one person did something wrong once. Policies are only meant for situations that come up over and over again." This reminds me of a public calendar incidence - someone shared (unintentionally of course) official meeting information on a public calendar and boom! - we shut off access to that calendar for everyone. Should we reconsider such decisions?

    This book has passed my test for a great book. My test is pretty simple - Is this a book I would want my daughter to read when she grows up? This one has made it to that list (a list of mostly biographies of world leaders). Yes, the four letter word did not stop me from recommending it to her. Keep up the good work. I'm a fan.

    Rework book review

    5 months ago | Prasoon Sharma: Enterprise Software Does not Have to Suck


    Finished reading Rework by Justin Fried and DHH... I highly recommend it... Two thumbs up!

    It is unconventional like Getting Real... To gen a sneak peek before you pick it up, check out Fast Company's (pre)view.

    As I reflect on the book, I feel inspired. There are many tips that we practice as an organization but many that we need to adopt

    My favorite part is how the authors conclude... "Inspiration is perishable. If you want to do something, you've got to do it now... Inspiration is a magical thing, a productivity multiplier, a motivator. But it won't wait for you"





    It was a quick read... took me ~ 3 hours in all (between all the interruptions during the day :)
    It was easy to read and hard to put down once I started (read a couple of chapters while walking the streets of midtown Manhattan... I don't recommended it, unless you want New Yorkers to give you a stare when you bump into them ;)

    Here's what I was doing while reading this book...
    • I was laughing... yes, laughing... not something you see while reading a book on such a topic but it made me laugh... Jason and DHH have used a casual yet striking style to send across their message
    • I was reading it in 15 minute bursts. Great idea to break the book into many small chapters... the authors took their own advise and broke down a 200+ page book into many 1 - 2 page chapters. Finishing each chapter gave me a sense of accomplishment :-) and was also a great way to leave it at a meaningful point to pick it up again... Small chapters with large actionable titles also made it easy to refer back...
    • I started highlighting some sections in the book and kept a highlighter with me throughout. I ended up marking more than I've ever done in other business books (Yes, all my science books look like my daughter's color book). I marked sections as must-read for my friends, my family and myself
    • I was using it in my conversation (already!). The book is filled with great, actionable tips and "soul-searching" questions. Do you expect anything short of that from the guys at 37Signals? In fact, the insights are so actionable that I requested a couple of team members to read a chapter or two while discussing improvement opportunities
    • I stopped and reflected. "Are you working on your best idea?" and other soul searching questions like this made me search deeper... Inspired me to keep looking...
    • I felt good.... there are some tips that I breezed through smiling as we practice it already in our team (planning is guessing, ignore the details early on, start at the epicenter, meetings are toxic, less mass, embrace constraints, throw less at the problem, launch now, interruption is the enemy of productivity, good enough is fine, quick wins, hire when it hurts, test drive employees, own your bad news etc.)

    Parts that will help me re-focus, re-energize, and improve overall...
    • Ignore the real world: "The real world isn't a place, its an excuse. It's a justification for not trying. It has nothing to do with you."
    • Learning from mistakes is overrated: "What do you really learn from mistakes? ... what not to do again, but how valuable is that? You still don't know what you should do next." "Success is the experience that actually counts"
    • Make a dent in the universe: "What you do is your legacy."
    • No time is no excuse: "...the perfect time never arrives"
    • "Let your latest grand ideas cool off for a while"
    • Build an audience: "share information that's valuable and you'll slowly but surely build a loyal audience"
    • Everything is marketing: "... everyone in your company is doing 24/7/365.... phone... email..."
    • "Instead of explaining what something sounds like, hum it. Do everything you can to remove layers of abstraction."
    • Hire the better writer: "Clear writing is a sign of clear thinking." It reminded me how badly I need to improve my writing skills. As a start, I need to finish the book Jeanine gave me (On Writing Well by William Zinsser)


      Here are some favorite parts...
      • Workaholism: "Workaholics aren't heroes. They don't save the day, they just use it up"
      • "When you don't know what you believe.... everything is debatable. But when you stand for something, decisions are obvious."
      • "Scaring away new customers is worse than losing old customers"
      • Out-teach your competition: What a great tip! I became a fan instantly (although I don't use any software products from 37Signals). It actually inspired me to pen down how I felt about the book (something I have'nt done before... so bear with me while I struggle thru my first book review). It reinforced the idea that we can build trust with a large online audience too (one-on-one interactions aren't the only way and I can't use it as an excuse). 
      • Emulate drug dealers: "Make your product so good, so addictive, so "can't miss" that giving customers a small free taste makes them come back with cash in hand"
      • Do it yourself first: "Never hire anyone to do a job until you've tried to do it yourself first." We've practiced this successfully in past and second it completely. For example, before hiring our first Ruby engineer (Matt), Amit and I took time to understand it, try it out on a project for 3 - 4 months. It worked really well (no, not the code we produced but the process of identifying what exactly we needed).
      • How to say you're sorry
      • "Don't create a policy because one person did something wrong once. Policies are only meant for situations that come up over and over again." This reminds me of a public calendar incidence - someone shared (unintentionally of course) official meeting information on a public calendar and boom! - we shut off access to that calendar for everyone. Should we reconsider such decisions?

      This book has passed my test for a great book. My test is pretty simple - Is this a book I would want my daughter to read when she grows up? This one has made it to that list (a list of mostly biographies of world leaders). Yes, the four letter word did not stop me from recommending it to her. Keep up the good work. I'm a fan.

      Catching up...

      5 months ago | Prasoon Sharma: Enterprise Software Does not Have to Suck

      I'm behind on my reading... In last few weeks the list of books to read has grown...

      On my list are -

      Today's goal is to finish Rework

      Catching up...

      5 months ago | Prasoon Sharma: Enterprise Software Does not Have to Suck

      I'm behind on my reading... In last few weeks the list of books to read has grown...

      On my list are -

      Today's goal is to finish Rework

      Fried rice, Reichl-style.

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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.

      My vinaigrette.

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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.

      A cook's tools.

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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?

      To Add Connection to LDAP sever:

      5 months ago | Abhishek Dharga: Face The Truth

      • 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

      • User
      • Root User Class
      • Application Server
      • Data Source

      To make LAE :

      Right click on the namespace and say ‘Export to .LAE’



      Scheduling Reports

      5 months ago | Abhishek Dharga: Face The Truth

      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

      Schedule Multiple Reports at Once

      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.

      • dataSource - Execute and Traverse
      • dataSourceConnection - Execute and Traverse

      (With only Execute access, you are prompted to log on to the database.)

      • dataSourceSignon - Execute

      Schedule a Report Based on an Event

      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.


      Imitation is the sincerest form of flattery.

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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.

      Reichl and Bourdain: the mashup.

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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.

      Queenie's Treasury

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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.

      new detailed map to the race

      5 months ago | Rohan Kini: blog@BumsOnTheSaddle.com - Home

      a new detailed map to the race start

      A mechanic and a surgeon

      5 months ago | Niranjan Sarade: InLoveWithNature

      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."

      Supporting the next generation of technologists

      5 months ago | Amy Grandov: Technology for Social Innovation

      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

      Learnings from the Past: Hibernate related Best Practices

      5 months ago | Amar Phadke: Amar Phadke's weblog

      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 [...]

      A little bit of Maine in the East Village.

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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

      Why do I go to office !

      5 months ago | Yashasree Barve: Life is Beautiful !!

      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 :)

      A late dinner.

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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

      Membership has its privileges.

      5 months ago | Megan Blocker: Queenie Takes Manhattan


      Remember my glorious New York Sunday a few weeks ago? Well, I completely forgot to post about the wonder that is the Cooper-Hewitt, the National Design Museum (It's part of the Smithsonian.). I first fell in love with the Cooper-Hewitt a couple of years ago during one of my annual staycations, and have been going back regularly ever since. It's an easy walk from my apartment, and is a wonderful place to spend a few hours. (It will be even more wonderful once its renovations are complete and I can lounge in the back garden of the Carnegie Mansion on gorgeous days.)

      On my most recent visit, I gave in to fate and signed up for a membership. This means I get to go whenever I want, get discounts on the awesomeness that is their museum shop, and attend members' functions with like-minded, design-obsessed folks. I couldn't be happier.

      Moral of the story: the next time you're on Museum Mile, save an hour or two for the Cooper-Hewitt, wouldja? You won't be disappointed.

      Performance evaluation in Agile teams - Part II

      5 months ago | Lalatendu Das: Interpretations of Technorealism

      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.

      Its not too late to solve a Y2K bug - I found one in 2010

      5 months ago | Alex Rothenberg: Common Sense Software

      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')


      To me this looked like a basic check to make sure the date was within a 300 year range as a basic sanity-check. I implemented an ActiveRecord validation in my model


      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


      Of course I had unit tests that all passed


      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


      BUT once I went into production with my legacy database I started getting errors. So I took a look at one of the rows giving me an error and discovered the graduation date was 01-JAN-00. AHA a 2-digit year. That doesn't look good and there were over 100,000 rows with this problem.


      select count(*) from education where graduationdate = to_date('01-jan-1900')
      COUNT(*)
      ----------------------
      116232


      Once I realized that the database contained data for January 1st 1900 and I discovered the Oracle BETWEEN function is inclusive I was able to solve my problem by changing my ActiveRecord validation to have a >= 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


      I added some specs to test my boundary conditions

      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


      So what's the moral?

      I'm not sure but when you're have to integrate with a legacy system you should account for the absurd - in my case a job application from a candidate who graduated more than 100 years ago!

      And if you feel like you missed out on a once-in-a-lifetime opportunity to work on Y2K bugs don't despair. They are still out there!

      The cake!

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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.

      Queenie's Treasury

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      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.

      Wakey wakey.

      5 months ago | Megan Blocker: Queenie Takes Manhattan

      Sometimes you need a little incentive to get up and moving on a weekend morning. Of course, there are those Saturdays where you spring out of bed, at peace with the world and excited for everything that the weekend has in store - but, let's be honest, those are hardly the only kind of weekend morning around.

      Last Sunday, after a whirlwind of preparation for and execution of Caroline's shower, I had a different kind of morning. I was a little achy, a bit tired and generally not inclined to leap out of bed to greet the day.

      The solution? Some sweet, milky coffee and a fresh croissant. I recently added a box of FreshDirect's parbaked croissants to one of my orders, and I've been enjoying an occasional breakfast treat ever since. While they don't measure up to the best croissants out there, it's delightful to be able to pop one in my own oven for a few minutes while the coffee brews and just enjoy it right there on my couch. It's the laziest thing I've done in a while, and I kinda love it.

      And since the croissants are made the old-fashioned way (with lots and lots of butter, and not with icky preservatives), I don't feel too bad about it, either.

      Class Factory: Factory_girl-like syntax for dynamically creating Ruby classes

      5 months ago | Pat Shaughnessy: Pat Shaughnessy - Home

      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

      http://github.com/patshaughnessy/class_factory


      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>]
      

      Bangalore Bicycle Championships - Race 2

      5 months ago | Rohan Kini: blog@BumsOnTheSaddle.com - Home


      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.


      Race Details

      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.


      download the handout

      iPad- Bring on the Competition

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




      Archos 5 Internet Tablet (great price and large high resolution screen)

      Asus T91mt Eee PC (great price and battery life)

      HP Slate (slick and has Flash!)

      Panasonic Toughbook H1 Field (nice handle, great durability, but older look and 'tough' price tag)


      Source: cnnmoney.com, archos.com, asus.com, hp.com, panasonic.com

      A celebration.

      6 months ago | Megan Blocker: Queenie Takes Manhattan

      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.

      Performance evaluation in Agile teams - Part I

      6 months ago | Lalatendu Das: Interpretations of Technorealism

      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

      Android Tablet

      6 months ago | Lalatendu Das: Interpretations of Technorealism

      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..

      Agile in a Distributed Environment

      6 months ago | Thomas Newton: Newtonlabs

      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:

      • Your channels must extend past the "standard" agile feedback loops.  Most Agile strategies have several pre-designed feedback mechanisms to keep the process and iteration cycle as tight as possible (i.e. daily standups, sprint reviews, retrospectives, and various other ceremony).  However, when working in a distributed environment your team can miss everything outside of these checkpoints.  Find ways to talk shop, design, and brainstorm.  
        • Occasionally, after the standup... I'll kick the stakeholders off the call and just share ideas and thoughts on the upcoming stories.   Relax the atmosphere and make sure everyone has an opportunity to give input.  This can be especially effective when the team is working in disparate time zones and this is the only opportunity to communicate.  
      • The atmosphere is important, even over the phone.  I believe as Cockburn does, the better the amicability the richer the communication.
      • Remember how much communication you lose by not being face-to-face, and overcome it.  In one of our teams we installed a cheap webcam and just leave it running between two of the distributed offices using Google Chat.  It goes down all the time, we just kick it and fire it back up.  Despite that, it has been extremely valuable in seeing day to day conversations, being part of the team, and seeing the lights go out in the other office as their day ends.  A great summary by Scott Ambler:

       

      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.

       

       

      Permalink | Leave a comment  »

      India readies for the cloud

      6 months ago | Nilesh Naik: TechnoBites

      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!

      Crowdsourcing Crisis Information

      6 months ago | Amy Grandov: Technology for Social Innovation

      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.

      Don't look at me like that!

      6 months ago | Megan Blocker: Queenie Takes Manhattan

      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!

      Connecting to an Oracle database with Sequel

      6 months ago | Matt Deiters: The Agile Developer

      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>)))')

      Permalink | Leave a comment  »

      6 months ago | Yashasree Barve: Life is Beautiful !!


      Read about this 10 year old boy creating mobile Apps, Looks like its time to jump the wagon, or else my kids would develop mobile apps before I do !

      2010 learning plan

      6 months ago | Prasoon Sharma: Enterprise Software Does not Have to Suck

      I'm interested in exploring web-scale analytics* and prediction markets in 2010...

      * cloud computing, mapreduce, robust batch processing etc.

      2010 learning plan

      6 months ago | Prasoon Sharma: Enterprise Software Does not Have to Suck

      I'm interested in exploring web-scale analytics* and prediction markets in 2010...

      * cloud computing, mapreduce, robust batch processing etc.

      We are not human beings having a spiritual experience but spiritual beings having a human experience

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

      A beautiful line said in the below article. I'f recommend reading the article at below link multiple times. It is so truly beautiful.


      http://timesofindia.indiatimes.com/life/spirituality/mind-over-matter/Mind-Set-No-need-to-dread-death/articleshow/5599281.cms