Author Archives: kenny

In The Bowl (Seattle, WA)

Rating:

On Olive Way just east of I-5 was arguably the most distinctive coffee shop on Capitol Hill: Coffee Messiah. This institution closed its doors in January, 2006. We were taking bets on what (if anything) would replace the Messiah. We all lost, as none of us considered an all-vegetarian Asian-fusion noodle bar (with a complete suite of faux meat). It was about a year later that Capitol Hill was introduced to In the Bowl.

The restaurant was completely madeover from its dark, Jesus-portrait laden past, the walls repainted mango, and opened up as much as possible given the narrow locale. The waitstaff are very friendly and they do a brisk take-out business as well as offering some tightly packed tables for dining in. I’ve been to In the Bowl four times now, and while it has always been busy a table or two was available. Perhaps that’s because your food arrives almost instantly (our dining experience tonight was 30 minutes all-up).

The menu is very tongue-in-cheek. It’s setup as a set of “episodes” (beverages episode, starter episode, stir fried episode, etc). There are items like “You Are So Beautiful” and “Go Green with The Beans”. Tonight we had a repeat of our inaugural meal: Tokyo Noodle and Basil Basil. Both with tofu and 3 stars of spiciness (I haven’t managed to psych myself up for the fake meats yet).

Tokyo Noodle is an udon noodle, with honey-ginger teriyaki sauce, stir fried with mushrooms, onions, and bok choy. It has an undertone of sweetness along with a nice punch of spice. The udon noodles are a nice chewy host for the sauce.

Tokyo Noodle

Basil Basil is my personal favorite so far. This stir-fried episode features mushrooms, green beans, onions, and peppers in a chili-garlic sauce. Oh, and lots of basil of course πŸ™‚ The brown rice at In the Bowl is not your common wimpy, mushy brown rice. This rice has flavor and a little bit of body.

Basil Basil

Overall In the Bowl has stepped up to the plate and more than filled the void left by Coffee Messiah’s departure. So far, I’d rank it above any of the Asian options that Broadway has to offer. I’m excited to continue my way through the scenes of each “episode”. And if the constant stream of people is any indication, I’m not the only one.

In The Bowl
1554 E. Olive Way
Seattle, WA 98102
206-568-2343

Wed-Mon: 12:00PM-10:00PM (Lunch and Dinner)

Szechuan Green Beans

Tonight we were wondering what to do with some green beans, and after a little web searching Lauren discovered this gem of a recipe for Szechuan Green Beans.

We sidestepped the whole dutch oven aspect of the recipe, and just pan fried the green beans + some tofu (didn’t have any chicken handy). And since we were lucky enough to have all the ingredients in hand (other than a quick cashew for peanuts substitution), dinner was ready in about 15 minutes. Yum!

Auto-open and multi-thread usage of client channels

Buddhike hit a hiccup the other day with a multi-threaded client that bears explanation.

The Channel layer always requires an explicit Open() before it can be used. This enforces our CommunicationObject state machine. As a usability feature, our ServiceChannel proxy code supports “auto-open”. That is, you can call a proxy method without explicitly calling Open and the runtime will call Open() on your behalf. This is transparent in the case where you are using a proxy synchronously from a single thread. However, if you are using a proxy asynchronously (or from multiple threads), you may have the case that the Open() is associated with the first request, but subsequent requests are also pending.

Since the state machine is that Open() must complete before Send/Receive are valid operations, none of the requests can proceed until Open completes. In the shipping code, this synchronization is actually around the entire ServiceChannel call, and so Buddhike was seeing an excessive delay. We’ll investigate for the next version if there’s a way in unblock earlier on the client, while still providing all of our existing behavioral guarantees. In the interim, I recommend two things when using a client asynchronously and/or from multiple threads concurrently:

  1. Open your client explicitly prior to usage. You can do this sychronously or asynchronously depending on your application
  2. Prefer calling your client asynchronously to spinning up multiple threads for synchronous calls if you want better scalability/thread-usage

Signalling "End Of Session"

When authoring a session-ful channel, it’s important to signal “end of session” correctly so that the runtime (or any other user of the channel) knows when to stop reading messages, and to start shutting down his side of the conversation (with CloseOutputSession and/or channel.Close). A null Message/RequestContext signals end-of-session to the caller. In particular, depending on your channel shape, you should do the following:

  • IInputSessionChannel/IDuplexSessionChannel: Return null from channel.Receive(). Correspondingly, return true from TryReceive with the “message” out-param set to null. And of course, cover your bases by having BeginTryReceive complete synchronously with a signal to return true + message = null from EndTryReceive.
  • IRequestSessionChannel: Return null from channel.ReceiveRequest(). Correspondingly, return true from TryReceiveRequest with the “context” out-param set to null. Lastly, have BeginTryReceiveRequest complete synchronously with a signal to return true + context = null from EndTryReceiveRequest.

Throttling in WCF

When your server is hosted out on the “big bad internet”, you need a way to make sure that you don’t get flooded with client requests. In WCF, our services support throttling as a way of mitigating potential DoS (denial of service) attacks. These throttles can also help you smooth load on your server and help enforce resource allocations. There are three service-level throttles that are controlled by ServiceThrottlingBehavior. These are in addition to any transport-specific throttles imposed by your binding. To fully understand the impact of these throttles you should also understand the threading/instancing characteristics of your service.

  1. MaxConcurrentCalls bounds the total number of simultaneous calls that we will process (default == 16). This is the only normalized throttle we have across all of the outstanding reads that the ServiceModel Dispatcher will perform on any channels it accepts. Each call corresponds to a Message received from the top of the server-side channel stack. If you set this high then you are saying that you have the resources to handle that many calls simultaneously. In practice how many calls will come in also depends on your ConcurrencyMode and InstancingMode.
  2. MaxConcurrentSessions bounds the total number of sessionful channels that we will accept (default == 10). When we hit this throttle then new channels will not be accepted/opened. Note that this throttle is effectively disabled for non-sessionful channels (such as default BasicHttpBinding).

    With TCP and Pipes, we don’t ack the preamble until channel.Open() time. So if you see clients timing out waiting for a “preamble response”, then it’s possible that the target server has reached this throttle. By default your clients will wait a full minute (our default SendTimeout), and then time out with a busy server. Your stack will look something like:

    TestFailed System.TimeoutException: The open operation did not complete within the allotted timeout of 00:01:00. The time allotted to this operation may have been a portion of a longer timeout.
    […]
    at System.ServiceModel.Channels.ClientFramingDuplexSessionChannel.SendPreamble(IConnection connection, ArraySegment`1 preamble, TimeoutHelper& timeoutHelper)

    If instead you are timing out under channel.Send (rather than channel.Open), then it’s possible that you are hitting the MaxConcurrentCalls throttle (which kicks in per-message, not per-channel).

  3. MaxConcurrentInstances bounds the total number of instances created. This throttle provides added protection in the case that you have an instance lifetime that is not tied to a call or a session (in which case it would already be bounded by the other two throttles). Orcas durable services are one such scenario.

Net-net: if you are testing your services under load, and your clients start timing out, take a look at your throttling and instancing values. On the flip side, do not just blindly set these to int.MaxValue without fully understanding the potential DoS consequences.

Coupage (Seattle, WA) – CLOSED

Rating:

Last night, Lauren and I planned to have a low-key night of home cooking and play around with my new toy. But at around 7:30 I got a call from Mike, asking "do you want to go out to a nice dinner tonight?" It’s a rare treat to have Mike and Erin free for an evening sans children, so we instantly updated our evening plans and quickly scored a reservation at Coupage for 8:30. Thank you OpenTable πŸ™‚

I had been meaning to come back to Coupage since our fantastic inaugural meal this past spring. It’s located on the main drag of Madrona (34th Ave), right across the street from the Madrona Ale House. While waiting for our table we hung out at the bar with Kevin, the friendly bartender who offered us a variety of wines to sample. He also updated us on the latest changes to the menu (which is slightly different then what you’ll find online). At his recommendation we started with the arugula salad that was served with golden and red beets, and a toasted sesame goat cheese that I am still savoring the memory of. If you go to Coupage before the menu changes again, this is a fantastic opener. Mike and Erin’s buttered lettuce salad with toasted hazelnuts and pecorino cheese was also quite tasty, but I preferred our choice πŸ™‚

For the main course, I got to sample four entrees (the joy of having friends that embrace roving forks). Actually, it was five dishes in total, since the waiter misheard "scallop" for Mike’s porkchop. The chef/owner, Thomas Hurley, came by to apologize for the mishap and insisted that Mike enjoy the extra scallops on the house while they prepared his pork so that he wouldn’t be left without a plate of food in front of him. Thomas is very, very nice and genuinely cares not only about his food preparations, but also about his diners’ enjoyment. And he does a great job satisfying both of those goals.

The seared sea scallops were thick and crispy on top just as I love them prepared, and given the bonus order on the table I got to enjoy more than my fair share of buttery shellfish goodness.

The halibut was another solid offering, cooked perfectly to a silky texture and seared lightly on top. Served atop a simple, yet surprisingly delightful mix of mushrooms, corn, and peas.

The Coupage burger. It has foie gras. It is $28 and worth every penny. It’s made from ground short ribs, which means that you can get a burger that’s a little crispy on the outside, and super juicy and bright red on the inside. It may be the best burger in Seattle (though Mike argues that the foie gras gives it an unfair advantage). It’s so good that even Gio, who normally eats muy rapido, savors every single bite. If you are not a vegetarian/aquatarian/chickitarian then you have to try this burger. It will blow you away.

Mike’s porkchop arrived about halfway through our main course. According to Kevin, the pigs come from Idaho, are over 350 pounds, and I quote "I’ve had a lot of pork in my day, and this is the best pork chop I’ve ever had." And it didn’t disappoint. Even though we had filled up on scallops and burgers and halibut, we still picked the porkchop clean.

All in all Coupage is one of my favorite new restaurants in Seattle, an east of Madison alternative to Zoe and Eva.

UPDATE (August, 2008): Unfortunately Coupage has recently closed. However, the original chefs (and supposed inventors of the foie gras burger) Rachel Yang and Seif Chirchi have opened Joule in Wallingford which I’ll be checking out soon.

Coupage
1404 34th Avenue
Seattle, WA 98112
206-322-1974

Daily: 5:00PM-late (Dinner)
Sun: 10:00AM-2:00PM (Brunch)

The Herbal Kitchen

Rating:

Due to the magic of registries, Lauren and I received a bunch of cookbooks for our wedding. So far my favorite one of the bunch is The Herbal Kitchen. It’s written by Jerry Traunfeld (executive chef of The Herbfarm), and it is his “what I cook at home” cookbook.

I really like the abundance of of pictures in this book. Personally I get extra inspiration out of a preview on the final product. And, as promised, the recipe execution is more accessible then The Herbfarm Cookbook. We made 3 dishes for guests last night (popcorn chickpeas, cherry tomato, melon, and mint salad, and penne with walnut pesto and eggplant). All of them required minimal prep and tasted fantastic. There’s also a fun beverages section (we had Rosemary gin and tonics). Check it out, you won’t be disappointed.

Tamarind Tree (Seattle, WA)

Rating:

The first time I tried to have dinner at Tamarind Tree was last November. I had never even seen the place, but multiple friends were raving about the food. It was a Saturday night, and we snaked our way through the traffic jam of a parking lot on the northwest corner of 12th and Jackson. Tucked away in the back corner of the rundown-looking shopping center was the entrance. Inside was the sound of a waterfall, a tastefully warm interior, and a more upscale feeling than your average Vietnamese restaurant (while remaining unpretentious).

Tamarind Tree doesn’t take reservations, and the wait that night was quoted at around an hour. We made a hasty exit (Mark was ravenous already), and I forgot about Tamarind Tree for a few months.

Fast forward to mid-June. Lauren‘s boss recommended Tamarind Tree and gave her the tip that if there’s a wait you should just enjoy their specialty cocktails in the interim. Out we went to celebrate Kavita‘s MBA graduation, on a Friday night this time with call-ahead estimated wait of 20 minutes. It wound up being very quick (maybe 10 minutes) and we followed Karim’s advice to sample the cocktail menu. Turns out that Tamarind Tree makes a fantastic pineapple mojito! We had an enjoyable meal, finishing with an amazing Thit gΓ  xΓ o xa ot (a.k.a. “chili chicken”). The tender chicken was bursting with flavor; spicy hints of chili pepper and lemongrass layered in with the onions.

Tonight Lauren and I returned to Tamarind Tree for a second graduation celebration (a bit of a tradition being established this summer it seems), this time to celebrate DeAnn’s release from the shackles of UW grad school. A slightly longer wait, but it gave us time for DeAnn to experience the pineapple mojito…

And raspberry mojito…

And continue with a guava martini over dinner πŸ™‚

I was able to steal a sip of all drinks ordered, and while the pineapple mojito is still my favorite on their list, the raspberry mojito (with fresh raspberries), pomegranate martini, and guava martinis were no slackers. I didn’t care for the kumquat martini, though I hear it’s the most popular drink on the menu so YMMV.

Tonight we sampled an array of vegetarian options, starting with shitake and eggplant satays. I’m a sucker for good mushrooms, and these did not disappoint. A common issue with shitake preparations is that they will emerge rubbery and undercooked. Not here, where the marinated, grilled morsels in front of us were even better than the menu description:

Next up were the very tasty tamarind tree rolls (also offered with your choice of meat). served with roasted peanuts for a nice crunch, they were the best Vietnamese spring roll that I’ve had in Seattle to date.

Tamarind Tree has an enormous menu, and I’ve only scratched the surface of it (I will remedy that over the next year). With such flavorful food, friendly staff, chic zen ambience, and just about every dish under $10 it’s a wonder the waits aren’t even longer!

Tamarind Tree
1036 South Jackson Street, Suite A
Seattle, Washington 98116
206-860-1404

Daily 10:00AM-10:00PM (Lunch and Dinner)

Piroshki on Broadway – CLOSED

Rating:

I’ll be honest, after 8 years of Capitol Hill living I’m pretty much done with on-Broadway dining. There are a few exceptions though. One is Galerias on the north end. Another is Piroshki on Broadway.

Piroshki on Broadway

Mushroom, Spinach, and CheeseLocated across from Dick’s burgers, Piroshki on Broadway is great for a quick snack. They make omelettes for breakfast and pirogies for lunch, but their bread & butter (actually bread & filling of your choice) is the piroshkies. Their spelling however is inconsistent. If you’ll notice, the sign is “PIROSHKY”, but the menu and interior signage has “PIROSHKI”. You make the call.

The piroshki I always crave is the Spinach, Mushroom and Cheese. They are mixed together in garlic which provides a nice counterbalance to the slightly-sweet bun.

If you are one of those anti-mushroom types, the Smoked Turkey and Cheese is also pretty tasty. Russian fast food at its finest!

UPDATE (May, 2009): Piroshki on Broadway has lost their space due to construction of the Capitol Hill light rail station. There is a rumor that the owner still serves russian food at Swedish on First Hill.

Piroshki on Broadway
128 Broadway East
Seattle, WA 98102
206-322-2820

Mon-Sat: 7:30AM-10:00PM
Sun: 8:00AM-8:00PM