December 2007 - Posts
After mostly sitting on a mostly functional, if not feature complete, build of POP Forums v8 for almost a year, I deployed it as a part of the second coming of PointBuzz, the most popular unofficial fan site for Cedar Point amusement park. It was kind of the step child site I haven't paid enough attention to over the last couple of years. My partner on the site and I decided to scale back what we were doing and stick to what we were good at: forums, photos and news, instead of duplicating a ton of content that the official site already provided.
For the most part, I'm extremely pleased with it so far. There are quite a few things I look forward to adding, and now that the AJAX framework is very much a production piece of ASP.NET, use more of it. So far, here is what I've learned since putting it in the wild.
First off, templated controls rock. Placing ads inline is easy, and easy to programmatically turn off for our premium members. When I write the additional plumbing to show moderated posts and/or topics inline, it's as easy as putting another template in the various controls. Adapting pages to the "look" of the site is super easy as well. For this site, we ditched five-column grids and focused on the titles because we think that's what's important.
Using non-rendering controls to control other stuff on the page is cool, but it grows messy. My plan was just to get as much display logic out of the page itself as possible, and it does, for the most part, do that. However, when I look back at the code, some of which is now three years old (like I need to be reminded of that), I have no idea what the hell is going on.
I finally have security logging that works. I admit it's not something I'll use often, but it was something I always wanted when someone was doing unpleasant things. Perhaps my biggest shocker is that my home-grown session manager works as well as it does. Only 0.4% of session starts lack a session end. I must have rewritten that code four times, so it feels good to see it work.
While I'm generally happy with the performance, most pages rendering in .05 seconds or less on average, I still have some indexing weirdness to deal with. For example, I want to index the user ID column on the posts table, because it makes looking up "my posts" easier, and to some degree makes counting posts by users faster, but it's taking a pretty big hit when it inserts a new post. I've tried to index as little as possible, and in a way that I think makes sense, but I might have to bug a "real" SQL person to help me on that.
Surprisingly, worker threads to send queued e-mail and keep the session data current are living pretty well out of an HttpModule. There have been a lot of philosophical discussions in various blogs and forums about whether or not this is a good idea, but for someone who doesn't have access to the box, they don't have a lot of choices. I know it's the only way to truly kill a Web app that I've found (it'll even crash the dev server in Visual Studio if the session tables, for example, are not available), but it has been surprisingly stable. I still think there's a better way.
I've come to the conclusion that the UI to code approach is a better way to do things. The class library unfortunately only half-does that. I still have some older stuff that's stuck on that objects-mirror-data mindset, which doesn't really align well to specific use cases and the enforcement of certain rules.
There are still quite a few things I want to add. Even then, I don't know what I intend to do with it, if anything, outside of my own use. I've talked about selling it again, giving it away and asking for money only if you use it, or just keeping it all for myself. I don't know. At this point, I'm just happy that it's getting used at all, given the time I put in to it.
I still get comments on the most random posts on this blog, but none more frequent than on my previous post about the joke that is Xbox support. Read the comments and you'll find more dropped balls than you can imagine.
I'm not going to bother with contacting support, but for the better part of a year, their e-mail system is broken, and apparently there is no QA. When I buy Microsoft points, I get an e-mail receipt months later, and dated the day I actually get it. I'm a little alarmed every time because it gives me the impression that someone other than myself bought points. What a joke. People should be fired.
But it gets better. In my last post, I mentioned that I can't input my last name into Xbox Live, because apparently "Putz" is a dirty word. I really thought that now there was a famous baseball player with the name that my 34 years of torment were over. Apparently not. This is the response I got from support.
Takk for Deres email. For at kunne behandle ditt spørsmål effektivt trenger vi ytterlige informasjon. Derfor venligst kontakte Xbox 360 Kundeservice direkte på 800 14 174 eller + 47 23162554 fra mobiltelefon. Hørselshemmede (teksttelefon): 800 14 175
Mandag-fredag: 9:00 - 17:00
Med venlig hilsen
Michael, Xbox 360 Support
Yes, apparently because my name is of German origin, I should call Germany.
What have we learned? That no humans actually respond to e-mail support.
Only Microsoft could come up with an amazing piece of technology, adored by millions, and completely put off all those people with the worst possible experience after the sale.
People should be fired.
Seriously, I entered my name into my profile, and it told me, "Your name contains a word or phrase that isn't allowed."
Should I be offended?
I really like the ASP.NET AJAX script library. The Sys.UI.DomElement class
in particular has some really useful pieces parts. As much as I'm
enjoying using it, every once in awhile you find one little thing you
wish it did.
For example, I have a little script does the
expand/contract on user info in the new forum thread pages. It figures
out how big to expand the div by looking at the CSS class that it uses.
While this sounded like a good idea at the time, in order to avoid
hard-coding heights into script or the page, it ignores the fact that
you can have more than one style sheet, and for that matter, more than
one style class on the element. I wrote this a long time ago, and I
don't remember for sure, but I think my original issue was that I
couldn't simply render the div hidden, read its height, then make it
visible and start at height zero because the hidden-ness doesn't work
the same in each browser.
This is where you start to wish
something had that one more feature. I mean, all things considered,
that script library does an awesome job of isolating you from so much
crap, so I can't really complain. I'm just a big fan of taking
advantage of solutions to problems someone else already solved!
Out of curiosity, does anyone have invite codes this year for the Mix conference? It's still a bit pricey for those of us who like to attend such things on our dime.
I've spent some quality time with Visual Studio 2008 now after two weeks, and I feel like I can give a more extensive impression of the product. Aside from my previous complaint about the FTP browser, I've really enjoyed working with it, but I do sometimes feel a little underwhelmed.
Let me get some of the negatives out of the way up front. At first there was no usable build of ReSharper, and going back to life without it isn't fun. Sure, it doesn't yet support the new features of C#, but the refactoring, formatting and inspection tools that the product brings to VS really are essential. While VS has a lot of tools to isolate you from coding (as is expected of an IDE), ReSharper has a lot of tools that help you write better and cleaner code. I mean, Alt+Enter alone is worth the price of admission (adds an import statement for the namespace of the type you just tried to type automagically).
I was really hoping that the giant web.config would go away with the integration of the AJAX stuff, but it's actually bigger than ever. I expected that at least the various HttpHandler overrides would go away, but apparently that wasn't in the cards.
The new CSS stuff is surprisingly not as useful as I expected it might be. That's kind of a buzz kill. In fact, there are times when I experimented with the designer and was surprised to see that what I was composing was not how the page actually appeared in IE. It also seems to crash, a lot, when I'm editing a style sheet. That might be ReSharper causing that, which is a little weird since I don't think it touches CSS, but I'm sure the validation engine has something to do with it.
The killer feature is easily the client-side script debugging. If you really embrace the coding model that the AJAX framework uses, this feature is gold. If you've read one of the AJAX books and still can't wrap your head around it, read it again or read another, because once you get it and use it, it's amazing stuff. It's a little annoying to have to use IE, but I'm mostly over it.
I've only toyed with LINQ, and I guess I still haven't learned enough about it to make me say, "Wow, that's awesome stuff I must use as much as possible!" I'm sure that's just a matter of time. The general improvements to C#, like the automatic properties for example, are big time savers. I feel like I haven't explored those enough.
Other than that, it does feel a little more snappy and building seems to be much faster. It's not a huge upgrade, but definitely one you should consider if you haven't already, if for the script stuff alone (assuming you're an ASP.NET developer). Like I said, I feel a little underwhelmed, but it's familiar and fast and generally steady. I like that they're practically giving it away at various Microsoft events too. Giving it away to sell server product is a wise strategy.
There are three things that they didn't fix.
1) It's still slow. Really slow. That's made worse by...
2) When it can't connect, it just locks up VS and you're screwed. End process. Forget whether you should check the "passive mode?" Save your work first. I thought network programming 101 was never let something waiting on a network call hose up the rest of the app.
3) And this one is interesting... close down the FTP window and it's still connected. I closed the entire solution, and while connected to my server, I noticed that I was still logged in. Not good.
Great idea to include, terrible execution. That's only frustrating because this was their second shot at it.