Archives / 2004 / October
  • AdaptivePath feed, Ethnoclassification in RSS

    Richard Tallent linked to an excellent article by Peter Merholtz of AdaptivePath about "Ethnoclassification": Metadata for the Masses.

    First, the interesting news. Richard's post reminded me that I hadn't read the content on AdaptivePath's site for a while. These guys are just brilliant with internet usability, but I'd forgotten to scan their site for new info for a while...
    (brain trying to tell me something... wait this is a problem I used to have more often... not such a problem on other sites because of... )

    Sure, I want to read what these guys write as soon as it's available, and since they did the redesign they've gotta have a feed...

    Nope. They didn't. So I sent them an e-mail, and less than 24 hours later, they've added one. How cool is that?

    AdaptivePath news feed:

    Now for the part you've been waiting for - my thoughts on Ethnoclassification and RSS (sounds like a class I would have done anything to get out of in college).

    The basic idea of Ethnoclassification is letting people categorize the world around them. One of the best examples, as Peter points out, is, a shared bookmark system where the users get to come up with the categories for the links. Letting users come up with their own categories has some big benefits - not only is it very user friendly, but it allows users to feed real information into the system much faster than "expert" system designers could. Examples are "moblog" and "cameraphone" on Flickr. There are some downsides to it - users misclassify things and create duplicates : "nyc", "newyorkcity", "newyork", etc.

    The payoff of the article is Peter's idea of letting users make the footpaths, then paving over them once the users have defined a general structure.

    This is just a quick summary of an already short article - you should just hop on over and read it.

    Anyhow, this reminded me of the Categories in RSS feeds. There's a big benefit to freeform Categories early on, but as some general structure emerges it would be nice to have some standard categories. You could always allow freeform Categories, but you provide some standard ones in the RSS schema. That seems like how music genres have emerged in CDDB, and a bit like how usenet newsgroup topics have stabilized. It's nice to be able to set up a new group if it's needed, but there's no point in having microsoft.programming.database.sql, microsoft.database.tsql,, etc.

    Paving the well worn paths improves the user experience by expanding likeminded audiences.

    No real necessity to do this now, as the paths are still probably in the creation phase, but something I'd like to see happen. It would be great to be able to search for feeds by topic without relying on string matches, chance, and search engines.

  • [feature request] Podcasting Client Audio Post-Processing

    I'm mildly interested in Podcasting. I've been test-driving it for a week and will probably post my obligatory YAPO (Yet Another Podcasting Opinion) writeup soon.

    I think it's safe to say that Podcasting is a kind of useful application of RSS to simplify the repetitive task of downloading periodic audio programs. With that in mind, Podcasting clients like iPodder could really add some utility with audio post-processing. Here are some things I'm thinking of:

    1. Split large MP3's into smaller files for players that don't bookmark or fast-forward slowly. I previously posted some information on how to split DotNet Rocks MP3's with mp3splt). I'd like Podcasting client to automate this. It should be configurable, but at a minimum should let me say "split into 2 minute chunks" or "split into "10 minute chunks", etc.

    2. Time Compression - a lot of people have rejected Podcasts because it takes too long to listen through them to compared to the amount of information you receive. In WMP I usually turn the speed tup to about 2x and still get bored sometimes, but most MP3 portables probably don't allow speeding up the play speed. Podcast clients run in the background on powerful modern computers, though, so they should have no problem re-encoding the audio a higher speed I get to pick.

    3. Add background music - during my commute, I regularly flip between music and spoken word (books on tape, NPR, talk radio, or Podcastable content like DotNet Rocks). There's no reason the two couldn't be mixed together. I could pick a folder or list of music MP3's that would make good background music, and my Podcasting client could mix them together. Then I'd get to hear my music and get my content.

    4. Recommend similar feeds[1] - It's hard to find good content now. has a Podcast directory, but it's not very useful. Assuming the content selection continues to grow (and it had better or this whole thing is going down like Boba Fett), they need a webservice that recommends feeds based on the ones I've subscribed to (yes, the aluminum foil hat crowd would need an option to shut this off).

    [1] The astute reader will note that this has nothing to do with audio post-processing. Yeah, well it was one other random feature idea and I thought I could slip it by here.

  • [feature request] URL's with offsets -

    Adobe's PDF Viewer, as much as it bugs me, does have one really cool feature I'd like to see spread - it allows you to link directly to a page within a PDF:

    <a href="">see page 42</a>
    Scott Hanselman posted about it recently, although I first learned about it while working with a website search product (iPhrase) that spiders PDF's and jumps to the page with the text you searched for.

    What a great idea. So let's take it a step further...
    <a href="">hear Jon Stewart make fun of bowties</a>
    Most audio / video players can skip ahead in a file they're streaming, so why not let me link to a starting point? I've been thinking about this while forming an opinion on Podcasting. One of the main features that's made weblogs and rss successful is that they're so easy to reference and interlink. Podcasts aren't, but if I could link to an interesting part halfway through a DotNet Rocks show, for example, they might be more useful as an information and discussion resource.

    Any media player (WMP, Winamp, iTunes, Real Player, Quicktime, etc...) could add this support in today, just as Adobe did with their PDF Viewer.

    It needn't stop there, either. I think being able to reference a portion of a file resource could open some new doors. Sure, it's not as dirt simple in most cases as asking for a specific byte range in a file (which is natively supported in HTTP). But the HTTP Content-Range supports multiple range types and could be extended quite a bit. I could, for example, request a pixel range on a GIF and the server could handle this for me. Not appropriate in some cases, but helpful in others. It's a trade-off: the server does a bit more processing, but now I'm able to link to a face within a group photo: <img,200,580,600> Servers always have the option not to support this HTTP Content Encoding / Range Type (it's built into the spec), but there's a lot more flexibility if we make it possible.

    This gets more important as we move beyond HTML and images to a technology infrastructure that runs over HTTP (SOA, RSS, etc.). Being able to request a specific segment of a resource opens some new possibilities.

    To come back to reality a bit (assuming they're not going to extend HTTP at my blog request), there are still some cool applications in addition to media time references. What about linking to a section of a web page that didn't happen to put an anchor right where I'd like to link. What about or, etc.? The browser would load the whole page and scroll to the proper position. Sure, I might link to a byte range in the middle of a javascript function, so either scroll to the nearest HTML or refuse the anchor as invalid don't scroll. I'd be no worse off than I am now.

    I think linking to a time offest in a media file just makes sense. The other ideas are intended to spark further thought, but seem to be semi-viable to me. What do you think?

  • Spotting GDI Leaks with Task Manager

    After reading KC's post about finding GDI leaks with the Windows Task Manager back in June, I've added GDI columns to my task manager view on all the computers I personally use. It's often a good problem indicator when my machine's really slow but the CPU and memory utilization isn't out of hand. RSS Bandit, my aggregator of choice, occasionally gets a little greedy with the GDI resources. Most apps seem to use a most a few hundred, but RSS Bandit occasionally shoots to over 4,000,000,000 (4 billion). That seems slightly excessive, so I restart it and everything's fine.

    It's also indicated a GDI leak in a Reflector Addin I was testing.

    Here's how to add the GDI Objects column to your Task Manager:
    1. Bring up the Task Manager (Ctrl - Alt - Del works)
    2. From the View menu, pick "Select Columns..."
    3. Check GDI Objects and hit okay

    By the way, this points out that it's still very possible to have resource leaks in Microsoft.NET apps. The .NET garbage collector will clean up your memory after you, but it doesn't watch resources. You have to make sure you're disposing your unmanaged resources.[1]

    [1] I'm not talking about RSS Bandit here, it's just a general statement. Often apps use components or call .NET code that just wraps unmanaged win32 code. I subscribe to almost 1000 feeds so maybe RSS Bandit is just telling me I need to cut back a bit and get another hobby.

  • [addin] SpoofStick (anti-spoof browser toolbar for IE and Firefox)

    Chris Sells recent post about URL spoofing quoted his wife asking "How is anyone supposed to know that?"

    There were some good comments on how to detect, filter, alert, or educate around the problem of URL spoofing, in which an e-mail or site shows a link that pretends to take you to one domain but takes you to another:

    I commented that someone could make a browser addin that detected URL text that looked like an HREF but didn't match domains and show a warning.

    I just saw a toolbar for both IE and Firefox that doesn't quite do that, but takes a step. It shows you what domain you're on, so you'd at least know (after you'd followed the link, but before you'd submitted any information) that you'd been had:

    I don't plan to use this - I get so many spoofing / phishing e-mails that I'm used to the precautions. I think I might set it up on my wife's computer and recommend it to family. At least it answers the question of "How is anyone supposed to know that" and takes a step to doing something about the problem. Hopefully, Phish Detection will be as standard as Pop-Up Blockers some day.

    Download Spoofstick here:

  • HTML Color Schemes

    I'm a web developer, not a designer. At least I know enough about design to realize I'm not good at it. However, I'm often expected to be able to come up with basic color schemes and designs. Here's my cheat sheet:

  • Precompile.axd in ASP.NET 1.1 with System.Web.Handlers.BatchHandler

    [UPDATE: DotNetGeek tested this out and listed some probable reasons why the BatchHandler didn't make the cut for ASP.NET 1.1. It probably works fine for small code-front folder based sites, but doesn't work well with the VS 2003 project approach. As this project approach goes away a bit in ASP.NET 2.0, it may have been easier to implement precompile.axd. I still think it's pretty worthwhile to look through the handler code in Reflector, since it's some pretty slick stuff.]

  • Fritz Onion slides and demo code

    Someone gave out this link when Fritz Onion was on DotNetRocks a few weeks ago and I've been meaning to post it. Tons of great slides and demo code:

    Fritz also blogged recently about how he keeps his notes - a local install of FlexWiki. That beats the heck out of my solution - FlexWiki is versioned, searchable, interlinked, etc - kind of like a really light OneNote. I've often thought if I ever write a book, I'd like to build it up from a Wiki.

  • Chris Sells on DotNetBeatBox!

    This week .NET Rocks! regular guest (and guest host) Chris Sells joins Carl and the gang for a really fun discussion (after he comments on the mail and news) about Longhorn and WinFX, Longhorn features on XP, working on the MSDN Smart Client DevCenter, VS.NET 2005, learning about new technologies, learning by teaching, and Avalon. He answers some good technical questions from live listeners, and overall makes the two hours fly by. Of course you get the mail, news of the week, Weird Wide Webb, and Ask Rory. Richard is away this week so Carl gave away an iPod to a lucky listener!

  • [util] WinMerge

    I've been using WinMerge for over a year, but it's really gotten good in latest release.

    WinMerge is your basic text file diff / merge tool. It's like WinDiff (if WinDiff handled merging), BeyondCompare, Araxis Merge, etc, but it's free and the development team is on fire. It's an open source project on SourceForge.

    WinMerge has always had a really nice, intuitive navigation system (merge and move to next diff, all right, all left, etc.), but the latest builds have added recursive searches (search all subdirectories), comparison within Zip files[1], shell integration, Unicode and multi-language support, and more.

    You can write custom filters, too. For instance, this filter ignores .cs, .vb, .resx files (and their ilk), which makes it really easy to merge files from a local dev box to a server:

    ## This is a directory/file filter for WinMerge
    ## This filter lets through only files ASP.NET developers care about
    name: ASP.NET Devel

    ## This is an exclusive filter
    ## (it lets through only matching files)
    def: exclude

    ## Filters for filenames begin with f:
    ## Filters for directories begin with d:
    ## (Inline comments begin with " ##" and extend to the end of the line)

    f: \.xml$
    f: \.xlst$
    f: \.dtd$
    f: \.html$
    f: \.htm$
    f: \.css$
    f: \.gif$
    f: \.bmp$
    f: \.jpg$
    f: \.png$
    f: \.js$
    f: \.dll$
    f: \.aspx$
    f: \.asmx$
    f: \.ascx$
    f: \.config$

    d: \\*$ ## Subdirectories

    I've been using the latest features in experimental builds through the summer, but since they're at a Release Candidate build I feel good about recommending it to the general public (or, I guess, that segment of the public that cares about text differencing and merging. Sorry, Grandma!).

     [1] Requires you install 7-Zip. 7-Zip's interface looks like a Windows 3.1 refugee, but you can just install it and never use it and WinMerge will do the Zip compare thing.

  • Music Thieves?

    Robert Scoble summarized some of the reaction to Steve Ballmer's comments about most music on an iPod[1] being stolen. Very upsetting.

    And if we're honest, Steve Ballmer's comments are on the money.

    Let's do some simple math (Fermi question style):

    1. A $399 iPod holds 40GB.
    2. At 1MB / Minute (rule of thumb for 128 KB/s), that's 40,000 minutes of music[2].
    3. At 3 minutes per song, that's over 13,000 songs.
    4. At 13 songs / album, that's 1000 CD's.
    5. At $17 / CD, that's $17,000 to fill up a  $399 iPod. Sure, you can get CD's cheaper, but considering that half the songs on an album are lame and don't make it to the iPod, I figure $17 / CD is fair. Yeah, you can download them one at at time from iTunes / Walmart / etc., but how long will it take to download 13,000 songs clicky clicky style? I'm sticking at $17 / CD.
    How many people, honestly, have spent $17,000 on music? Okay, you got last year's model and only got 20 GB... have you really paid the entire $8500 to fill it up?

    The real question... do you have a digital copy of at least one song you haven't paid for? I know I don't want to answer that question...

    I think Ballmer's just being honest. Are we?

    And if you're that diamond in the rough who's gonna get all up in my face, how many of your friends are legit on the MP3 front? What percent of the music on the world's iPods is paid for? We all know it's true, and Information Minister bit is starting to look purty silly.

    [1] Or any digital music device. iPod just happens to be the popular one at the moment.
    [2] Closer to 41,000 minutes since a GB is technically more then 1000 MB, but I'll spot you the GB. Who loves ya, baby?

  • ASP.NET Forms Auth Vulnerability

    This may be fixed in ASP.NET 1.1 SP1, and may not be a problem for W2K3. Details sketchy, but this has been reproduced.
    SourceForge thread

    Here's the short version:
    Say you have a secure page in a subdirectory - http://site/subdirectory/securepage.aspx
    If you browse to it with a backslash instead of a forward slash in a non-IE browser, you bypass forms auth: http://site/subdirectory\securepage.aspx
    Alternatively, in IE you can replace the / with %5C (hex for backslash) and again bypass forms auth: http://site/subdirectory%5Csecurepage.aspx

    New Vulnerablility in Asp.Net Forms Authentication which allows malicious users to read "private pages" - Looks like there's a way to bypass ASP.NET forms security, which is bad news. Reading the thread, it may be fixed in the 1.1 SP1 Framework - I couldn't reproduce the reported problem on my own server, which is running SP1. This is important enough that you should test it on your own servers though. [Via Larkware News]

  • Fritz Onion on DotNetRocks

    If you are remotely interested in ASP.NET, you just gotta listen to tonight's DotNetRocks show. The guest tonight is Fritz Onion, the author of Essential ASP.NET.

    I can't say enough about that book. Before I read it, ASP.NET was just this magical black box. I understood how to work with it, but I had no idea how it worked. Fritz takes it apart and explains it at the perfect level - very thorough, but understandable. You're gonna need to understand the stuff in this book to have a chance with Scott's interview questions.

    You can read Chapter 3 (Configuration) on Amazon here.

    You can always download the shows on the Monday following the show, but you miss out on the chat room fun then. They usually take questions from the chat room, and the commentary is usually fun, too.

    You can read Fritz's blog to pregame: HTML / RSS.
    Info about DotNetRocks: HTML
    DotNetRocks notifications: RSS