Sunday, December 30, 2007

Patriots 38, Giants 35

What a game.

The Giants definitely came out swinging. They never let up, and they were winning for a good portion of the game. The starters played the entire game.

For a while there, it wasn't looking good for Patriot fans. But, even then, I would rather lose a ligitimate game then win a gimme. It would've sucked, but I would've been the right way to do it. The Giants did their part; they tried their hardest.

As hard as a game as that was, it was never really that bad. When they were down by 12, there was still plenty of time left to play, so no real concerns. The worst game of the season was the Ravens. Sure, there were other close calls, but the Ravens was the biggest nail biter by far.

Go Pats. Go Giants. (The Giants are my new second favorite team. They stepped up in a big way.)

Saturday, December 29, 2007

Patriots and Giants

The big game is less than 3 hours away. The patriots are going for legendary status.

There has been a lot of talk about wether or not the two teams are going to show up to play. There are playoff advantages for the Giants if they take it easy. Technically, this game doesn't mean anything to them. Technically, it doesn't mean anything to the Patriots either other than the opportunity to be the first team in 35 years to have a perfect season. They say that its meaningless if they don't go all the way, but I disagree. Clearly that would be a better season, but regardless, no one has gone 16 and 0, not to mention all of the records that are about to be broken.

I hope that both teams show up to play. Obviously I want the Patriots to beat the Giants handily, but I'd rather that it wasn't a gimme. I want the Giants to come out swinging, and for the Patriots to beat them toe-to-toe.

I heard a quote somewhere that the Giants coach stated that it is not his responsibility to beat the patriots. 15 other teams have tried. If that quote is at all accurate, then I disagree. Its not his responsibility to stop them, but it his responsibility to try just like every other team has tried. 20 years from now, do you want to look back at this team and think that maybe you could've stopped them if only you tried? This is a key moment in football history. Don't roll over.

Jay's Prediction: Patriots 28, Giants 10. *
* - Jay's prediction is based on wild guessing.

Thursday, November 15, 2007

Death of an XBox

After approximately 1 year and 10 months, it finally happened. My treasured XBox 360 has died.

Thankfully, it didn't suffer long. It crashed a couple times, and I knew that was the beginning of the end. Finally, after a particularly dramatic crash and a reboot, the three red lights started flashing.

Even though I knew it was coming, it didn't make it any easier. My good friend Mike, who has lost 2 XBoxs in the past, was quick to console me and offered advice on how to get on with my life. It started with a call to Microsoft, and will some day end with acceptance.

Over the next several hours, I have some tough decisions to make. It may take 3 or 4 weeks for the good folks at Microsoft to get a new XBOX 360 to me. Do I patiently wait that long, or do I give in to the great Halo 3 tempation and buy a new one?

I'll be honest. Everyone is expecting me to buy a new one. Its impractical. Its a waste of money. Some may even call it childish, but here I am, thinking about it. Verbalizing it. About to sleep on it. What will tomorrow bring? A trip to best buy, or quality time with my Nintendo DS? Or will I spend the day reading non-fiction thereby bettering myself as a human being? Place your bets.

There are 3 versions of the XBOX 360 available. The least dumb choice would be to buy the cheapest version, but in my time of grief, it is easy to consider upgrades.


The arcade version costs $280. As a general rule, I generally don't consider the minimal offering.

The premier model costs $350 and comes with 2 games whose combined worth is $120. $350 - 120 suggests that I'm only spending $220 on the acutal console. logical, right?

The elite model cost $450 and comes with 2 games and a 120gb drive. The games are worth $120, and the drive is worth $180. $450 - ($180 + $120) = $150. A console for $150 sounds perfectly reasonable, doesn't it? Seriously?

Oh, did I mention that the Elite is black? Oh yes. Black. That's old school. No more prissy white xbox 360 glaring at me from the entertainment center. Heck no. Its time to dare to be different.

Do you get the feeling I'm talking myself into anything?

That's it for tonight. Dawn is just a few hours away, and I have a lot to think about. I'm going to need some hot pockets.

Thursday, October 25, 2007

DvdFriend Site Update

Greetings

Site development has been on a hiatus for several weeks; some of it involuntary, and some of it just laziness. I had a bunch of side work to do for one client, and I built a prototype for another. (Lets see if that prototype turns into actual work).

Anyhoo, I've been able to work on DvdFriend quite a bit this week.

Pricing
- Pricing - PREVIOUSLY: I created the APIs to retrieve the data from the vendor sites and update the DvdFriend database. There's a EDIT PRODUCT page that uses that technology to do the initial parsing.

NOW: The next step is to update the prices automatically on a periodic basis. When the page loads, it checks when the price was last updated. If it was over a day, it needs to get fresh pricing. It needs to do it in the background, though. I don't want the page to hang for 5 or 10 seconds as it hits the vendors. Additionaly, if hundreds of people are hitting hundreds of pages, I don't want it to process all of those remote requests at once.

I spent more time on this then I needed to. I could've slapped together a quick solution to satisfy the immediate need. Instead, I created a ThreadQueue api that allows for great reuse for future needs. Basically, its just a queue. You stuff things on the queue. You then assign a delegate to the queue, and tell it how many can be processed at once. The object takes it from there. It will start up to x number of threads which process the queue. When each thread finishes with a work item, another thread is started that handles the next one. Neat. (It uses the thread pool, so the same threads are used repeatedly.)

Its a neat object. I spent the extra time on it so that I can make it distributable. I'll finish it up and make it available somewhere.

So anyway, when the page loads, it checks to see if the prices need to be refreshed. If so, it queues the items that need to be refreshed. The page shows the prices, but displays "refreshing" beneath them. A tooltip tells you what's going on, and suggests that you refresh in a few seconds. (Later, I'll wrap this up in an update panel and have it refresh automatically. 1 thing at a time.)

There's one problem, though. I only have about 50 prices in the DB. The original DB, which has all of the pricing, is sitting on the hard drive on my shut-down home computer. I get home tomorrow and leave again Saturday morning. I'll see if I can run the conversion somewhere in that window.

Alas, the moral of the story is that pricing is now FULLY functional. I just have to repopulate the data.

Admin Product Editor
The product page editor is where you assign vendor product ids to the product. Once I have the product ID, I can refresh the pricing whenever I need to. Currently, that's done just by dragging-and-dropping the url from one browser to the editor page. That's a pain, but there aren't many options. IE7 really locks down things like cross-frame scripting. I looked at creating a windows form program where that wouldn't be an issue, but the IE control constantlly crashes under XP PRO SP2. So, at the time I did what I could and just added a textbox. You paste the url, and it will parse out all of the information.

That's handy for updating products on a one-by-one basis. But, it needs a way to deal with things in mass. It needs to tie into lists of products that need pricing.

I created a view that assembles all products + all product types + all vendors and indicates if pricing exists for each one. It also specifies if any reviews or ratings exist for that product. From that view, I can now create child views that provide specific useful information.

The first one is "products with reviews and without pricing". Now I can run a quick query and see which products people have reviewed but don't have prices. I can display the list of the left side of the page and work through them one by one. (They'll probably be ordered by recent review date so that the most recent stuff can be updated).

The editor page has a button that launches a search in the vendor site. I use that as a starting point, then browse to the particular product I want. I then paste (or drag) the url to the parent page.

That's a step in the right direction, but its annoying.

Solution!

At last, I came up with a great solution. As I said, there are all types of security things that prevent me from doing this the way I used to do it. Finally, I worked out something that isn't blocked by security.

You can create an IE Favorite that has javacript in it.

IE: instead of http://www.dvdfriend.us (or anything else), you can create a favorite for
javascript:alert('hello');

Each time you click the favorite, it gives you an alert box.
I created this one

javascript:alert(document.location.href)

Once that worked, I was cautiously optimistic that I could solve my problems.

The next test was this:

javascript:document.location.href='http://mymachine/test.aspx?url=' + escape(document.location.href);

That javascript redirects to a specified page and passes the URL of the current page to it. So, the final URL is something like

http://mymachine/test.aspx?url=www.blogger.com
(That's a simplified version. The full url is actually escaped within the parameter. I omitted the special chars)

This is the big test. If security was going to interfere, this would be the place. It didn't!

Once that worked, I knew I as home free.

Here's how the pricing editor works:
- Go to the Edit Product page
- Select the item you want to get pricing for (IE: Transformers / HD-DVD)
- The button redirects to VendorProxy.aspx
The proxy page saves the product id and the product type id as cookies
It then redirects to the search results page for the vendor passing TRANSFORMERS as the search keyword
- I select the TRANSFORMERS HD DVD that I was looking for.
- I then click a favorite on my link bar. It takes the url of the current page and passes it to my VendorProxyReturn.aspx page.
- The VendorProxyReturn page:
- gets the product id and product type id out of the cookie
- gets the url out of the querystring
- uses those three pieces of information to get the pricing
- Redirects back to the edit product page. The pricing is now populate for that item.

I've been doing this pricing stuff since 1999 or 2000. I've had many solutions over the years, and some have been very good but required a lot of code that wasn't 100% reliable due to the intricacies of each vendor. This solution, while not the most robust, is the simplest and easiest.

From a admin user perspective:
- click the button which opens the search results page for that vendor
- find the product
- click the favorite link
Done!

Its really cool. I'm thrilled that I finally found something that works. Another key advantage of this is that its something I'm comfortable letting other admin users use.

Product Type Images
DvdFriend is very movie centric, obviously. But, it supports all types of products. Its currently setup XBOX games and books too. The problem is that the main page is dominated by movies. If I suddenly drop in a book review, how do you know it's a book review?

I added icons to indicate the product type. There's a journal type thing for a book, and everything else is a film reel. (I'll find a good game icon when I need it). I think it looks pretty good on the page.



These changes are all live on http://www.dvdfriend.us

What's Next?
I'd like to start putting in ratings for tv shows. I have to build a product hierarchy, which doesn't exist yet. When I built this version of the DB, I kept it very flat. Previous incarnations became to complicated due to the hierarchies. Flat is simple. I can use other objects to build a hierarchy as needed, such as with TV shows, but not force it where it's not needed.

Hey, the Red Sox won

13-1? Is that even a game?

Monday, October 22, 2007

RedSox followup

When we last discussed the Red Sox situation, I expressed a disinterest in a certain ALCS game #3. As predicted, the Sox went on to lose that game. As declared, my conscience is clear. It would have been nice to see the back-to back-to back homeruns, but not that nice.

Since then, the Red Sox have won 3 in a row. I watched all three games. If they fell behind by 6 runs again, I probably would have shut it off again, but that didn't happen.

So last night they went the distance. They once again came from behind and won the pennant. It was as dramatic as 2004 (0-3 as opposed to 1-3), but it was still good.

Now on to the world series. Coincidentally, i'm going to be in Colorado next week. I don't know where Steamboat is relative to wherever the Rockies play, but it might be worth an excursion.

Go Sox.

And, let us not forget: Go Pats.

Tuesday, October 16, 2007

ALCS Game Three, Fifth Inning, Red Sox are losing by 6?! / Car Poolers

For the first time in the history of jay, as I remember it, I have stopped watching a game.

I don't often decide to sitdown and watch a baseball game, but when I do, it's a commitment. I sit there and watch it through thick-and-thin.

But not tonight. 6 - 0?!?! That's too hard to watch.

There's a chance that Red Sox could pull off this game. Maybe the Indians pitching will fall apart and the Red Sox will belt out 8 runs. Maybe. But probably not.

If they pull it off, I should feel guilty about changing the channel, but I won't. Instead of commiting to watching the game, I've re-commited to not feeling guilty if they suddenly win. Not only will I not feel guilty, but I will also not regret my decision.

Instead, I'm watching Car Poolers on the trusty DirecTv DVR. Once its over, I'll go back to the game for a status check. I expect that I'll then choose something else to watch.

In other news, I am also a Patriots fan. That eases the pain.

Sunday, September 09, 2007

The site looks ok?!?!

Is it just me, or does http://www.dvdfriend.us actually look decent?

A few weeks ago, a guy at work gave it a face lift. He sent a screen shot of the work he did. I finally partially applied it this week. It doesn't exactly match what he came up with, but its close. I have to adjust some things as I go.

The LOGIN button is now fixed to say LOGIN even when you're already logged in. I need a LOGOUT image to fix that.

I recreated the functionality to assign the images. The admin tool uses Amazon Web Services to seek images. Its pretty easy to set them up now.

I've been working on the prices here and there, but haven't focused on it. Most days I come home and collapse on the couch instead of working on the site. Now that the site looks decent, maybe it'll keep me motivated. The pricing engine is built, and Amazon parsing is setup. I'm working on the pages that will put all that other code to use.

Another Highlander Travesty - Psych

Psych is a funny show on USA. It's definitely a lightweight, but it consistently makes me laugh.

It superficially offended me this week.

I wasn't offended by the "This blows with a capital c", line. Nor was I offended by the many jokes focused on grown men hanging out at the monkey bars. No, my skin is thicker than that.

In principle, I wasn't offended by the Christopher Lambert impression. But, truth be told, I was offended (superficially) by what he said in the voice of Lambert: "There can only be one".

There can only be one? How can you pay homage to a movie such as Highlander and screw up the fundamental line that defines 90% of the plot?

I spent a good amount of time documenting my thoughts on the Highlander legacy. Then, just a few days later by great coincidence the same movie is commented on by Psych. They couldn't take a few minutes to either lookup the line or watch the movie? No one involved with the shoot recognized the line was wrong?

Obviously, the line is "There can be only one". Not, "There can only be one".

Fortunately, Psych is just a TV show that provides mindless entertainment. Now that I've documented by brief lasting offence, I can move on.

Tuesday, September 04, 2007

Highlander : The Dissapointment

Highlander

"...A man's decapitated body, lying on the floor, next to its own severed head. A head, which at this time, has no name."

"I know his name".

... Insert Queen Music here... "Here we are, born to be kings. We're the princes of the universe. Fighting to survive in a war with the darkest powers."

etc.

I've always been a fan of Highlander. I remember seeing the commercials for the first movie, when I was 14, and knowing that I absolutely had to see it. I don't think I ever made it to the theater. Actually, I have no idea when or where I saw it first, but it has since maintained its position in the upper echolons of my list of favorite movies. In Talladega Nights, Ricky Bobby stated that it won an oscar for being the best movie ever made. That might be an exaggeration, but Highlander is a solid, memorable action movie.

It's greatness is in its simplicy: the world is populated by a bunch of immortals. The immortals do battle through the centuries, eliminating each other until only one remains. The only way to eliminate an immortal is to cut off his head. Each time you kill an immortal, you absorb his power, which is the sum of all the power of the immortals he killed previously. With a story like that, how can you go wrong?

Highlander was a complete story that focused on the two immortals that would become the last two: The Kurgan, and Connor MacLeod. (Connor is known as "The Highlander", because he is from the highlands of Scotland). They crossed paths over the centuries, and never in a friendly way. Connor is the good guy, and the Kurgan is the bad guy. We witness the full backstory on Connor, but nothing on the Kurgan. Sean Connery spends a couple sentences telling us who he is, but that's it. They didn't bother filming his back story.

The movie ends with the final duel between the final immortals. Who do you think won? (My money is on the good guy.) It was a nice neat package. All of the immortals were dead except for won. Connor won the prize.

Oh, one more thing. I was just writing the END GAME section and realized I didn't mention the HOLY GROUND part. Immortals can't fight on holy ground. Why not? I don't know. It's just a rule. Don't question the rules. Which religions does this rule apply to? What makes it holy ground?

No room for a sequel, right?

Highlander 2
Wrong.

The first Highlander movie didn't bother to explain where the immortals come from, or why they do what they do. In fact, I think there's a line in the prologue that states that no one knows, but i'm not sure. Maybe that was the TV show. The lack of this knowledge is part of its mystique. It didn't need an explanation. Immortals cut off each other's heads until only one is left; that's the important part.

Anyhoo, someone got it in their head that Highlander needed a sequel. Even worse, that someone was able to convince a studio, and the studio went ahead and gave it a green light. Big mistake.

Several decades elapsed between the story lines of Highlander and Highlander 2. In that time, everything changed. Connor MacLeod is now an old man. The earth is in a constant state of dark due to a giant shield that has been constructed around the planet. Connor used his knowledge from The Prize to help construct it. The movie has a completely different feel from it. It went from a modern day action movie, to a futuristic crappy sci-fi movie. Some genius even found a way to bring Sean Connery's character back to life just so that they could kill him a few scenes later.

Oh yea, did I mention the aliens? Yes, I said it. Aliens. It turns out all of the immortals are from another planet. They were deposited on earth for the purpose of the game. As soon as more aliens arrived, it was like a reset. Connor became young again, and went about his business of chopping off heads. There was a new bad guy in this, I think, but I don't remember his name. I won't lose sleep over it.

This movie is a disaster of biblical proportions. They completely butchered the story. They took all that was cool about the first movie, and spat on it. Shame on them. Really. Shame on them.

Highlander 2 was recut at least once. There was definitely a "renegade version", and possibly a director's cut, though they may both actually be the same cut. The renegade version was better than the original, but that's like saying NSync is better than the Backstreet Boys. They both still suck.

But, in its defense, I must say that it might've been a pretty good movie if it wasn't a Highlander movie. It might've been a good sci-fi movie if they didn't try to force it into the Highlander mythos. It could've been a movie about a shield around the planet, and maybe some non-immortal aliens. I don't know. It could've been less than hideous. But it wasn't.

Highlander 3 : The Final Dimension (or, sometimes The Sorcerer)

The smartest thing about H3 is that it completely disregarded H2 like it never happened. Aliens? What Aliens? What shield? What in the name of god are you talking about?

The best part is that they didn't acknowledge H2 in any way whatsoever. It just never happened. Excellent.

Then they pushed it too far and overlooked some things about the first movie too. Here's the basic idea: A few hundred years ago, Connor crossed paths with a few immortals inside a mountain. The mountain collapsed trapping the bad guy immortals. Fortunately, Connor got away.

A few hundred years later, Connor fought the Kurgan and won the prize. He then had a baby boy with the chic from the first movie. She got hit by a car and died. Then the immortals in the mountain broke out, and the game was back on. "Did you really think you were the last one?" "Well sure. I won the prize. I remember it clearly."

That's where it went wrong. Its as if the fact that they were buried in a mountain fooled the poweres of the universe that granted the prize. "Our bad, we didn't see him". It was dumb.

The movie, though, isn't a complete failure. It's bad, but not horrendous. The queen music was gone which allowed for an interesting new soundtrack that I really like.

I always think of Highlander 3 and Batman 2 being similar in the suck-to-good ratios. In batman 2, I like the catwoman parts. I didn't like the penguin parts. In Highlander 3, I liked the Connor/sword parts, and I didn't like the Mario Van Peebles part. If they got rid of Mario Van Peebles and most of the plot, then there wouldn't be much of a movie left, but what was left would've been pretty good. There's a good scene where Connor's sowrd gets broken. It actually is kind of sad as far as the Highlander universe is concerned. It's THE sword. You don't break the sword! He went back to the old country to fix it. Good stuff. I c an't remember much else that I specifically liked, but I remember there being a bunch of segments that didn't want to make me kill myself, which was much better than 2.

In short, Highlander 3 is watchable, with some better parts, but its still a failure overall.

Highlander : The TV Show
A Highlander TV show came on the air in 1992. Connor was in the opening episodes, but only to provide the introduction to a new character, Duncan McLeod. They're cousins. Duncan is another mmortal of the MacLeod clan, a few generations younger than Connor.

I didn't watch it when it aired. I recently watched a few episodes on DVD, but couldn't get into it. The production quality was terrible, and the stories were week. Acting, apparently, wasn't a prerequisite.

Somewhere along the way, the TV show introduced "The Watchers". The Watchers are mortals that are aware of the immortals. They monitor the game, but don't interfere. They keep tabs on everything.

As far as I can tell, the TV show disregards all of the movies.

Highlander 4 : End Game

Yea baby! This is the one right here. The year is 2000, and at long last, an excellent Highlander movie is created. I'm not being sarcastic. I love this movie. They did a great job. I like this as much as I liked the first one. It's not flawless, but neither is the first one.

Endgame is along the lines of the tv show more than the other movies. Duncan is a lead character. Connor is pretty signficant too, but this is basically the passing of the baton. They have to combine forces in order to defeat Kane. Kane murdered Connor's mother, so they have history. It's bitter sweet without the sweet.

Kane had a gang of immortals. They're the new young and hip immortals to usher in a new age of highlander. They attack Connor, and a great fight ensues. Duncan can kick ass in ways that Connor couldn't, and so can the bad guys. The Watchers finally stop watching, and engage, which gets Duncan out of a pinch.

Meanwhile, Connor has gone into hiding. He's tucked away at the Sanctuary, where by his own will he is sedated to pass through the years without fighting every 2 minutes. Its good for Connor because he's depressed, and its good for the folks that run the Sanctuary, because they must assure that there are always at least two live immortals. Kane finds out about this and invades the Sanctuary. He kills everyone except for Connor, because he wants to torment Connor for the rest of his life. This dude can hold a grudge.

The DVD had a great commentary. The movie was made for a small budget. They kept talking about the things they wanted to do, but couldn't due to time and money contraints. It's too bad about the time contraints. If they didn't have the budget, they should have at least been able to take their time with it. They also talked about the minor adjustments theyre made between the theatrical and DVD releases. For example, there was a scene where Connor and Duncan were fighting as one. The effect for that was cheesy, so they toned it down.

I sense that the people making the movie were very aware of the mythos and the fans. The fact that there are immortals everywhere is unbelievable enough. We don't need any sorcery or silly effects on top of it. Keep it simple. I remember in the commercial (or trailer) someone actually got cut in half then came back together because, obviously, they're immortal and need a way to deal with that. I'm pretty sure that got cut, which is good.

There's another scene in Endgame that I liked a lot, but it wasn't there the last time I watched it. I don't know which version its in, but if its not in the final version, it should be. There's an asian bad guy who turns out to have some honor. He realizes that Kane's about to kill him, and there's no chance he can defend himself. So, instead of surrendering his power to Kane, he sticks his sword into the wall, then runs into it decapitating himself. Awesome.

Highlander 5 - The Dissapointment

At last, we get to the point of my ramblings.

For years, there's been talk of Highlander 5 : The Source. This sounds like another attempt to explain the who and why of the game. H2 attempted it, and everyone involved is going to hell.

At least every few months, I jump online and search for 2 things: Highlander 5 and Mortal Kombat 3. Its a ritual. There is stuff to be found on H5, but not much. Production notes indicated when it finished shooting. In March, we learned the movie would be released in September 2007. It is now September 2007.

I saw a trailer, or a clip, a few months back. It didn't look good. The bad guy was the hunchback of Notre Dame. I can't imagine that will justify itself. There's no sign of Connor in this one; it's all Duncan.

Anyway, last night I did my periodic search for Highlander 5 and learned that it will be airing on the sci fi channel at 9pm on Saturday September 15th. I don't know if you've ever watched SCI FI on a Saturday night at 9pm, but its 90% crap. I happen to like it because I like crappy SCI FI movies, but that doesn't make them any less crappy.

I didn't expect H5 to get a theatrical release, but direct to tv? Really? Is it that bad?

Maybe not. Maybe this is the rare 9pm Saturday movie that turns out to be pretty good. Maybe its a gem. Maybe its the movie that made all the other crap worth watching. But, on the other hand, maybe not. Maybe, like most 9pm Saturday night movies, its crap.

I eagerly await 9/15/2007 to find out.

Conclusion
Highlander 1 is Excellent.
Highlander 2 dishonors Highlander 1. It's horrific.
Highlander 3, in a stroke of genius disregards H2. It also disregards the important parts of H1. Its bad, but not too bad.
Highlander 4 disregards all previous movies, but is excellent in its won rite.
Highlander 5 is going straight to tv. God help us.

Sunday, July 15, 2007

DVDFriend.us - Making Progress

The site now allows for the adding of ratings and reviews. Yesterday I altered the GUI a bit. It looks like a third grader did it, which is better than usual.

Of the entire spectrum of colors visible to the human eye, I have limited myself to just these:

silver
dimgray
black
white
yellow
steel blue
and, for special occasions, red

I started adding some per-use controls such as "Reviews Auto Approved" and "New Product Auto Approved". In a more mature system, this would be dictated by roles based security, but that's overkill at this point. A few simple flags will suffice for now.

When a text box is selected, and you press enter, you expect it to activate the appropriate button. So, if you're typing in the search field and press enter, you expect it to search. ASP.NET 1.1 didn't do that on its own. Some javascript was needed. I started to write that javascript today, then slowed down and did some research. ASP.NET 2.0 offers a new DFAULT BUTTON property at the container level, which is handy.

I also added a NEWS section on the left hand side. Only admin users can add new NEWS items. (Again, this could be via RBS, but not yet).

All the blog entries (reviews, news, etc) are stored in one table. You define zones and associate them some blog types. I created one zone for the news on the left side of the page. It contains only the news blog type. The center zone contains all blog types except for news. The center zone is drawn by a repeater on the default.aspx. The news is drawn by an ASCX. You set the zone and the title, and it takes care of the rest.

I had a little trouble with the ASCX at first. There's an object data source and a repeater. The ODS points to an object which users Enterpriese Libary to return a datatable. It's pretty straight forward (thanks to the ODS), but it wouldn't bind. I found that the ODS was accidentally within an H1. Whoops.

The search needs some work. Currently, its tailored to searching for a product that you want to write about. You may also just want to read about it, or get pricing, etc. In that scenario, it should take you to the as-yet non-existent product page.

So, lots to do, but picking away...

Wednesday, July 11, 2007

Server move complete. Time to move on.

With regret, I sent the email that effectively terminates a 6 year business relationship. It sucks, but had to be done.




Hello

Ok, i've relocated. You can cancel the account now.

I'm really dissapointed that I have to leave after 6 years, but I can't just lose 6 months of data, especially when there's no way to know that its not going to happen again. I don't mind outages, but data loss is a different story.

Good luck with ---. I hope that not too many of your clients found yourself in my position.

Jay

Sunday, July 08, 2007

The Great Flat Tire of 2007

The following is a recreation of an email I sent to my team (work) on 2/4/2007.
Except for one minor change, this is orginal; I added a picture of Mr. Burns. I don't know why I didn't do that originally, but I'll guess that's it was due to laziness.

Subject: Automobile Difficulties

Greetings Team


In 1844, a fellow named "Charles Goodyear" invented a process called "vulcanization" which, to my surprise, is not star-trek related. By 1877, this technology had been put to good use by the likes of John Boyd Dunlop and the lesser known, but equally important, Robert William Thompson. Their efforts resulted in creation of the "tire", which, according to my 11 year old nephew, is still in use today.


Though different vehicles have different number of tires, to my embarassment, my motor car is limited to just 4. It may be argued that the so-called "spare" is also a tire, but for the purposes of this deposition I will not include it in the calculations.


Last evening (Saturday) while driving home from an event called "poker night", I ran over what can most specifically be called "an object". Said object violated the integrity of my "tire" (see paragraph 1), resulting in defalation. This resulted in a 25% loss of overall tire functionality on my motorized buggy. Attempts to enlist professional services to replace the faulty tire have, to this point, been unsuccessful due to the unavailability of a suitable replacement. I will call Continental Customer Service early monday morning to deal with warranty and replacement issues.


Unfortunately, the previously-mentioned-and-disregarded spare tire isn't highway capable, so my travel capabilities are regrettably limited. I will get it corrected as soon as possible, but it's proven to not be possible on this seventh day. If I'm not able to work it out Monday (due to continued unavailability of the tire), I'll rent a car for Tuesday.


I appreciate your support in these trying times. I will be available via cell phone and same time. If you have any questions or concerns, please relay them via the medium of your choice. As always, you are welcome to make a personal visit to my humble abode in Boynton Beach. I can provide refreshments in the forms of chex-mix and arizona iced tea. (Please bring your own toilet paper).


References




Figure A: Marketing image of 2006 Chrysler 300. Though this is not my 2006 Chrysler 300, it is a fair representation. The faulty tire is denoted by the red square.


http://en.wikipedia.org/wiki/Tire
Hyperlink A: Wikipedia provided the information about the history of the tire.


http://thesaurus.reference.com/search?q=car&start=1
Hyperlink B: reference.com was useless. I needed alternative words for "car", and it failed to help in any way.





Mr. Burns, of "the simpsons" fame.
Cartoon Character A: I believe it is he who inadvertantly suggested the term "motor car" to me during a recent rerun. Sure, he's a cranky old guy, but he helped me when I needed it.


Acknowledgements
A lot of works goes into an email like this, and I couldn't have done it without the love and support of my friends and family. They encouraged me during the bad sentences, and applauded me during the good. Several times, it would have been easier to just cancel the email and leave a voice message, but they pushed me through.


I don't want to thank people individually for fear of forgetting someone, so I'll conclude just by saying thank you. You know who you are. Peace.

DVDFriend.US update

The new super-crappy version of the site is online at http://www.dvdfriend.us. As you'll see, there's almost nothing there other than basic page layout. I have written most of the conversion program to import data from the old site. I expect to run it in production this week.

The old site ran against a shared SQL 2000 database. I lost that when I moved to GoDaddy.com. Fortunately, our good friends at Microsoft provide SQL SERVER 2005 express for free. For at least my immediate purposes, that's sufficient.

I went through some of the pages and cleaned them up a bit. I just did some minor things, such as setting the focus on the first logical control when the page loads.

I'm relying on asp.net for security more than I ever have before. As described earlier, I'm using the login controls that ship with it. Now, I'm also using directory security to force login before accessing particular pages. Previously, I prefered to this on my own.

I'll keep picking away at it. After the conversion (users, products, reviews), I'll get to work on repopulating the images. Then, I'll move on to the pricing engine. At the same time, I'm trying to enlist gina's help to make the site look less hideous.

Server Move Update

It's been a learning process, but I finally have pretty much everyting moved to the new server. Even though it was a pain, I 'm glad to have experienced it. To this point, I've always paid someone to manage the details of domain administration for me. With the new VPS, I had to do it all myself.

I contacted GO DADDY support 4 times. Overall, they were helpful. They negelected to answer one of my questions, but I pushed on regardless.

All domains and email addresses are now hosted on the new server. So far, I haven't heard from anyone with problems. I expect to cancel the old service by midweek.

Once again, I would like to express my dissapointment in having to move. I like being loyal to the companies and vendors I use, even though I am such a small entity I'd be lucky if they noticed my existence. I've been using that company since 2001, and I think it sucks that I had to leave. I don't see how I could possibly stay after losing 6 months of data.

It all worked out for the best, though. The Go Daddy server is cheaper and gives me more power. I can do everything on my own now, and its cheaper, so happy ending. I think I'm over the hump in the learning curve.

The Sounds of Ice Cream

On Friday, June 29th 2007, Gina, Rafael, Ally (spelling to be confirmed) and I decided to go see Die Hard 4. I have pretty much decided not to go to the movies on opening weekends anymore , because the discourteous crowds are intolerable. However, Die Hard was playing in a premier theater (over 21, reserved seating), so I thought that would be worth the risk. When I asked Rafael if he wanted to go, he expressed the same hesitancy that I did, but also decided to risk it.
We started the evening by going to Tony Romas. Rafael got there first and called to report that it was closed, as in, out of business. That was a bad way to start the night. I’m a big fan of Tony Romas, though I fully understand why they may have closed. The service was slow and generally terrible, but gosh darn it, I love the food. What was supposed to be a night of celebration started off with a period of mourning.

This quickly passed and we relocated to Longhorn. The experience there wasn’t much better than Tony Romas, and the food isn’t as good. We ended up tipping a little under 15%. I wonder if all the wait staff transferred from Tony’s.

After eating dinner, we had a lot of time to kill before the movie, so we went to Cold Stone ice cream to pack on a few more pounds. While we waited in line, the staff occasionally broke into song. Contrary to its intent, the cheery melodies produced suicidal thoughts. Rafael was trying to identify what prompted the evil singing, and I explained to him it was their tipping policy. You tip; they sing. We both agreed that this was a good motivation to not tip, which introduced a quandary. We like to tip, but don’t want to be punished for it.

We sat down and ate our ice creams. At one point, the entire staff disappeared into the backroom. Rafael hypothesized that they were going to a rehearsal session. I wondered if they had a karaoke machine back there. I overheard them talking about baby pictures earlier and thought, more realistically, that they were all going “ooh” and “ahh” over some digitals.
When at last we were ready to leave, I produced two dollars for the tip jar. Rafael gasped in horror. I told him not to worry; we would do it smart. At this point a new line had formed. Rafael escorted the ladies outside while I worked my way up to the counter. He stretched out, as if on a start line, holding the door open for me. A few people came in as I held the 2 dollars over the tip jar. When at last the path was clear, I dropped the two dollars and ran as fast as I could out the door. Rafael waited until I cleared the door, then followed suit, and we escaped to the parking lot. We were all pretty happy with ourselves, especially me, since I’m so self-centered. I deemed the joke successful… at least, for a few seconds.

In a tragic twist of fate, we learned that we had sadly underestimated the determination of the staff of Cold Stone pizza. Any doubts that we had about their commitment to the company were quickly erased. One of the guys came running out after us, singing at the top of his lungs. And he didn’t do it just enough for us to hear it and get the point; he followed us and sang the whole song. There was no escape. He knew what we did and why we did it, and he wasn’t going to let it pass. He should be employee of the month.

We didn’t flee as we should have. I had great alternating urges to “run” and/or “kill him for food”, but millions of years of evolution allowed my modern mind to overpower those primal instincts. We had made a funny. He called us on it. We would have to take our licks and listen to the whole thing.

That was hard to recover from. I assumed the fetal position and cried for 17 minutes. Then we got up and went to CVS hoping to kill some time there. They were closing. That’s ok, though, since I don’t think we would’ve found much to do there.
Somewhere along the way we ended up at Circuit City. I think it was between eating at Longhorn and eating at Cold Stone, but I’m not sure. Regardless , we went to Circuit City to kill some time for one reason or another. Rafael and I were ecstatic to find that Guitar Hero 2 for the XBOX 360 was set up. We rocked out to SWEET CHILD OF MINE. His buttons weren’t working right, and my bar (not sure what you call it) wasn’t working right. That’s quality advertising.

At last, we made it to the movie. Fortunately, it worked out ok. The crowd was reasonable. I didn’t care for the movie, but that’s another blog for another day.

Tuesday, June 26, 2007

New Host Found

After a week and a 1/2 of looking for a new host, I ended up where I should have started: GoDaddy.com. The new server should be setup by tomorrow. I'll start moving everything shortly after.

Monday, June 25, 2007

"Holy Baptism, Batman", and the Transformers

I flew into Boston Saturday night to partake in the Christening of my God son, Dylan Francis, on Sunday.

Dylan spends his days expelling various substances in the form of spitup, poop, and tears. I'm pretty sure I can beat him at any XBox game, though he certainly would win a projectile vomitting contest. That gives him the edge, because he will may grow up to be an excellent xbox player, but I will never be able to projectile vomit like he.
Per norm, I bought the congratulations card Sunday morning. I was unable to find a non-religious god son card, which put me in something of a quandry. From a capitalist perspective, I may have stumbled upon an untapped niche market. (You may think that's silly, but Christmas is supposed to be a religious event, and there are plenty non-religious cards.) I had a hard time determining if Christening and Baptism are the same thing. I decided they were and, luckily, I guessed correctly.

The ceremony started at about 1:15pm. We made the sign of the cross a few times, lit some candles, poured some water, and were generally religious aout the whole thing. Dylan kept quiet, though the same can't be said of the other participants. There was a fair amount of wailing.

We then proceeded to Amy and Danny's house to enjoy meatballs, cold cut sandwiches, salads of the potato and macaroni varieties, and a wide selection of beverages. Jesus would approve.
A lot of family was there. I spent a long time talking with my cousin Shanna, which was fun. She's a teacher now and once referred to herself as "Ms. French". Everyone's all grown up now.
Cousin Karen and Aunt Marie were there with a herd of kids. Karen thought it would be a good idea to where white pants to an outdoor party loaded with children. Though Karen is generally considered to be a smart cookie, I question the wisdom of her wardrobe choice. I credit Amy with that observation.

Aunt Marie made the mistake of asking what I do for a living. I made the mistake of answering her. Her eyes glossed over in disinterest, and she went to a special place in her head. Then she informed me that, in fact, she does exactly the same thing as I do. I told her I know and she was my inspiration. The duel of wits ended in a draw.

Uncle Mark and I spoke about the glory of Microsoft for quite a while. He's of the X-Files "trust no one" mentality. As soon as he has a feasible non-Microsoft option, he'll go that route. In the meantime, I'll embrace it and get giddy every time they release something new. Sure, Vista brings my machine to its knees every time I turn it on. But will I uninstall it? No. Vista is the latest thing. Of course I have to have it installed. He raised an interesting point that .NET is named in a way that's not very consumer friendly. Maybe they should rename it to "Microsoft Bob". However, the fact is that whether you want or understand .NET, it will make it onto your windows platform sooner or later. Resistance is futile.

The day wasn't without reprimand. Chris asked if it would be tacky for him take a plate of food home. I responded by asking if it would be tacky for me to kick him in the nuts. I was advised that my comment was inappropriate in the presence of children. However, my pre-statement recon of the immediate population revealed that there weren't any children, so I believe the chiding was unnecessary and probably based on reflex more than consideration of the actual evidence. Chris took a plate home, as did I, so we can all enjoy the leftovers and put the incident behind us.

Aunt Linda gave me and update of her clan. Brian is managing a bar; Keith is working his way into the management circles at furniture company; Douglas is working as a union laborer for Chris's company. It's good to hear everyone is doing well.

I spent some time with Danny's family. Beth, Laura, John, Mary. They're always thoughtful and ask about Gina. Incidentally, Beth is the God mother, so we spent some quality time together making the sign of the cross. Laura and I talked about Zarex, the tip top market, and facets of a Somerville upbringing. Mary shared some pool critter experiences. I've had a couple of these myself, but hers were more extreme and taught me that true familial love can exist between a skunk and her offspring.

And I'd be remiss without mentioning the quality time spent with Amy and Danny. It was limited due to their hosting responsibilities, but as the party wrapped up had a good conversation. We usually end up reflecting on the joys of our childhood. Tonights topics included bunk beds, extreme temperatures in pre-air conditioning days, and sheets that serve as walls to split one bedroom into two.

And lastly, it's always a pleasure to hang out with Kerry. She quickly proved that she could probably emabrass me on a basketball court. (But, can she beat Dylan at projectile vomiting? I don't know.)

Hopefully I didn't miss anyone. If I think of something key, I'll have to update this real quick and hope that person hasn't already read this. If I'm too late, then please accept my apologies.
Jonathon (my 10 year old nephew) and I left the party at about 8pm. We closed the joint. We were lost at 8:02. I drove blindly on the theory that every road leads to somewhere and I eventually made it back to known territory. I didn't know the quickest way back from said known territory, but at least I knew where we were. I attemped to engage Johnathon in conversation about the current difficulties we face in Iraq, Afghanistan, and yes, the middle east in general. I think we were making some real progress in solving said problems, but the conversation eventually turned to the Transformers. After a few moments of discussing the finer points of autobots and decepticons, I learned that Jonathon, my own flesh and blood (by relation) had not seen the 1986 animated movie. In fact, he didn't know it existed.
So began what shall be known to all those that follow me, "The Trek". 8pm Sunday night is not the best time to set out on this type of adventure, but we did anyway. A great injustice had become known, and it was my responsibility as uncle, a transformers fan, and, gosh darn it, a good human being, to set things straight. We immediately proceeded to a conveniently located Super Target. I explained the situation to the salesman, and he was as shocked and disgusted as I was. He immediately went to the computer, found the location of the movie, and proceeded to the designated shelf space. It was empty. The salesman offered to assemble a team of people to fan out across the state and find a copy for me, but I promised him that wouldn't be necessary. I had heard the calling. Could it be coincidence on the very day that one nephew gets welcomed into the kingdom of god, that I learn another nephew has been denied access to Tranformers the Movie? Hardly. Today was to be a day of days.

We proceeded to Walmart. It was closed. We had been smited. If the possibility of a Walmart being closed had crossed my mind while we were at Target, I would've pruchased a crowbar and a ski mask so that I could infiltrate Walmart. This was a holy mission. Any such travestys would be forgiven.

The next attempt was at a location that we will for the purposes of identification call Blockbuster, but for the puposes of significance will forevermore be known as Mecca. From a distance, it looked like it was closed, so I stood on the brake for several seconds while revving the engine. At last, I released, and we launched forward with the intention of busting through the display window and, in particular, the Hannibal Rising poster. The 99 Chrysler Concorde launched forward as if a holy arrow that cannot miss. At the last second, I noticed that the establishment's lights were on, there were people walking in and out, there were a lot of cars, and other symptoms that suggested it was open. I was able to decellerate without incident thus sparing the establishment (and Hannibal Rising) the impact of the holy arrow.
we entered the facility with full confidence that we were about to take possession. "Transformers the Movie" would elude us no more. That confidence proved justified when, at last, we found the movie in the family section. But our trials were not over, for only the most earnest and reverent are destined to watch this movie. My Florida membership card could not be used in Massachussetts, so I would have to register for a new card. My preference was to by the movie which would symbolically and lawfully cement our commitment to the film. The clerk (whom we will call Judas) determined that there were 2 new copies available, so purchase was a viable option and, more importantly, eliminated the need for paperwork. Finding the two copies proved to be a challenge. They weren't where they belonged, which I found hard to believe. How could an business full of mimimum wage 16 year olds possibly be disorganized? We searched viligantly in all the right places, but could not find the 2 retail copies. At last we concurred that we'd have to do it the hard way; create a new membership. Just as we committed to the unthinkable, the ceiling split in two and heavenly rays burst through to illuminate the two mssing copies; the angels beckoned, and Jonathon heard the call, for it was he who on this 24th day of the 6 month of the two thousand and seventh year of our lord reached out and grasped our holy grail; he held it high and proud and reverently, and declared from the mountain top for all to hear, "Found it".

How was it that he, a child, was able to find the movie when I could not? Is it the product of the innocence of youth, or does God just like him better? Dare I suggest the possibility that he just happened to look at the "Varsity Blues" section and it just happened to be there? While I spent my time looking under "T" and "Family", and the clerk wasted his time looking where the computer said it would be? Should the clerk and I both been insightful enough to start looking in the "crappy MTV movies" section? We may never know why the events played out the way they did, but our faith does not require us to understand; it only requires us to disregard science. It is through faith and only faith that we finally obtained that which we sought.
We returned to the abode and fired up the movie. We earned it. It was fun watching the movie through Jonathon's eyes. First of all, its 20 years old. It looks and sounds like its 20 years old, which isn't a bad thing, but its certainly different than what kids now expect fom cartoons. Jonathon is very familiar with the Transfomers of his generation, but not those of mine. When autobots started dying, he was suitably shocked, When Unicron ate a planet, he was surprised. When Optimus prime died, he didn't care. He simply stated "he's obviously going to come back to life." I corrected him: Optimus Prime is dead and he's going to stay dead. That produced the wide eyes of disbelieve that should've been there to begin with. When one of the dinobots shot a burst of flames at a Decepticon, he declared something along the lines of "Awesome, dude!". when Unicron rebuilt the battered decepticons, he was excited. When Galvatron destroyed Star Scream, Jonathon now understood that dead means dead, and he appreciated it at face value. I believe the term used was "sweet". When the autobot space ship broke up in battle, he gasped aloud. When Hot Rod and Kup crashed onto the sharkicon planet, he recognized she Sharkicons. I warned him about that earlier because he sharkicons are the lowpoint of the film. His expectations were duly set. When the rest of the gang crashed into the planet of junk, he fell asleep. It was a long day for all of us, and that was enough for one night.

I think he genuinely enjoyed as much as we've watched so far, and I loved watching it with him. I was older than he is when I first saw it. I don't think I had the wide-eyed amazment that he has. To me, there was only group of transformers (gobots don't count, so get that dirty thought out of your head). To him, there are tons of transformers. The franchise has been reinvented more than once. The toys are different, the cartoons are different, and so are a lot of the characters. The original generation is new to him. The new generations are foreign to me. At one point he asked, "Since when does megatron have a sword?" and I responded "Since 1986". He got my meaning and I sense at that point he came to appreciate what I've been attempting to describe; everything he knew about this facet of our culture was based on 20 year old stories the he didn't know anything about. This is the origin that occurred years before he was born, and this is his first exposure to it. We've begun to bridge the gap.

Jonathon watched the rest of the movie on his own early the following morning. I was still out cold after a long night of typing most of what you just read. He said he liked the movie a lot, and had a few comments about Rodimus. I would've liked to watch it with him, though, to get his genuine reactions.

Sunday, June 24, 2007

Fun with ASP.Net

As mentioned in the previous post, I've embarked on rebuilding DVDFreind.US for the 19th time. This time around, I'm using it as an opportunity to become more familiar with all of the controls built into ASP.NET.

I've been using ASP.NET for years, but I don't use a lot of controls. For the most part, I'm a middle-tier and database guy; I have very little interest in the presentation layer. I generally just drop a grid on the page, then manually bind it in the code behind.

The last time I worked on DVDFriend, I played with some things like the repeater. However, I couldn't get it to work just the way I wanted, so I revereted to building it manually. But, the attempt was a step in the right direction.

The main page of the new site is using the repeater control to render the recent blog list. This time around, it worked very well, and I'm comfortable with the architecture. ASP.NET would allow me to very simply bind the repeater to a SQL query. But that's bad design. I wouldn't do that unless it was a throwaway page, or if I temporarily lost my ethics. That's just not good design. However, ASP.NET allows you to use an Object Data Source. I bind my repeater to the object data source. The ODS calls a method in by my business object, which uses the DAL to get the data. All the layers are separated, so I'm happy.

I also learned a lot about the login controls. Good stuff. I've always coded this stuff manually. I see now that was a mistake and a waste of time. I've been using the login control since its invention, but I hadn't used the other related controls.

I usually have a link that either says "Login" or "Logout" depending on your current state. I've always manually created this, but today I learned it comes with ASP.NET. I just dropped the control in the header, and I was done. Ignorance wasn't bliss.

Coincidentally, recently at work we wanted to modify the login control and reposition the Forgot Password link. I didn't work on this item, but it was put on hold because there wasn't a control property to control that. Since I was I was playing with the control anyway, I looked into that problem. The solution was easy : convert the control to a template, then reformat it any way you want.

Going through this stuff took some time, but it was worthwhile. I'm learning all of the things that seasoned page developers take for granted. I'm making a point of using the controls rather than follow my instincts and code it all manually. I'll continue to use the controls wherever possible.

Saturday, June 23, 2007

Death and Ressurecton of a Site

Monday was a crappy day for http://www.dvdfriend.us. I got an email from my hosting company (whom I'll keep anonymous) saying that they had a catastrophic database failure and they were working on recovering it. As the day progressed, I received more emails, and it ended up that they were only able to restore a database that's 6 months old.

6 months old. That's disgraceful. In the last 6 months, I completely renovated the website and added a lot of content, and now it's just gone. Data is sacred. You can't just lose 6 months worth of data.

For the most part, I'm just disgusted about it. I could probably be angry, but the disgust is too over powering. I've been using the company for over 5 years, and now I have to drop them because they don't know how to run a backup. I've spent most of the last week just shaking my head in disbelief.

So, I'm looking for a new hosting company. So far, I can't find the same service at a comparable price. I'm willing to pay more since the extra cash will probably result in some reliability, so I'm weighing my options.

In the meantime, the site is down. I can rebuild the database from my copy, but I'll still be missing 6 months worth of data. This brings me back to disgust. I just don't want to deal with it.

I'm taking this opportunity to reconsider the website and database design once again. I just finished the last major renovation a few months ago. The database is solid. I've been able to add any types of data that I want without a problem. I sort-of like the website too, though I have received some negative feedback. The fact is, I'm lousy at page design. I can code it, but can't make it pretty. I try to put too much stuff in a small spac.e So, I'm back to the drawing board.

I'm trying a simpler blog-based approach. You can go in and type whatever you want about whatever you want. If it happens to be about a movie, or book, or any other material thing that you can buy, then you can associate the blog entry to that product. By doing this, all similar entries can be grouped together. The previous version of the site were product based. So, if I just wanted to write something random, I had to finagle it to get it where I wanted on the site. Now, everything is just a blog entry, so no finagling. (At least, not yet).

I've simplified the home page quite a bit. There's room for 3 columns, but I only have one so far. It lists all of the recent blog entries in a simpler format. Previously, I tried to display everything about the product. I've trimmed it down in the new version. I'm using bigger fonts and less information. The rating is more prominently displayed. Once I get the images back, I'll put them in there too.

I'm starting off with just the basics. Once I find a new hosting company (you know, one that respects my data), I'll put the new site online and we'll see what happens.

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.