New Office

Almost our whole team moved offices yesterday. We used to be spread out across campus in 34, 40, 22 and 119. Now, we’ll all be on one hallway in 18. It’s a little unnerving to be able to walk the hall and see everybody after spending 6 months on a team who saw each other about once a month. Unnerving, but very very cool.

As you can see on this map, 18 is in the NW corner of the main campus. From the posters left behind, I’m guessing Mac Office used to be here – I think the whole Office group is moving to 36, the newest building on campus. (36 is so new, it’s not even on the map yet. It’s to the east of 3.) Not sure how nice 36 is, but 18 is much nicer than 22. About 30 feet from my office is a large lounge area with ~10 couches and wireless access. We have a full size cafe with ATM. And, now that we’re on main campus, we’re much closer to meetings with other groups (other than DevDiv – we used to be just across the street from them).

I was going to bring a camera and post some pictures of our new offices, but I forgot in a haze of sleeplessness. Julie and Patrick went to LA this morning for the weekend, and we had to get up at 5am to get her to the airport in time to get all the baby gear thru security. Since I can’t post any office pictures, here’s a picture of a nesting hawk my friend (and hoster) Tom emailed me.

New Toy

I came back from lunch yesterday to discover that my boss had left a new toy on my desk – a Smartphone Developer Kit. Not sure where he got it, since it’s all sold out. I’m stoked because I’ve been wanting a Smartphone for a while, but I want to use T-Mobile’s service and I didn’t want to pay a premium for an unlocked device. Now, I don’t have to.

Any suggestions on cool Smartphone software?

The Endangered Middle-Tier, Part 2

Among the responses to my endangered middle-tier post was this one by Ed Draper, architect evangelist for MSFT. While Ed makes some interesting points, on the whole his argument doesn’t hold much water.

First off, his point about Moore’s law is accurate, yet irrelevant. While Moore’s law does relate to CPU speed, I was using it as an example of the rate that overall computing power improves. Storage capacity and network speed improve along a similar trajectory. 64-bit machines are at the early stages of becoming commonplace. And while it’s true that scalability doesn’t equal performance, having better performing hardware can significantly improve scalability.

(Side note – if we’re going to be truly picky, Moore’s law actually refers to rate of improvement of the number of transistors per IC, which only roughly equates to performance. Intel’s Centrino technology is all about using those increasing numbers of transistors for other things like wireless networking and battery management.)

Ed spends quite a bit of time covering very low level computing concepts such as threads, locks, instruction cache, registers and the stack. I’m not sure why he does this. It almost feels like he only read the first part of my post, stopping right before he got to the part where I wrote: “Of course, it will be a long long time before Moore’s law can provide a single machine to run a BIG enterprise app”. In other words, I don’t expect to run my ERP, SCM, CRM or other BFD enterprise-scale app on one machine!

Ed has missed a basic point of my post that I didn’t spell out as I thought it was obvious: the independent services that make up a BIG enterprise class app can all run on different machines. I’m guessing he missed that point by the way he ended his post:

“Yes, distributed computing is a good thing.”

As Ted points out, it’s not just a good thing, “distributed computing is a necessary thing.” And a system of 100′s or 1000′s of independent services – which is what I’m describing – is significantly more distributable than the multi-tier monolithic applications we build today.

Of course, it is guaranteed that a small percentage of services will continue to need to use scale out techniques to reach their scalability requirements. For example, it will be a very very long time (if ever) before a single piece of hardware could handle the order processing load Amazon.com generates a week before Christmas or the tax return filing load at the IRS on April 15th. This problem isn’t unique to application design. To draw a parallel to the database design world, there are a small percentage of tables that benefit from using filegroups to isolate them on separate drives from the rest of the database. It happens – but it doesn’t always happen. It doesn’t even usually happen. I like Josh’s comment that “the vast majority of people who think they have workloads which require partition for scale are actually indulging in delusions of grandeur.”

The point I was making is that computers are going to continue getting faster and service-oriented systems are likely to consist of boatloads of independent services with only modest scalability requirements. The combination of these two forces drastically reduces the number of scenarios where you need to use multi-tier scale out techniques to achieve the scalability requirements. If you don’t need a multi-tier deployment, then there is a huge performance and scalability benefit to running the service logic in the database process. If you don’t need to scale-out to achieve your requirement, why would you take the performance and scalability hit to run your code outside the database?

It’s pointless to argue that computer aren’t getting faster or that running the code in process with the database doesn’t perform better. Ed (and Ted and Josh and everyone else reading this), I’d love to hear you opinions on the following:

  • Will a service-oriented approach likely result in of boatloads of independent services where today we have one BIG app?
  • If yes, will the vast majority of these boatloads of independent services have modest enough scalability requirements to run on a single piece of hardware in the near future?

Broadcasting Music

The first thing I need for my DJ idea is to be able to broadcast content. This means a variety of things, but first and foremost is music. The  RIAA provides special webcasting licenses as long as the webcaster meets specific criteria. (I’m guessing I’ll have to talk to our legal dept. before I actually broadcast any music). The criteria is pretty acceptable – I could easily build a bot that streams music 24/7 from my own ripped CD collection in accordance with the RIAA’s criteria.

Of course, all that ripped music is on my personal home machine and I have no interest in copying it all up to my media server. What I really want to do is broadcast from my home machine to the server, which in turn broadcasts to potential listeners. From what I understand, I need to use the Windows Media Encoder (or an app built with the WMEncoder SDK) to push media to the server for rebroadcast. No problem – building a bot to do that should be no big deal. Except that it is a big deal.

WMEncoder can only work with two sources of media (not including screen captures, HTML and script which are not applicable to this post) files and devices. Since I’m mixing together the contents of multiple files, I can’t use a single file as a source. Which means a device. The problem lies in the fact that audio apps are designed to write to audio rendering devices (like the sound card) not to audio capture devices. What I need is a audio “loopback” device that takes the audio sent to the virtual audio rendering device and sends it directly to the virtual audio capture device. Thus, the output of the bot is fed as input into the encoder. So far, I’ve found Virtual Audio Cable from NTONYX that looks like it will do the trick (I actually dug out the windows driver book and entertained very brief thoughts of building my own, but in the end, I’d rather just spend the $50 for VAC).

I’m not sure if I’m going to use DirectSound or DirectShow to build my broadcast bot. I’m leaning towards DirectShow since it seems more suited to this sort of problem (even though it is the only piece of DirectX w/o a managed wrapper). I just wish there was a Windows Media Broadcast rendering filter that didn’t require the use of VAC or the encoder.

Anyone out there have any experience with DirectShow?

Back in Black

It’s been a busy week. I was on .NET Rocks, we published JOURNAL and I seem to have stirred up some discussion with my endangered middle-tier post.

But then I was silenced by a floppy disk.

My friend Tom, who hosts DevHawk and TechieWife for me, is on a contract job out-of-state and couldn’t remotely diagnose why the web server that hosts this blog wouldn’t reboot after a power-outage. Turns out there was a floppy in the drive and go figure, the server tried to boot from the floppy. So I’ve been offline all week. Still, I have to give Tom props as

  1. He hosts me for free
  2. I have admin access to the machine
  3. He’s down to try new things

Being on .NET Rocks last week reminded my a little of my old college DJ days. I’ve got an idea I’d like to play around, but I’d need a media server. That’s where #3 above comes into play. I ask Tom and I receive. No idea what I’m going to do with it yet, but now I have a media server to play with. Thanks, Tom…You Rock!