July 2003 - Posts
A recent issue of The Daily Grid pointed me at a new tool called Desktop Sidebar (unfortunately, the link seems to be dead at the moment - hopefully it will be fixed soon). This is a very cool tool. It gives you a highly configurable side tray that makes all kinds of information available - news, weather, stocks, etc. It provides a POP3 email checker, integrates with Outlook to display your corporate emails, schedule, and to do list, and provides a Media Player controller. It can display system performance information, including your most active applications (nice). You can also put shortcuts on it and use it as an app launcher. All of this info is displayed in a set of panels. You customize which panels you want displayed and in what arrangement. The panels can be sized, overlayed, and stacked. The whole tray can be docked to either side of the screen or float, and supports auto-hiding.
But I think my favorite feature is the command line, which seems to serve two purposes. It gives you a basic command line so you can, for example, navigate to a folder on your hard drive (with auto-complete, of course) and launch a program. But even cooler is a set of search shortcuts. So, for example, to search Google/Web for Microsoft you type "? Microsoft". To search Google/Groups you type "gn Microsoft". It has shortcuts for a bunch of services. As you would expect, it includes all the major search engines. But it also includes other great resources, like dictionaries, thesauri (?), an encylopedia site, the Internet Movie Database, the All Music Guide, MSDN, Amazon, eBay, and others.
While playing around with the searching stuff, it didn't take long to think of a couple of sites that I would want to have included but weren't. I went poking around in the app directory to see if there was any sort of config file that controlled the list of search resources. Lo and behold, there was a big XML file that did exactly that (and the rest of the app's configuration). Naturally, I immediately tried adding a new search resource - Netflix in this case. The XML was pretty clear and easy to understand, so it didn't take long. I added the following to the <searchengines> section of sidebar.xml:
<engine prefix="nflx" description="Search Netflix" path="Entertainment/Netflix" link="http://www.netflix.com/" >
<input type="hidden" name="v1"/>
After shutting down the app and reloading it...bingo, worked like a charm. Just type "nflx movie_name". How cool is that?
Here's another one that I find useful - the Microsoft Knowledge Base:
<engine prefix="mskb" description="Search the Microsoft Knowledge Base" path="Other/Microsoft KB" link="http://support.microsoft.com/default.aspx?scid=fh;EN-US;KBHOWTO" >
<input name="Product" value="msall" />
<input name="KeywordType" value="ALL" />
<input name="maxResults" value="150" />
Oh, did I mention that the product is free? Very cool stuff. Compliments to the chef.
Microsoft posted some great info about upcoming releases of the .NET Framework and VS.NET. Some of the questions that the article raises for me:
- The Visual Basic topic mentions Edit and Continue. Will this feature be in C# as well? God, I hope so.
- The Visual C# sections mentions stuff like generics, iterators, and anonymous methods. Available in VB.NET (et al) as well? Since it has to happen at the CLR level, I'm assuming so, but it isn't mentioned.
- Web Services - what's the continuing role of ASMX vs WSE?
Some of the interesting highlights for me include:
- Improved no-touch deployment. Sweet. Save us from the limitations of the browser-based UI.
- Better Windows Forms controls. Much needed. Save us from the limitations of Windows Forms 1.x.
- The DataSource stuff sounds interesting but vague
- Tracing and XQuery in ADO.NET
- Interesting (and a little disturbing) that they've come up with completely new grid controls, both on Windows Forms and ASP.NET. Was it impossible to evolve the existing controls?
- Have they fleshed out the platform-independent database interfaces in this release?
- Will they finally fix WSDL.EXE to generate proxy classes with properties instead of fields?
I just started playing around with HTTP Handlers in ASP.NET for the first time. A couple of observations:
1) The stuff is rather under-documented. In VS2002, it was practically undocumented. Things seemed to have improved a bit in VS2003. Now, I'm not saying that there not good info out there. Fritz's book covers it, as does Nikhil's, and I'm sure there's other stuff out there. But the info in the .NET framework docs themselves, which is the first place I always go, is pretty thin. Case in point - search the framework docs for "webhandler" (the ashx file directive). Nary a reference to be found. It is mentioned in a couple of MSDN articles though.
2) So far every ASHX discussion and sample I've seen shows the code for the HTTP handler directly in the ASHX file. This was so consistent it made me wonder if ASP.NET even supported the code-behind model for ASHX files. A little experimenting showed that it does - just reference the code-behind class in the Class attribute of the WebHandler directive.
I don't know why nobody mentions this. Especially since VS.NET seems to know nothing about ASHX files. When you're coding in one, you lose all syntax coloring, intellisense, automatic formatting, etc. Not terribly pleasant.
My cell phone is toast. Not completely - it works if the battery is disconnected and AC cord is attached. But that kind of defeats the whole notion of a "mobile" phone. So I need a new one.
Since I don't want to change my number, I'm stuck with Sprint's meager selection of phones. As opposed to another provider's meager selection of phones, that is. It's amazing just how many different types of cell phones there are on the market, and how few I can actually pick from. Can you imagine if we could only pick from five different phone models for our home, depending on whether we used SBC or AT&T? Unbelievable.
Anyway, I'm kind of drawn to the idea of a camera phone. When they were first released, I scoffed. But after a couple of recent shopping trips, I'm realizing that the camera phone has the ability to revolutionize (or at least evolutionize) shopping. No more telling my girlfriend "oh, I saw the coolest chair at the store today - it was...sort of...chair shaped". I can snap a pic and show it to her later, or even send it to her immediately for her aesthetic seal of approval. See an interesting item but not sure if you want to buy it? Snap off a pic for later research. The possibilities are...well, not limitless, but at least useful.
Unfortunately, the only camera phones that Sprint sells at this very moment are Sanyo models that are too bulky and have mediocre screens. Fortunately, Samsung is in the process of releasing two new camera phones, and one, the A620, looks perfect. Unfortunately, it's just now trickling out into stores. It's less desirable sibling, the A600, hit the local Best Buy today, but not the A620 yet.
So I'm stuck in technology release limbo. I have a need, I know what I want, but I can't buy it.
Goodness. Rory has posted the first commercial that I've seen for a web log (though apparently it's his second - I missed the first). I had no idea the web log market was getting so competitive.
I'll be sure to factor that in to next year's blog budget.
The very cool kbalertz site now has RSS feeds. Theoretically this is cool, and yet I don't think I'll be switching from the e-mail based version. Why? Because you either subscribe to one giant feed of all KB items, or you subscribe to one feed per KB category. I certainly don't want all items, but I don't relish the idea of adding 50 new RSS feeds to my blogroll either. OK, that's an exaggeration, I think I monitor about 10 categories currently. But even that's a lot of new feeds to poll, and I could easily see that number going up over time.
So that raises a notion that I haven't really seen yet - fully personalized RSS feeds. What I really want is select the categories that I'm interested, and subscribe to one RSS feed that includes all of those categories. For individual web logs, this kind of filtering isn't as useful (although I could see filtering on post categories). However, as more companies provide RSS feeds, I think this type of customization will become increasingly useful. I'd love to see it on the MSDN Feed, for example, so I don't have to slog through posts about developing for Visual FoxPro. Trade feeds like InfoWorld, eWeek, and PCMag would also benefit greatly from this kind of personalization.
Personalization would of course complicate the back-end, and I don't know how the client would identify itself to the server (cookies? query string? authentication?). But it would be pretty sweet.
Recently, a friend of mine needed to write a simple "readme" type HTML document, and asked me if I knew of any good free, basic HTML editors. I poked around on the web and found several, but they mostly just seemed like overkill for a simple job. Then it hit me - we all have 80% of a basic HTML editor already installed on our machines. IE has had HTML editing support for a while. All you need is a basic host that wraps up the web browser control in editing mode.
As tends to happen with most of my ideas, I figured 200 other people must have had this same idea ages ago. So someone must have already written it already, right? I posted a question to the off-topic list, and got back lots of great pointers to sample source code for hosting the web browser in editing mode. Many of the samples included "host" applications, but they were...um...unrefined. So I started writing my own. The sample code did most of the heavy-lifting around interfacing with the control. I figured between that and DotNetMagic, a nice little WinForms host would be pretty easy to scrape together. I started experimenting. I even started coming up with terribly clever names like BackPage or FreePage.
Then, lo and behold, Lutz Roeder beat me to it.
I still like BackPage though.
System.Web.UI.IStateManager has methods called TrackViewState, IsTrackingViewState, LoadViewState, SaveViewState
System.Web.UI.Control has methods TrackViewState, IsTrackingViewState, LoadViewState, SaveViewState
And yet Control doesn't implement IStateManager. Why not?
On Control, TrackViewState is protected. This means that when dynamically constructing a control tree, the only way to enable ViewState tracking is to add the control to its parent . This makes it more difficult to create and initialize a control in a nice separate helper function.
This annoys me.
The illustrious Mr. Sells shows that he has talent for creating more than just software as he recounts the tale of his first airplane piloting experience.
A Google search (both Web and Groups) shows no prior art. Submit your patent application now, Chris.
Am I the only one that thinks McDonald's wireless internet access plans make no sense? Two comments:
1) You buy internet access in 2 hour blocks. Isn't the point of fast food to eat fast and be on your way? Who wants to sit for 2 hours in McD's? Just the thought of sitting on those hard plastic benches for that long makes my back ache.
2) They want to charge $4.95 for that 2 hour block. $4.95? Isn't that about 3 times the cost of a meal there?