Saturday, April 14, 2007

Week in Seattle - Tech

I sent out an email a couple nights ago to refer some people to this blog. In the email, I mentioned that it was an inspirational trip. Since then, I have received TONS (ok, just 3) requests to elaborate on what was so inspirational. I'm not sure if that's because people are genuinely curious, or because I misspelled "inspirational" and they wanted to taunt me by repeating it. Either way, here we go.

The trip to Microsoft was basically 3 days of "Here's all of the cool stuff we're working on". And they're right... it's cool. It covered the upcoming Visual Studio Orcas and .NET 3.5.

From the agenda, here are the topics covered
Tuesday
- Kick off
- Setting the stage for Orcas
- Intro to Syndication
- Using WF rules
- What's new in Orcas / Linq
- Intro to ASP.NET AJAX
- VSTS in Orcaas and Beyond

Wednesday
- Using PowerShell to manage WF & WCF
- JSON and AJAX with WCF
- Workflow Driven User INterface
- Workflow Enabled Services
- Durable Services


Thursday
- WF Performance
- VSTO in Orcas
- Federated Identity for Devs
- .NET Compact Framework 3.5
- Intro to WMI and Eventing in Orcas
- ADO.NET entity framework
- WCF Performance

As you can see, they gave overviews of a lot of stuff.

When I first started my career, I went to training a few times. These were always good for exposure to new technologies that I hadn't yet come across (because I was just starting), but they weren't much more than that. The instructors just read the materials and facilitated the labs. In most cases, they didn't know much about beyond the course contents.

The Microsoft presentations were the exact opposite. They had some slides and supporting materials, but they most certainly were not reading a script. These are the people who actually designed and wrote the software. The guys (sidebar: for the purposes of this rant, "guys" is synonmous with "people") who created WCF talked about WCF and answered our questions about it. How great is that? Additionaly, they're just regular people (albeit, smarter than most). They weren't Microsoft marketing guys. They showed up in jeans and sneakers, ate lunch with us, and simply talked without preaching. They were trying to sell something, obviously, but they were selling it on merit, not on flash. They were selling the stuff they work on every day. (Actually, a lot of the technology is free, so "sell" is really "convince us to use". I don't need convincing.)

The 3 days revealed 2 things about myself:
1 - I couldn't get up there and do a professional presentation like that. I have enough skills in areas that I can speak intelligently about, but I wouldn't be composed about it. Things like this were recently described to me as "soft skills". Sure, I can code, but I probably shouldn't be allowed to talk to clients.
2 - None of my skills are laser-focused on a particular technology. I know a lot of things about a lot of things, but I don't know everything about anything. I have recognized this previously and planned to act on it, but never did. In fact, when WCF was still called Indigo, I had every intention of becoming intimately familiar with it. Instead, I continued working on all of the same projects using all of the same skills.

Since I started programming professionaly, 2 things have blown up on me, and unfortunately, both of them were recently. The first one was a big deal. I rewrote a component that sends messages to one of our external clients. I wrote the original component so was more than capable of writing the upgraded component. It passed rigorous testing and was promoted to production. There, it promptly failed every few messages. The key difference between the old and new was WebClient vs WebRequest. I tried to recreate the scenario locally by running tens of thousands of automated tests, and could not get it to occur. Unfortunately, the client was not helpful. We needed to know what was happening on their side so that we could isolate where it was going wrong, but they wouldn't help. After hours of debate, I rewrote the component again using WebClient. Everything started working. A friend of mine strongly suggested many times that we go back to WebClient, but I didn't want to surrender. It was a fixable problem, but eventually, I had to give in. WebClient uses WebRequest, so it should have worked. We simply needed to know what was happening on the client side so we could adjust whatever properties needed to be adjusted. (Incidentally, that same webrequest object was used for all other clients as well. It only failed for this one, so it was not a fundamental problem with the component). I lost 2 days of sleep on it and felt absolutely miserable about it. I designed and built the entire messaging system for the enterprise, and that was the only thing to go wrong in 2 years. (That is, aside from occasional bugs and mishaps, etc. Unfortunately, I am mortal (unconfirmed) and do make errors.)

The second time was at my new company, and wasn't as bad. This time, I had to implement a remoting solution. Though I had a lot of messaging experience, it was via sonic and, to a lesser extent, web services. I hadn't actully done anything with remoting. I didn't have long to gear up and get the first version in place.

As before, everything worked well in development and testing. There was another remoting service running in the same app domain. I was aware of that, and took it into consideration. However, once it went to QA, it started failing. This was due to conflicts with the other service which, as I already said, I accounted for, so it shouldn't have been a problem. (I was expecting a particular issue under a particular circumstance. That was on the to-do list, but this wasn't it.) Fortunately, I was able to quickly identify the issue , but coming up with a fix was a different story. I recreated the issue using NUnit, then hit Google hard. The problem was never resolved. I had to settle for a workaround.

It occurrs when there are 2 channels in one app domain, but they differe either by security or serialization format. If the first one is secure, then the second one is secure. If the first one is not secure, then the second one may be secure without causing a problem. If one is using XML serialization then they both must, and the same for BINARY. I took comfort in recognizing that the existing remoting service had the same problem. It's not something that I introduced, I just happened to be the second service. This remains unresolved, but I made a personal commitment to get a better handle on these things. Prior to it failing, I only had about 18 hours invested, so I only lost 1 night of sleep this time. Additionaly, it's not a production ready application, so I didn't break existing functionality. (For those of you taking notes, the work-around was to make sure both channels were setup the same: same security, same serialization)
Both of the issues above were communication related. The first was via web services (sort of), and the second via remoting. Prior to that, I spent a lot of time doing messaging and SOA. I learned a lot of stuff over the last few years, but it's apparent that I'm not a guru. I could probably claim an expert on some of the stuff, but not guru.

And at long last I come to the point. I would like to become a WCF guru. I think I have a strong handle on SOA concepts and how things should be done. I may be proven wrong on that, but until I have evidence to the contrary, I'm going to proceed as if I know what I'm talking about. Now I need to improve on the implementation of those concepts, and all roads lead to WCF. I'm not going to worry about the remoting problem anymore, at least not for a while. Remoting is old news. I want to focus on WCF so that when I implement a WCF solution I don't have to wonder if it's going to backfire in QA or production. I need to keep my other skills up to date, but my primary focus will be WCF. I will continue my existing side projects and use WCF where feasible. For new projects, WCF will be in there from the get-go. It'll be fun, and I will make every effort to achieve guru status.

To address the first problem: Subpar soft skills. In this case, that may just be the way it is. Everyone has their pros and cons. I think they are at least average which, in this case, is good enough for me. We can't all be public speakers and power point experts.
Friday April 13th, 2007
I finished up the trip yesterday. It was all travel, so not terribly interesting.

The first flight was at 11:45. I rolled out of bet at about 8:30. I attempted to check out via the hotel entertainment system (tv), but that wasn't working, soI had to resort to the phone. I loaded up the car and headed for the airport.

Once I got in the vicinity, I still had plenty of time left, so set out to find gas. I stopped at an Amco station and filled up. They charged me a 45 cent transaction fee for using a debit card... I've never seen that before. That's pretty lame for the year 2007.

I headed back to the airport and found the car rental return. I pulled into the budget lane and removed the TomTom from the windshield. I moved to the trunk and started packing away the TomTom, and the attendant informed me that he needed to take the TomTom. How dare he. I told him it was mine to which he responded to the effect of "oh". He returned to the odometer and had some additional troubles there. As we concluded our business, several other customers came an went. When at last we were done, I learned that I traveled 126 miles that week.

Check in and security was quick. I found a chair near a power outlet and fired up the laptop. A fwe minutes later, a guy came over and dropped his bags on the chair behind me. Actually, it felt like he got a running start and hurled his stuff at the chair as hard as he could. It was, at the least, discourteous. He then came on my side and stood there for a few minutes. I think he thought I should have offered him that seat, but our relationship was off to a rocky start and that wasn't going to happen. He plugged his phone in, and stood in the corner making some calls. When he was done, he sat down behind, again with unnecessary force. He was a nuisance in general. People sure get cranky when they can't reach the power outlet.

I worked until a few minutes before boarding. I packed up my stuff and headed to the gift shop to get something to drink. Sure enough, Mr. Personality took the seat.

What is to be learned by all this? I don't know.

The flight from Seattle to Atlanta was light. There was an empty seat between me and my neighbor. We didn't talk much because I was too busy watching movies, but she seemed nice. Early in the flight, she spilled a diet coke on the empty seat and herself... good thing it was empty. I helped clean it up, but suggested to the flight attendant that we turn around and get rid of her before things really get out of control. During the 2nd beverage service, she promised to hold on to her drink real tight. That adverted additional catastrophe.

I watched Run Lola Run, The Edge, and the beginning of The Prestige.
LOLA and The Edget are both great movies. I've only seen them once before.

There was very little time between flights, and a lot of walking. I needed food without a line. I found a "fresh" sandwich place, and ordered a ham and cheese. He grabbed it off the shelf and handed it to me. Yummy. I got a bag of jalapeno chips (no cholesterol) to go with it. I still had beverage left over from Seattle.

I walked from B terminal to A terminal and found the gate. It was about to start boarding. Miraculously, I found a seat. A guy nearby got up and tried to entertain his buddy by saying that they could fit more people in a plane if they installed racks. I countered that they could attach a trailer to the back instead. Neither one of us were funny.

The second flight was more full. The DVD player was dead. I read some more of The Prince and the Pauper, then watched "Delta Horizons", which included an episode of Will and Grace.

It was a quick flight, but the bags took almost a 1/2 hour. I grabbed all my stuff and headed towards the car. I cross the street and took a right. There's a lot of construction. The right was a mistake... There wasn't a way to get through anymore. How could I turn around without looking like a dummy? There was no way. I'd have to find an alternate route. Unfortunately, it was a navigational situation that the TomTome couldn't help with, so I'd have to do it the old fashioned way. I took the elevator to the 2nd floor in hopes of finding a way over to the west lot. I hauled all my stuff a good distance before realizing that it wasn't going to work. Defeated, I turned around and headed back from whence I came. I can only hope that by the time I made it outside, the crowd had changed and no one noticed.

I loaded my stuff in to my car, and drove off. After driving a rental for a week, I really appreciated the 300. It was big, comfortable, quiet, and moved with authority when I hit the gas. Heavenly.

The drive home was uneventful. I had to slow myself down twice, though. The 300 wanted to be unleashed.

I walked into the house and was warmly greeted with the love and affection I had missed all week. I am referring, of course, to my three dogs. They were excited to see me, and who can blame them? (Overlook the fact that they get equally excited each time the wind blows). Eventually, Gina dragged herself off the couch to say hello. It was glorious.

Friday, April 13, 2007

Trip to Seattle - Leisure

I went to Seattle this week. Here's a day-by-day non-technical account. There's a whole bunch of nothing covered in the following paragraphs.

Monday 4/9/2007
For some reason I felt obligated to work from home for a few hours before the flight. If I paid attention to the itinerary and understood the 11 hours of travel to follow, I probably would've let myself off the hook and slept in.

The first flight was from West Palm to Charlotte. I had about a 90 minute layover in Charlotte. I started off thinking what a nice airport it was. There were plenty of amenities, etc. I stopped at a giftshop to pick up some odds and ends. The cashier was completely non-friendly, thereby forever tarnishin my image of Charlotte.

The next flight was from Charlotte to Seattle. 5 hours and 20 minutes. Ouch. I watched 8 BELOW and most of FINAL FANTASY, THE SPIRITS WITHIN before the DVD player ran out of juice. I don't know if it was Monday or not, but it occurred to me shortly thereafter that it sucks that the battery died. I was going to take the battery with me on my next outing, and see about getting a second. The battery pack doesn't detach. It's screwed in. It has a relase latch whose function is negated by the 5 screws holding it in . What's up with that? They're not regular screws either... some proprietary thing. I find this non-consumer-friendly.

Thanks to my TomTom 910, I found my way to the hotel without a problem. I unloaded my stuff as fast as possible, then ventured outside to find some food. It took about 45 seconds to realize that food was not to be found within reasonable walking distance. The hotal is smack-dab in the middle of a commercial zone, not a retail.

I got back to the room with just enough time to put in a room service order. I ordered a cheeseburger for $15. After tax and forced gratuity, the price was $21.

Oh yes... I forgot to mention the air conditioning. I walked into the room and immediately dropped the AC down to 63 degrees. I like it cold. 63 is colder than what I would normally do, but it's rare that I have full control of an AC, so had to compensate. I thought for sure the maid would have changed it to a more reasonable temperature, but it's now Friday, and it's still at 63. Maybe we're having a battle of wills?

Tuesday 4/10/2007
Typically, when I'm going somewhere new, I do a recon mission the night before to make sure I can get there. After a day of travel and a $21 burger, I wasn't real motivated to venture out Monday night. Instead, I set the alarm for 6:30am. (Incidentally, "the alarm" is my cell phone, since the inroom clock was off by an hour with no apparent way of correcting it. I didn't need the extra complication of doing math in my head to compensate for the hour). I was enroute to Microsoft by 7am. Once again, my trusty TomTom 910 delivered. It got me to the campus, at least, which turns out to be pretty big. From there, it was just a matter of driving around randomly looking for signs for building 20. This is hard to do short of stopping in the middle of the road to read the signs. there were several U-TURNS involved, but I got there in plenty of time. A bunch of us, all strangers, stood outside the building until the doors magically unlocked at 8am.

Since this is a leisure post, I'll omit what happened once in the building. See the tech post for that.

The classes wrapped up at 5pm. I headed back to the hotel. I was almost there when I realized I was hungry. I considered another $21 burger, but opted to venture out a little. There was a galleria near by. I parked and ate at the Rock Bottom Pub and Restaraunt (or something like that). I sat at the bar and had dinner. The Red Sox beat the Mariners 14 to 3 earlier that day. The guy sitting next to me wasn't thrilled about that. I, being a Red Sox fan (limited), was ok with it. The Mariners beat the Sox the next day though, so the Universe has balanced itself.

I returned to the hotel, then went to the gym. I'm not a big gym guy, but I do dips at home a few times a week. I was hoping the gym would have something to facilitate that, but no such luck. Instead I lifted some dumb-bells. Thankfully there weren't any witnesses. I still didn't feel right about myself, and managed to do some dips between two treadmills. It wasn't quite the same, but I gave it my best effort.

I returned to the room and watched some random television. I then read a few chapters of THE PRINCE AND THE PAUPER before crashing.

Wednesday April 11th, 2007
On Tuesday, I got up at 6:30 in order to be at Microsoft by 8am. Wednesday is different. I didn't actually have to be there until 9, and I proved that it was only about 20 minutes away. I set the alarm clock (again, my cell phone) to 7:15. I got to Microsoft right at 8am. I walked in at the same time as another guy, and learned that we were the first ones there. Still too early. I had a leisurely breakfast. Before class started at 9.

Microsoft provided a BBQ at 5:30 that night. A guy and woman backed into the parking lot with a pickup truck. The pickup was hauling a grill. They served great ribs, chicken and beef. We sat around for a couple hours and ate ridiciulous amounts of bbq food, and talked about the things that geeks talk about. I'm not usually the religious sort, but God Bless Microsoft.

I was back to the hotel by about 8pm. I thought it would be great to watch a movie. I've been meaning to watch Deja Vu and Smoking Aces. I was about to order Deja Vu then saw the $13 price tag. $13 for a broadcast-quality movie on a 20 inch screen? I'm not a cheap person. I occasionaly spend money wrecklessly. You remember the $21 cheeseburger, right? Well, I couldn't bring myself to spend $13 on the movie.

I fell asleep sometime between 9:30 and 10, west coast time. I guess the change in time zones was a factor. To that point, I didn't think it affected me, but there was no other reason for me to be that tired. That resulted in me waking up in the wee hours of the morning, but I kept forcing myself back to sleep. I finally got up at 7:30, and headed out to Microsoft.

Side bar: the clock in the room has been set to the proper time, but I'm stubborn and will continue to use my cell phone.

Thrusday, April 12th 2007
Something went horribly wrong on the way to Microsoft. I didn't pay attention to the TomTom, and zigged when i should have zagged. This set me way off course within the Microsoft campus, and I wasted probably an extra 15 minutes trying to find building 20. There were more U Turns then I care to count. I finally got there at 8:40. This was plenty of time to grab some breakfast, then get started.

The presentations wrapped up a few minutes after 5. I said my sincere good byes and thank yous (it was a great week), and headed out.

Here's the dilemma: I've been in the greater seattle region all week, but didn't actually do anything or see anything in Seattle. I had planned on play tourist all day Friday, but that didn't work out due to an unexpected early flight. It was decision time: Go back to the hotel and watch TV, or try to get in some touristy stuff.

I went back to the hotel and fired up the laptop to find things to do in seattle. Of course, the space needle was at the top of the list. I entered that into the trusty TomTom 910, and headed out.

It turned out to be a good decision. Its getting dark out much later now, so I was able to get to the space needle in daylight and take a bunch of pictures. I visited the surrounding attractions, but wasn't impressed. There are a bunch of old and beat up carnival rides that should probably be bulldozed. There were a couple museums there, but they looked tacky. I started looking for food, but only found mall-type food courts.

I blindy jumped on the monorail and asked the attendant where it goes. She told me it goes to downtown where I can do some shopping. Oh goody. I love shopping. I could, at least, hope for some decent food.

The monorail ride was kind of fun. It was a good touristy thing to do. Its final (and only) stop is at the Westlake? mall. This was a much nicer mall, but still just a mall. At this point, by only motivation was to find some decent food. I walked around the mall and the surrounding vicinities, but only found junk. I ended up getting a Gyro at a meditteranean joint. They were about to close (at 7:40?), but were very friendly and courteous about providing the food. They were nice guys. I appreciated that.

I walked around downtown a little bit. There were a lots of gangs of kids hanging around, and there didn't seem to be much to see. The buildings and sky line were kind of cool. It reminded me of Chicago, but not as impressive. If I hadn't been to Chicago, then down town seattle may have been more impressive.

I eventually gave up on being a downtown seattle tourist, and got back on the monorail. I then returned to my car and thought about heading back, but it was still daylight. I used the TomTom to try to find other points of interest. I didn't know what 1/2 the stuff was, so picked the "Bank of America Tower". The road to get there was beneath the monorail, so I got to see the same route from a different perspective. I got to see more buidlings at a more leisurely speed, and was more impressed than I was before. I passed the Bank of America Tower at some point, but I don't know which building it was. I just kept moving.

At that point, I disregarded the TomTom and tried to work my way over to the coast, which I thought I could see from th vicinity of the tower. I eventually made it down there. I pulled over once to get some pictures of the skyline, then found parking in a garage near Pier 70 and the Spaghetti factory. I walked out of the garage and found myself staring at the logo for REAL NETWORKS. Apparently they're based in seattle. I got a picture of that. (yay).

At this point, it was pretty dark. I took a bunch of pictures from the pier, but they didn't come out very good. I put the camera in night mode. Unfortunately, night mode requires you to hold the camera very still for a few seconds as it captures the image. That didn't happen. They all came out blurry. How do you hold a camera completely still?

At last, I was content that my visit to Seattle wasn't completely spent on business purposes. I got out and was able to do a few things: space needle, mono rail, drive through down town, drive to the coast, get some pictures of the mariner's stadium, get some pictures from the pier, get a picture of real networks.

I returned to the garage and got into the elevator amidst some fanfare. There were a few other people there, and it turns out that they had, to that point, needed to go to different floors in sequential order. Floors 2, 3, and 4 were set. They were hoping that I was on the fifth floor to keep the trend going. I offered to go for the ride to the 5th floor if that would make them feel better, but it would be dishonest of me to claim that that's where the car actually was. It was on the 2nd floor. This revelation was met with dissapointment but understanding. I broke the trend. During the ride to the 2nd floor, one woman commented on how many people were out and about at that time. I stated that I was there randomly, which got a couple chuckles because they thought I was kidding. But I wasn't.

That ride in the elevator made more sense when I saw that the name of the garage was something like "Technology Garage". They were probably all geeks too, perhaps even from Real Networks, which explains their appreciation for patterns: 2nd floor, 3rd floor, 4th floor, 5th floor. Had I known, I certainly would have parked on the 5th floor.

Once back in the car, I had to rely on the TomTom to get me back to the hotel, because I no longer had any idea where I was. I had a few mishaps along the way... there were a lot of criss-crossing roads. I took some wrong turns, but eventually made it back to the hotel.

The gyro didn't really fill me up, so I bought another $21 cheeseburger from room service. I've been writing this blog ever since.

Thursday, April 12, 2007

27 Months Later

Well, it's been 27 months since my last blog update. I suppose I'm due for a new one. I'd like to apologize to all those minions who have been hitting refresh every 5 minutes since my last update. My bad.

I've spent the last few days in Seattle attending a class at Microsoft. All of those folks have their own blogs. I became envious and thought that I should start a blog. Then I remembered that I already have one. Awesome. And, I still have the password. Bonus.

I logged into the blog with every intention of deleting all previous posts. After all, they must be crap. They're old. But, then I read them and determined that they do in fact have historical value, so I'll keep them.