• « November 2005 | Main | January 2006 »
  • XSLT:Blog[@author = 'M. David Peterson']/Main: December 2005 Archives
              • December 31, 2005

                Help Wanted : CIO : Massachusetts State : Experience With Politics A Must!

                Experience with technology? If you have both, I'm sure it wouldn't hurt. But my best guess suggests that at this stage, a solid background in politics will look FAR MORE enticing to Governor Romney than will any sort of extensive experience within the technology sector.

                The Open-Source Martyr Meets His Fate

                Published reports say the Massachusetts state CIO, best known for his plan to move all state documents to the OpenDocument file format, has resigned as of January 9, 2006, about a year before his edict was to become effective.

                ---
                Kurt just pinged me with the link to the above announcement and follow-up commentary from David Coursey (which he (Kurt) then followed with "I finally stopped reading him when I realized that he's about as unbiased as a football cheerleader" :) I think it's safe to suggest we will cover this topic again in an upcoming recording session for the eXplorations podcast. If you haven't already, I would add Kurt's Atom feed to your feed reader as undoubtedly he will have plenty of intriguing follow-up content on this topic.

                One thing I will quickly add:

                For those unaware, Mitt Romney was the guy that was brought in as the head of SLOC (Salt Lake Olympic Committee) to clean up the mess that came as a result of the now infamous SLOC Olympic scandal from six or so years back. Obviously this particular 'scandal' (although you be hard pressed to get even a pro-Microsoft/OpenXML guy like me to go along with such a label -- but it definitely has caused quite a stir none-the-less) took place while Mitt was already in office. But even still, with plenty of skilled experience with 'smoothing things out', there's no doubt in my mind that this particular clean-up job will be executed with near perfect precision.

                With a likely bid for the 2008 Presidential Election, you can hedge your bets we're about to witness something quite magical with this one. If Mitt Romney, a somewhat conservative Republican (although he has his 'liberal-minded' areas as well(UPDATE: Maybe I should strike that last bit... in reading the current state of his Wikipedia entry it seems he has backed away from what I considered to be his liberal-minded side. For the record, I considered his earlier stance on Abortion to be somewhat(<- key word) liberal-minded, which for someone who is quite conservative in nearly all their viewpoints, to allow room for ANY sort of 'Pro-Choice' ideals is enough, in my opinion, to suggest they have 'liberal-minded' areas) can clean up a pretty nasty situation in the SLOC scandal to then convince the fairly hard-core liberal-minded, Democratic Party-heavy voters of Massachusetts to elect him into office, I wouldn't put any political accomplishment out of his reach.

                Stay-tuned.

                Posted by m.david at 08:53 AM | Comments (0) | TrackBack

                Two MUST HAVE Utilities For 2006

                They would have been MUST HAVE utilities for 2005 as well. But one of them I only found out about a few hours ago, the other... well, in all honesty... I knew about it, just forgot to blog about it.

                Sorry 'bout that! :)

                To make up for it, how 'bout instead of making you wade through knee deep text just to gain access to these two Golden Nuggets of Code, I get straight to the point?

                [Make Believe Collective Voice of Whomever Reads This Post: Thank God! Yes, that would be great as it will allow us to do something else with our day instead of having to read fourty-seven pages of your phlabble-blabble just to get to the good stuff.]

                Wow. Thats a lot of information. And hurtful too. If I wasn't the one who wrote it in the first place I might have actually cried. [Pretty sad when I have to write my own negative feedback to myself. Somewhat psychotic too. Hmmm... something to think about. Well, while I think about that (and consider potential avenues of therapy ;) here's those MUST HAVE links... ;)]

                CSS2XSLTFO Conversion Project

                and

                Firefox Java Integration Extension

                Before I sign off I need to note that the second of the above linked projects, the 'Firefox Java Integration Extension', was discovered and then sent to me via Kurt. Given the Firefox title we tend to pass a lot of links back and forth between each other that relate to Firefox extensions in one form or another. This is definitely one thats got him, now me, pretty excited.

                Oh, one last thing... I learned of another project recently thats got the both of us excited as well. I'm taking a few minutes now to write a transformation file for the project of which the project developers plan to integrate into the projects distribution. When they do, I will link to it as the project kicks a$$!

                Back to writing (code and books)... Bye for now :)

                Posted by m.david at 06:55 AM | Comments (0) | TrackBack

                December 30, 2005

                2004:blog > 2005:podcast > 2006:?

                [ JABBER (XMPP) ]

                2006 will be the year of XMPP | B.Mann Consulting

                The push for realtime: this goes hand in hand with the last point. The super secret part of XMPP is that it's not about IM at all...it's a generalized XML message passing protocol optimized for real-time. Every once of effort to get faster polling of RSS is wasted...it's an asynchronous poll model -- XMPP is the step beyond. I suggested that Plazes throw away it's proprietary protocol and use XMPP directly, preferably using the User Geolocation JEP that has already been defined for exactly such uses. Anything else you want to pass around in real time that can be represented in XML? Like real-time ATOM? Yep, the possibilities are endless.

                There are about five or six people who are reading that last paragraph and have the same chills running down their back and the same smile and [air -> nose <- hold-it-back, but let it be known none->the<-less laugh being >> pushed >> (or is it << pulled <<? I always get those two confused. Blip. <<- What? ;) :D from the holes in their nose] just like I do right at this moment, as I don't think that last paragraph could have been more accurate and yet still maintain a sorta 'WoW. OK, who told' aspect to it (who did tell by the way? ;) knowing full well that no one did while at the same time knowing anyone could have [the game has only just begun :)]...

                Weel, not-to-worry though, both the identity and security of whomever the Canary happens to be is well on its way to being a non-issue (one of those smiles... no, wait, two of those smiles just got a little bigger knowing they know something very few others do. Isn't this fun! :D)

                Alright... I'll give ya'll a little hint/sneek peek at a piece of all of this, but you'll have to figure out the exact nature of what it is and where it fits into the unknown pieces on your own (that sounds like fun, huh?)... We gotta leave some sense of the mysterious ether-in-the-midst(sic). :)

                Hint One: Without the nuxle.us the Atom would not because it could not. How would it if it couldn't in the first place?

                See my point?

                Don't worry, you will. Just keep things finely tuned (and don't forget the TV GUIDE this time, K, and the rest will all just come together without much effort.

                Until / > / Jan:One / > / Peace / ,V,,

                Posted by m.david at 03:45 AM | Comments (0) | TrackBack

                December 29, 2005

                Amazon Hosting Author Blogs?

                Amazon Hosting Author Blogs

                The Amazon Connect program, in beta for the past month, aims to increase the engagement between readers and authors, and between readers and Amazon.com. It provides authors with a channel to market new products to consumers who bought their books in the past, and gives them a reason to visit Amazon.com.

                This is FANTASTIC!!! I do find the name "Connect" somewhat of an interesting choice (although not completely off the mark either) given the fact that as the above linked and quoted article later points out, Amazon doesn't allow reader comments nor access to any sort of data feed for the individual or collective authors at present time. But unlike some of the comments quoted by others, I can definitely understand why.

                How so?

                Well, let me rephrase. I can understand why they wouldn't want to provide an interactive interface for readers to post comments to and it goes far beyond the fear of comment spam. More on this below.

                The data feeds?

                Ummm, well... thats a tough one as well. On one hand you would want to use the data feeds to draw interested readers to the authors blog in the first place. Then again, I can tell right now that while it may not be immediattely obvious as to why, theres going to be author opposition to anything that might have potential of causing an author to look bad if they don't spend 40 hours a week blogging on Amazon.

                Personal blogs are one thing. Generally speaking, while you may get the core group of readers who enjoy your work and look to your personal blog for more information, those numbers are going to be significantly less than they would be on Amazon.

                How's that a bad thing?

                Well, take the example of Paul Graham. He interacts with his core readers all the time through a service that he links to at the end of each post. Well, article really... While its basically the same kind of thing, you don't find drive-by postings with a link and a few sentences on his site, obviously something you do find on any given blog at any given time. But thats beside the point. While I'm guessing, if you asked Mr. Graham to turn his attention to an interactive Amazon-based blog my best bet would suggest his response wouldn't be one of optimism and excitement.

                Huh?

                Well, think about it.... The fact that a reader might seek out your blog on his/her own via an online search engine, or through a link put into one of your titles, that number won't be anywhere near the amount of traffic ANY author would receive through an Amazon-based interface. Search engines and links contained in titles will definitely bring plenty of numbers his direction. But on Amazon you're going to get a steady supply of residual visitors who will interact with a blog just because of its ease of accessibility via a site they're already visiting. Its doubtful these same folks are going to be the same ones seeking out their favorite authors via search engines or be all that enticed to visit a link found in one of your titles if it wasn't located on a site they already frequent.

                With this in mind, one can expect that your average author can quite happily maintain the traffic coming towards their personal blog. But add residual traffic coming at you in Amazon-sized numbers (speaking literally and figuratively) and you may just as well forget about ever writing another book in your life. While thats definitely going to thwart authors from getting involved, its not exactly the kind of thing Amazon would be wanting to do nor would the publishing companies be on their side if they did. Instead of selling books, they'll end up acting as a free content hosting provider for a whole bunch of pissy authors who now hate them because of their so called "favor" to help them sell more books.

                Coming at this from an authors perspective I can tell you right now I plan to get involved with this program as soon as they'll let me through the "door." But thinking this one through, I have serious doubts you're going to be seeing data feeds and comment forms as part of the Amazon offerings, at least any time soon anyway, and more than likely ever. My guess is that Kurt probably feels the same way, although I'll stop short of acting as his voice proxy and let him take the mic on this one as undoubtedly he will have some good things to say about this as well... although it may be a few days as he's currently in "travel mode" dotting the Puget Sound with drive-by visits to the inlaws for the Holidays.

                As a side note: Have I ever mentioned just how much I truly love being single? ;) :D (Merry Christmas Kurt :D Enjoying the drive? ;-)

                Anyway, I should probably let Kurt concentrate more on the road and less on trying to swerve so he can hit me "on accident" :) and at the same time come back to my own voice on the matter at hand...

                I think that this is definitely a cool idea in regards to just the blogs.

                But Amazon...

                Just in case I'm totally off as to why you haven't implemented them already and you are still "thinking" on this one... in regards to the comments section specifically, and data feeds in general (although I'm no where near the same "Oh Dear God, NO!" level I'm at with the comments section):

                Please don't. In fact, if necessary, point me at your Wish List and I'll pick the most expensive item you have on it if you promise me you won't do this. Not so much for my own sake, but having several author friends such as Kurt, Russ, Micah, and others who already have several titles (or as in Kurts case, DOZENS!!! ;) behind them...

                Um, lets just say I kind of like them as my friends the way they are and not as bitchy PMS Queens from Hell. I spent the first 18 years of my life in just such a He... errr... I mean... umm...

                I've already been blessed with 18 magnificent years such as these. To give me more now would simply be too much. Someone else needs/deserves them WAY MORE than I do, I promise. I do appreciate the sentiment and all, but again...

                ANYTHING on your list... It's yours! :)

                Wait, scratch that...

                I'LL BUY THE WHOLE DAMN LIST! JUST PLEASE PROMISE ME YOU WON'T DO THAT TOO ME!!! I BEG OF YOU!!! WHATEVER YOU WANT, ITS YOURS!!!! KEEP ALL THE BOOK PROFIT IF NECESSARY!

                ANYTHING!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

                Thank you for your understanding. :)

                Posted by m.david at 08:41 PM | Comments (0) | TrackBack

                The Freedom Of The Press Is A Wonderful Thing

                Gray Lady Down - Yahoo! News

                But with freedom comes responsibility.

                This is the most beautifully crafted piece of journalistic poetry I believe I have read in my entire life. It's credited to IBD (Investors Business Daily) from what I can tell, but no author is listed.

                The author, whomever it might be, deserves the Pulitzer for this piece. If I have it my way, they're going to get it.

                Where was the defense of the "people's right to know" when the issue was who "revealed" the name of CIA desk jockey Valerie Plame and her Bush-bashing, mint tea-drinking husband, Joe Wilson? Then the issue was who was placing our covert agents in jeopardy and who should be indicted and sent to federal prison.

                There are times when I wish I didn't have to be such a loud mouth. But I honestly can't help it... Not from the standpoint of lacking self control, although I've certainly been guilty of such criticisms in the past. Instead, however, what I can't help is standing idoly(sic) by while I watch the general masses being led by a handful of (please pardon me for second, but I'm going to break my no profanity in the intro rule because I believe it needs to be said outloud, not hidden from view, even if only partially) complete and total fucking idiots who have sold our freedoms, rights in which millions have fought for, giving their lives because they knew that in doing so millions more would be able to live a life in which is centered around peace, safety, respect for all people no matter their origin or race, the ability to worship the God of our own choosing, even if that means we choose to not believe in such things, and the ability to express our opinions without fear of prosecution, persecution, and/or censorship, including using each era's "printing press" to spread our views to the masses.

                It seems, however, that there are those who feel that the underlying essence of the freedom of speech and press somehow allows them the right to put at risk the very foundation in which affords them this freedom in the first place, using the "protections" of our legal system to continue forth, selling the "front page" headlines to the highest bidder.

                "Did he just accuse the various news agencies of taking "liberty" to sell our safety in the name of freedom to whomever was willing to pay the most money?"

                I sure the fuck did.

                That's the beauty of the freedom of the press.

                But with freedom comes responsibility.

                Yep. A responsibility to tell the truth without putting at risk the very foundation in which gives us such freedoms in the first place.

                Let the truth be told.

                Posted by m.david at 07:25 AM | Comments (2) | TrackBack

                December 28, 2005

                What Do Firefox, Netscape, and Windows Genuine Advantage Validation Have In Common?

                Phhh... Not a da... Wait.. What?


                Windows Genuine Advantage plug-in installation

                Windows Genuine Advantage plug-in installation

                Some downloads are made available only after users have validated their versions of Microsoft Windows. Firefox and Netscape Navigator browser users may install a helper program, the Windows Genuine Advantage plug-in, to enhance their download experience.

                Hold up... Am I reading this correctly? You mean I don't have to be running IE to validate my install of Windows anymore?

                Ok, who are you and what'd you do with Microsoft?!

                Hmmm... Well, even if you ARE Microsoft... It's not gonna last. I mean, come on, its not like you're suddenly going to wake up one day and find a Google, Microsoft and Sun join forces to set up R&D lab headline.

                Hah! Like that'll ever happen. ;)

                Posted by m.david at 10:08 PM | Comments (0) | TrackBack

                You Have Your Own God?

                monogatari

                Thanks to my own God, I was pretty productive yesterday to dispose most of them

                By them I believe Atsushi Eno means bugs (I don't think he went all postal on us and... well, thats not a topic thats funny in any way so I'll avoid taking this any further. He means bugs.)

                Great. Not only are the Japanese surpassing us (meaning the USA) in every technological field, but now they each have their very own God, apparently, to help debug their code.

                How do you compete with that? We're done. Cooked. Its over.

                How depressing :( I think I need a new hobby. ;)

                Posted by m.david at 04:57 AM | Comments (0) | TrackBack

                December 27, 2005

                Hey Microsoft Visual Studio Team : Free Is Good. Open Source Would Be Better!

                Is Microsoft Planning to Make Visual Studio Standard Edition Free?

                So, why not offer a version of Visual Studio for free? Well, besides the fact that it would acknowledge that Eclipse is now a contender; there are all those customers that already bought a copy of VS 2005 (either directly or thru the MSDN Universal program). But, Microsoft has never required Studio to be activated (and I don’t think they will start any time soon), which means it has been very easy for someone to install a copy of Studio and not pay for the license. The upside of this is that Microsoft is getting more people to use the product, and (usually) folks that didn’t purchase a copy don’t go looking to Microsoft for support (which keeps down Microsoft’s cost for providing support).

                I somehow missed this post from DonXML from a couple of weeks ago. Don has got an excellent point. The one area in which I would expand it would be...

                Open up the source.

                You want to find out just how good Visual Studio can get while at the same time kicking Eclipse to the curb? Let the Windows/.NET development community have at it. Imagine what would happen if you let somone like Jeff Key have his way at the heart of VS...

                Only good things will happen and, like Don suggests, there are plenty of other areas where you can focus your resources and expect professional development shops to pay bigger dollars for the result. The profiler in the Team Edition is a good example. How much more finely tuned could this become or how many other things could you do if you did'nt have to focus a good portion of your limited resources on the core IDE and instead let that best-of-breed talent you have on campus open up their imaginations and let the good things flow.

                We all know the money's in the platform anyway, so who cares about exposing the underlying tool source. The only risk you run is... hmmm... guess there wouldn't be any risk given the tools market is no longer really a market any more, now is it. ;)

                Think about it. It makes a lot of sense when you do and could really change the momentum that, in all honesty... Eclipse currently owns.

                [NOTE: In being a pretty heavy user of Eclipse myself I can tell you right now its a FANTASTIC tool. Well, as long as its the only thing running AND you don't let it sit idle in your toolbar for long enough for the Java VM garbage collector to have stripped away its resources forcing it to rebuild itself in memory[1]. If this happens then its slow as molasses. But thats the Java VM's fault, not the Eclipse tool itself as this is true about any and every Java application or tool I use on a regular basis (OxygenXML and jEdit.)

                [UPDATE: BTW... Come up with a good "we spent time listening to our development community and ideas in which they felt could help make VS better than it already is and, based on their feedback, have decided to go this direction." and you'll have your PR folks springing cart wheels and offering you foot rubs and shoulder massages in the spare time they now have thats was being spent on trying to keep the MS image as clean as they possibly can. Furthermore, you would also be able to use just such a move to integrate portions of the Windows platform into this "program", even if it was only the .pdb's. Obviously its only a tiny portion of your overall customer base who give's a rats a$$ whether or not they have access to the source or not, so by opening up the IDE to the development community to hack at, retaining ownership of various necessary pieces by giving access to the pdb's so folks can point out the problems in the code, but not be given access to the code itself... again, foot rubs and shoulder massages. [Extended Note: In regards to the Windows platform, obviously there are pieces from a development perspective that would be helpful to have access to the pdb's for some sort of "Open PDB RAID" database program and other portions that would be exposing WAY TOO MUCH in regards to competitive secrets as well as from a security standpoint. Those pieces are easy to justify retaining complete ownership and any of the OSS advocates that don't understand this... well, I'll stop short of calling them names but from a PR perspective the small percentage of folks making these types of demands can easily be seen as extremists who expect everything for free and don't have a clue how an economy much less a business are run. So I'll leave it at.]

                Keep saying that over and over...

                foot rubs and shoulder massages.
                foot rubs and shoulder massages.
                foot rubs and shoulder massages.

                See, it sounds a lot better than "You fuckers! How the hell are we supposed to maintain any sort of sanity if you keep [fill in the blank with whatever it is you're being accused of at any given time]!!!"

                again > foot rubs and shoulder massages.

                - or -

                "You fuckers! How the hell are we supposed to maintain any sort of sanity if you keep [fill in the blank with whatever it is you're being accused of at any given time]!!!"

                I know which one I'd choose, but then again I have nothing to lose. So I'll stop my jabbering and let you continue forward in your thinking ["foot rubs and shoulder massages." "foot rubs and shoulder massages." "foot rubs and shoulder massages."]

                ---
                [1] : Assuming this is whats taking place, the logic in such things is beyond me. Just take a core dump[INSERT: For those purists who take core dump to mean what it used to mean (and technically speaking, really should probably still be this way) I added a link to Wikipedia's entry for a core dump which, after realizing I've never really verified that what I assumed was an OK way to term just a particular applications memory block instead of the entire system's memory block, decided "I'd better check and make sure that using core dump in in this example was an OK choice. It was.] of the memory, cache it on disk, and send it into sleep mode (similar to the way Virtual Server or VMWare will cache a snapshot of the current state of a VM instance... comes back to life A LOT faster than Eclipse does on the same machine (read: same hardware resources so its not a resource difference and instead a difference in philosophy.) Then again, maybe this is what they are doing, but it sure doesn't feel like it when you're sitting there waiting for the IDE to come back to life after its been sitting idol for a while.

                Posted by m.david at 11:08 PM | Comments (0) | TrackBack

                Interesting, Yes! Suprising? Not The Slightest Bit.

                Google Reader API - Hire Me, Google

                It looks like Google is about to reveal yet another API. Niall Kennedy has been able to figure out the back-end for the Google RSS Reader. Jason Shellen and Chris Wetherell have confirmed the existence of an API and Shellen mentioned that they built the API first and the reader second. At first glance it seems that the reader API will enable third party developers to build their own front-ends, similar to the Google Reader, using data from Google. Interestingly enough, the Reader API changes all feeds to Atom, regardless of their original format.

                The last sentence in the above quote is obviously where the title came from. Extending from this, for anybody who has been spending any amount of time working with the Atom format they will tell you exactly the same thing I'm about to:

                Atom is the future. And apparently from Googles perspective, the future is now.

                [InnerThought Monologue: Hmmm. That is interesting. The thought of being forced to work with RSS 2.0 in ANY sort of development capacity makes me sick to my stomach. Google is focusing on Atom? I like the thought of working with Atom from a major development platform perspective. Huh... Suddenly, it seems like I need to be paying more attention to the Google dev world and less to Microsoft. That is of course unless Microsoft were to somehow find a way to set the data feed politics aside and go with a format whos design was led by folks who actually know what they're talking about instead of someone who thinks he does, but most definitely DOES NOT. Of course there are folks at MS who know what they're talking about as well. But I guess my politics point has only been re-emphasized. Of course, maybe Microsoft does plan to at very least provide direct support for Atom 1.0 in addition to RSS 2.0 inside of their Windows Live API and just hasn't taken the time NECESSARY to tell anyone about it.

                I guess until they do, I need to starting REALLY LOOKING into GOOGLES API instead as if given a choice over RSS 2.0 and Atom?]

                [...]

                [OuterVoice: Hey, if anybody needs me, I'm going to be playing over in Googles sandbox, K. They've got more interesting toys to play with. ;)]

                Posted by m.david at 06:58 PM | Comments (0) | TrackBack

                .NET C# Wrapper for Berkely DB Now Available

                [UPDATE: Reading through the readme.html I noticed this:

                All CLS compliant .NET languages are supported.

                So I guess you should scratch the C# and replace it with: EVERYTHING! :)]

                [Original Post]
                Jeff Rafter recently sent me an email to inform me of the above titled project a friend of his developed. This needs to get out on every wire I can possibly send it out on as this is WAY TOO COOL!!!!

                The body of his email is as follows:

                I thought you might find this one interesting: a friend of mine wrote a C#/.NET 2.0 wrapper for Berkley DB. It supports XPath 2.0 and XQuery... so I thought it might be of interest to you.

                http://sf.net/projects/libdb-dotnet

                For those of you unaware (which I doubt is all that many, but you never know) Berkley DB is a well beloved open source DB which as of the last year or so provides direct support for XQuery. So, in essence, not only do you have open source .NET-accessible client-side XQuery support via Saxon.NET, but (even better!) you can now access a Berkley DB (from SleepyCat Software) which is (more than likely anyway) going to be quite a bit faster as well as the fact that its a full-fledged DB which Saxon.NET obviously is not. Don't get me wrong... Obviously as the developer of the Saxon.NET project I'm not trying to put it down in anyway, but knowing one's strengths and weaknesses is an important part of understanding when to use what tool and why. For accessing raw XML in a .NET-based application, Saxon.NET would be a good choice.

                However, if your needs include an open source .NET-accessible client-side (or server side for that matter) DB with a proven track record of performance and reliability, then the above linked project is obviously something you should take interest in.

                As an extended note, for non-open source XQuery-enabled .NET-accessible DB's your options would include SQL Server 2005, SQL Server Express, and DataDirect. If I'm missing any that you know about, please either let me know or simply leave a comment.

                Thanks for the info Jeff!

                [NOTE: Not sure if this project supports Mono (if it doesn't, given that its open source, it shouldn't be all that long before it does), but I will find out and update this post accordingly]

                Posted by m.david at 01:21 AM | Comments (0) | TrackBack

                December 26, 2005

                I've Been Thwarted By J.K. Rowling!

                [UPDATE: via a comment to Eve Maler's post (linked below) Paul Downey pointed at a Stephen Fry audio interview with J.K. Rowling. For those of you unaware (a number in which I count myself among) Stephen Fry is the voice behind the Harry Potter audio books. I have to admit that I'm not normally the type of person who is attracted to fantasy type novels such as what you find in Harry Potter. With that said I will admit that I have read several of the Harry Potter books and have found them absolutely fascinating! If I didn't already spend so much time reading tech titles (for recreational reading ome of Tom Robbins highly recommended titles > [my Amazon Associates link to Tom Robbins titles] is always nearby :) I find it suprising myself admitting to the fact that I would probably be reading a Harry Potter title [my Amazon Associates link to Harry Potter titles]. Not surprising, after listening to the first fifteen(15) minutes of the above linked interview I can now see why... J.K. Rowling is somebody in whom I can relate with as apparently, she's a real person just like you and me. Please don't take this to mean that I think other authors are not "real" (real in the sense of down-to-earth type folks.) I've just never listened to them speak in an interview type setting nor do I know how they would respond to Stephen Fry's conversational-styled interview questions (which is very engaging in and of itself!) I can tell you that if there answers are anything like J.K. Rowling, I could quite easily make the same statement about them too. Fascinating stuff!]

                [Original Post]

                Understanding XML: Harry Potter and the Legion of Code

                She quoted J.K. Rowling's comments from a FAQ about how the members of the Order of the Phoenix (OoP - think about it) communicated with one another

                In the above quote 'She' refers to Eve Maler and 'quoted' a recent piece she wrote comparing secured End-to-End messaging and various elements of the intricate details of Harry Potter and his magical world. A fantastic piece, but with Eve thats kind of expected (oh the pressure! ;) given the fact that she's, well, Eve (or Hermione depending on whether your confident you can call her this AND expect in some capacity to get away with it (that's a joke, BTW ;).) Kurt followed-up (linked above) her piece with what of course is another fantastic piece of his own. But, like Eve, with Kurt we can expect no less. NOTE: Did anybody else just come to the sudden realization that I either need to learn how to write, or find new friends if I expect to maintain any sort of level of self confidence? ;) I wouldn't worry though. Whether it's justified or not, I have plenty of self confidence to draw from, so I should make it through this episode OK, don't you worry about me.

                You were worried, right? Right?! Heellllloooooo...

                Well, while you collect you're thoughts (or excuses as the case may be ;) I'll get to the point.

                (You're welcome. :)

                Given my quite open love/hate relationship with OOP, or Object Oriented Programming (love/hate as in I Love to Hate OOP), do you realize what has just happened? Not only do I have to try and take on every OOPs generationed (or factory generated as the case may be ;) hacker and their various cult followings/factions, but now I have to take on Harry Potter?! As if my job of trying to save the world from the evil's of OOP wasn't hard enough (don't drink the Object-Oriented KoolAid! Kool-Aids not an 'Object' (how do you objectify Kool-Aid?), it's poison!!! (at least OO-KoolAid (said in my best Homer Simpson 'mmmm... Forbidden Doughnut' voice) is anyway ;) now I have to take on Harry Potter and every man, woman, and child who has been entranced by the magical spells of J.K. Rowling!!!

                Thanks a lot J.K.! (if not obvious J.K. and I are tight -- but don't ask her that if you happen to know her, K, Cuz' more than likely she'll pretend she has no clue who you're talking about. She does that a lot, I've noticed. Quite the imagination that J.K. Always coming up with fun ways to 'pretend' she doesn't know me. ;)

                Don't worry OOPs generation, Harry Potter or no Harry Potter, I'll save you!

                (Yo, (if not obvious,)
                        (I could really use some help here.)
                        (anybody?)
                        (Anybody?!)
                        (Heellllloooooooo.....)
                (Damn!))

                Posted by m.david at 08:28 PM | Comments (0) | TrackBack

                December 25, 2005

                Now That's The Kind Of Recursion Anybody Can Understand

                Understanding XML: All I want for Christmas ...

                I now work at a company that at one stage made its availability as an outsourcing partner a big point in its marketing plan, but personally, I still don't buy it. There are any number of perfectly good reasons to outsource a certain portion of your development process - you can't get the help you need locally, the outsourcing partners are specialists in a domain that your company doesn't deal with on a regular basis, you're needing help with localization, you're interested in expanding in new markets and need people who are skilled in those markets. All of these are legitimate. What's not, frankly is when you decide that you can use out-sourcing to get around local labor laws and take advantage of a strong differential in the costs of that labor. Santa, I'd like to see each CEO that's decided that they can outsource their labor costs wake up one day to discover that their outsourcing company has just purchased their company with the money that has been given to them and that the CEO's position has been, well, outsourced.

                Posted by m.david at 02:11 PM | Comments (0) | TrackBack

                This Is The Great Socialistic System In Canada I Keep Hearing About?

                Taking a Long View: The Opposite of Christmas

                [UPDATE: I guess the blogosphere is smaller than I realized. Please see Rob Bray's follow-up comments below. As I mentioned in my follow-up comments to Rob, theres obviously no one more qualified to answer this question than the one who's post spawned this post in the first place. Rob is someone who obviously knows a thing or two about these systems given that he works within them. So as I mentioned, again, in my follow-up to Rob, I think we can safely state the case is officially closed. And it looks like I need to do some homework. I did'nt realize we were executing our mentally ill in the U.S. from time to time. Obviously not the kind of "quality" you can take much pride in, now is it.

                Thanks again Rob. You're obviously a great example for the rest of us to learn from and follow.]

                Most of our court system and our jail system and our social services systems are clogged with mentally ill people. With Peters. We are forced to throw him there, because we cannot care for him, and no one else will. Jail is often the welfare system of last resort.

                If I'm not mistaken, Rob, the author of the above linked and quoted blog posting, is Tim Bray's brother (it was through a recent Tim Bray post that I discovered the link to this post.) I can tell you right now (not that I would need to for those keenly aware of Tim and all that he has given of himself to this world) that if Rob is anything like Tim, he's an incredibly talented, loving, and giving individual who care's more about the well being of others than he does of his own. By reading this article I think we can safely state "yeah, he's just like his brother."

                But as caring and wonderful of an individual he obviously is, I can't help but read this post, especially the above quoted piece, and question "what's so wonderful about that?" I ask this not as a direct question to Rob. I doubt much Rob would would ever stumble across this post in the first place. Instead I ask it to any residents of Canada who might read this (Kurt?): If this is an accurate portrayal (and I have no reason to believe that its not) of the Canadian socialistic way of handling the mentally ill, what's so wonderful about that?

                I don't mean this as a bash Canada kind of question; From what I understand, Canada is a pretty cool place. When I was a kid growing up in Seattle (more properly, Kirkland, Juanita High School, Class of 1990 to be quite specific) we used to go and watch my brother, who at the time was pitching for the Vancouver Canadians, who (again, at that particular time... not sure who they are an affiliate for now but from what I learned recently from a different Tim Bray post, there now a Single A club) were the Triple A affiliate of the Chicago White Sox. I loved it! It was a wonderful experience that I would look forward to each and every time.

                Even further...

                ...as both a kid and an adult I would/will visit Whistler/Blackcomb as often as I can. Again, I love it! But I can't help but wonder that as fantastic of a country as Canada undoubtedly is, it definitely seems to have its share of problems, and in this case the problem seems to be a lot worse than what we have here in the states under a capitalistic government. It would seem to me that a government built on socialistic tendencies would create a better system for the mentally ill than simply using the judicial system. But I'm also guessing its a lot more complicated than I'm making it out to be.

                I don't mean to come across the wrong way. I'm really just posing a question, not making any sort of accusations. Anybody care to comment?

                Posted by m.david at 12:53 PM | Comments (2) | TrackBack

                December 24, 2005

                When The Open Source Movement Can State They've Contributed 30 Billion Dollars Of Value To The Needs Of Disease And Poverty Stricken Nations, Then Come And Tell Me That Microsoft Is Evil

                poy2005d.jpg

                For the price of watching a 30 second advertisement you can access the entire body of this years Time Magazine's Persons of the Year award given to Bono (Amen!) and Bill (Amen!) and Melinda (Amen!) Gates (a second Amen! to all three!) which starts off with:

                These are not the people you expect to come to the rescue. Rock stars are designed to be shiny, shallow creatures, furloughed from reality for all time. Billionaires are even more removed, nestled atop fantastic wealth where they never again have to place their own calls or defrost dinner or fly commercial. So Bono spends several thousand dollars at a restaurant for a nice Pinot Noir, and Bill Gates, the great predator of the Internet age, has a trampoline room in his $100 million house. It makes you think that if these guys can decide to make it their mission to save the world, partner with people they would never otherwise meet, care about causes that are not sexy or dignified in the ways that celebrities normally require, then no one really has a good excuse anymore for just staying on the sidelines and watching.

                Hey Google: Instead of a corporate charter that states "Do No Evil" how about one that states "Do a whole bunch of good." I, for one, would definitely pay more attention to you if you did.

                Disclaimer: I believe that the open source movement has done a lot of good things and will continue to do a lot of good things. That's why I'm a part of it. But having spent a good deal of time working as a contractor on Microsoft campus it really drives me nutts when I hear stupid a$$ "MS is Evil" comments. It drives me even more nutts when you read articles such as the one linked above and realize how much good is being brought into the world because of that so called "Evil Profit." Evil Profit? Tell that to the millions of people who now have a hope at a decent life because of that so called "Evil Profit."

                The next time you're tempted to make such a statement... Think. If you do, you won't look like such a damn fool for suggesting something so completely absurd.

                Posted by m.david at 10:12 PM | Comments (10) | TrackBack

                "Wow. You must be really smart, huh ?"

                said in my very best Julia Roberts/Pretty Woman impressioned voice.

                CD sales fall as downloads rise, fueled by broadband

                "I think CD sales are going to continue to decline," says Owen Sloane, a Los Angeles music attorney who specializes in music and intellectual property.

                I sometimes wonder if people really appreciate how their words are quoted by the press. I've had my own experience with such things and have been left with a pretty awful taste in my mouth in regards to the reporting press because of it. As an L.A.-based attorney specializing in music and intellectual property obviously Owen Sloane is not an idiot. So my best guess suggests that what he more than likely said was something to the tune of "We've seen a continued increase in online sales via downloading and streaming music sites. Because of this increase obviously 'I think CD sales are going to continue to decline'" or something similar. And he would definitely be right.

                The rest of the above linked article is actually pretty good. It points out that...

                ...the record industry is apparently crying the 'CD sales decline blues' again because of an apparent 7% decline in sales over the past year. What I don't buy is that every person in the music industry is a complete idiot and doesn't bring recognition to the fact that we're right smack dab in the middle of a media/medium shift in regards to the delivery mechanism for music. When you couple this with the increase in both legal and illegal downloads the distribution numbers are obviously going to be skewed. But overall things are OK, and as the increase of legal online music sites (up by 180 over last years 50 apparently) continues to provide increasingly better and better services that make both cost, availability, and accessibilty attractive to this same base of consumers, they're only going to get better.

                Some might think I'm giving the music industry far too much credit in regards to what they actually believe. But I don't think so. To make it in the music industry requires skill, talent, and from the business side of things especially, smarts. They'll get this thing figured out. In the mean time my advice would be believe about half of what you read in the press. Based on my own above linked experience, that number would be about right.

                Posted by m.david at 07:26 PM | Comments (0) | TrackBack

                "Nuclear Bombs Have Rights To!" - or - OK, Thats It... This SmutRag Reporting And Any Of Its Supporters Needs To Stop... This Is Getting Out Of Hand

                USNews.com: Nation and World: EXCLUSIVE: Nuclear Monitoring of Muslims Done Without Search Warrants (12/22/05)

                In search of a terrorist nuclear bomb, the federal government since 9/11 has run a far-reaching, top secret program to monitor radiation levels at over a hundred Muslim sites in the Washington, D.C., area, including mosques, homes, businesses, and warehouses, plus similar sites in at least five other cities, U.S. News has learned. In numerous cases, the monitoring required investigators to go on to the property under surveillance, although no search warrants or court orders were ever obtained, according to those with knowledge of the program. Some participants were threatened with loss of their jobs when they questioned the legality of the operation, according to these accounts. Federal officials familiar with the program maintain that warrants are unneeded for the kind of radiation sampling the operation entails, but some legal scholars disagree.

                Here's an idea... Why don't we just park a couple of 747's on the runway, leave the engines running and the keys in the ignition, and put a BIG PHAT SIGN on them that states:

                Terrorists:

                Just in case you need a bit more time in the air to decide which targets you want to hit, we've topped off the tanks for you.

                Oh, and we got ya' those nice fuzzy wool seat cover's... you know, the ones you said you really like that one time.

                Your welcome, it's no problem. They were on sale anyway, and we were really just doing our job to protect your a$$'es from being uncomfortable. That would be inhumane!

                and guess what?! We got you a bag of Hershey Kisses... there under the front seat, you know, in case you're craving something sweet while your plotting out whether it makes more sense to go for a Nuclear plant, the Hoover Dam, or a side swipe of the general downtown San Francisco area... Smooch, Smooch, Smooch. ;)

                Oh, do you need a pillow?

                America... WAKE THE FUCK UP! Just who is it that we're protecting? Cuz' its OBVIOUSLY not ourselves!

                Posted by m.david at 12:38 AM | Comments (0) | TrackBack

                December 23, 2005

                SourceForge To Offer Subversion?

                I'm not finding a copy of this announcement on the site, so for now I'll simply copy and the paste the intro into the SOURCEFORGE.NET UPDATE - 2005-12-22 EDITION that I recently found in my inbox.

                Dear SourceForge.net User,

                As we enter a new calendar year, our focus remains on further
                improving the quality of our service. To that end, I am pleased to
                announce that SourceForge.net will offer Subversion in early January
                2006, initially as a beta program available to approximately 50
                projects. Then, if the Subversion beta period proceeds as smoothly as
                we expect, we will deploy Subversion site wide by March, 2006.

                Going forward we intend to support both CVS and Subversion, thereby
                offering the two version control systems most widely used in the Open
                Source community.

                In addition to our Service Operations Team's progress regarding our
                Subversion offering, I am also pleased to report that our Enhancement
                Team and Product Management continue to make significant progress on our
                upcoming redesigns of search and the software map. I'll provide details
                next month.


                Thank you once again for your continued support. The SourceForge.net
                team wishes each of you a healthy and happy 2006.

                Jay Seirmarco
                General Manager, SourceForge.net
                jay@sf.net

                Posted by m.david at 02:41 PM | Comments (0) | TrackBack

                Finally, Someone With Some Web Standards/CSS 'Umph' Has Stated 'It's OK To Send Different Browsers Different Source'!

                Tantek's Thoughts

                If only there were a way to send one width to IE5.x/Windows, and another width to modern browsers which supported the CSS box model... is a rough approximation of what Jeffrey said (emailed) to me at the time.

                A lot of people have clout in the Web Standards world. However, few have as much as Tantek Çelik. For those unaware Tantek is the man behind, among other things, the development of the standards-compliant Microsoft Internet Explorer (before any of y'all start reaching for the page down key to access the comment box, keep reading ;) -- for Macintosh (there, you feel better now? Good. Making you feel better is what I'm here for. Just doing my job :)

                So to restate, Tantek was the guy (he's with Technorati now) behind the development of Microsoft's IE for Mac product, which, as I'm sure most of you know by now has been recently sent to the MS support chopping block just in time for Christmas Dinner at Bill's place. Suprisingly, my invitation is yet to arrive in the mail... I'm sure thats just a technical 'glitch' however. I'm sure it'll arrive any day now. In fact, as soon as I'm done writing this I'm going to go wait by the mailbox. You know, just in case the mailman is holding back on me. I say this because I have suspected for quite some time now that he's the one behind the 'yet to arrive' invitation from the W3C XQuery Working Group to 'come on board' as an invited expert. I mean come on... its OBVIOUS that they've sent the invitation so what other possibilities could there be? Thats right... The mailman. I've long suspected him for a whole slough of 'missed deliveries'. For example there was the "no puppy for Christmas '76" incident that has yet to be solved... My guess? Thats right, the mailman never delivered that damn letter to Santa! That bastard. Do you know whats its like to be four years old and NOT have a puppy?! It DESTROYED ME!!! ;)

                If not obvious, I pretty much blame the mailman for everything these days. No invitation to Bill's for Christmas. No XQuery WG invite. My little sister. You know, that kind of stuff. ;)

                Phew.. OK, now that I have that off my conscience... back to Tantek's post. :D

                So here's the deal... I have long struggled with the 'ideals' that many developers hold on to that demands that only one source code base sould be sufficient to properly display, as expected, in each and every browser ever produced that still holds any significant market share whatsoever. Why is that? (the developers ideals, not my struggles with these ideals.) Why can't it be OK to have to do a little server-side work to send one set of code to one browser and another set to another. Do you realize how much time, heartache, headaches, anxiety, and general sanity is saved when you allow yourself to let go of the ideals that EVERY browser must render the same source code the same way or its no good at all?

                TONS. and TONS. and TONS.

                Now, don't me wrong. This is not to suggest that we shouldn't continue to push for the browser manufacturers to work together to provide a standards-compliant browser that we can all count on to display the HTML/XHTML/CSS we send it, as long as that HTML/XHTML/CSS is standards-compliant itself, to render close to, if not exactly the same.

                But we don't live in that world right now. In fact, we NEVER HAVE! So why continue to frustrate yourself with trying to hack 'the perfect markup base' together? I promise, even with the fantastic efforts of people such as Dean Edwards who have helped make our development lives quite a bit more sane than they were, with the existing base of browsers it's a pipe dream that will NEVER come to fruition. Of course, I guess if all you use is HTML 3.01, then yeah, that pipe dream CAN come true. But if this happens to be your pipe dream, then its not really a pipe dream in the real world, just in your head. In fact, if this 'dream' sounds even remotely close to something you hold near and dear to your heart...

                Seek help.

                Please.

                Thanks :)

                ---
                For the rest of you who are not currently pre-occupied with a therapy session, lets play with some code shall we. :)

                Before we get started, I should preface this with the fact that one of the common arguments I hear against using server-side code to determine what browser is making the request is that you can't always count on the browser sending the correct User-Agent string. While I personally consider this 'excuse' the lamest possible reason why you shouldn't use server-side logic to determine what browser is making the request, I will give into the fact that this statement, in fact, is true. For like .0000001% of the requests, but none-the-less, true.[1]

                But guess what... over the course of the last twelve(12) months we've gone from a world where client-side XSLT (1.0) wasn't considered a viable cross-platform, cross-browser solution, to a world where it can easily be used in conjunction with various other technologies as the very foundation in which ALL web pages are built. This isn't just me, Mr. "MDP+XSLT4EVER" trying to promote XSLT on the client because I personally think it's a fantastic programming language. In fact, while I do feel this way, I'm not even going to go as far as suggesting that it become the foundation of your Web 2.0 weblication development, although it would definitely be a good foundation to build upon.

                Instead, I'm simply going to suggest that with a combination of using the User-Agent string, coupled with sending a simple XML "configuration" file the first time a browser makes a requests to any particular website you can quickly and easily determine whether the browser is being spoofed, and, if it is, send a vanilla webpage with the message "I'm on to ya!" in Bright Red 60pt Verdana (or something of your own choosing if this isn't something that'll work for your situation. ;)

                Now, for the 99.9999999999% of the requests that will be determined the client is making no attempt to claim its something thats its not you can now reliably assume that you either have in your hands the correct browser information, or someone is going to the extent of spoofing just the version of the browser, but not the browser itself. If this happens to be the case, then please tell me you can live with ridiculously small percentage of folks who are going to this extent of pretending to be a browser version their not, writing them off as nothing to be concerned over. If you can't, starting with this paragraph as "1" please count back eight(8) paragraphs and consider this same advice for yourself. NOTE: That would be nine(9) paragraphs for all you smart a$$'s who suggest "---" counts as a paragraph... for those of you now questioning if "---" or a one(1) to two(2) word sentence really counts as a paragraph, or even further if a one or two word 'sentence' technically even qualifies as a sentence... bite me. ;)

                For those of you still with me, thanks for not being a complete phreak :) Let's continue, shall we... :)

                Now there's a couple caveats I need to make known: This currently doesn't work in Opera 9.0 preview... as outlined in footnote [1], the document() function currently blows up the browser... but again, as outlined below, my guess (and hope!) is that this will change with the final release.

                Also, to keep the various processing tasks separate(e.g. configuration separate from output), normally I would create a separate stylesheet for the actual processing of the HTML output (e.g. page:output) and import this stylesheet using the xsl:import instruction element. But Transformiix has, um, how should I say... issues with imported stylesheets and namespaces which are not part of the base XML document being processed. Don't know, don't care, so don't ask. (read: I gave up trying to make sense of why Transformiix does half the things it does (or doesn't do, as the case may be) and instead try not to push it in places that, while nice (like keeping processing tasks such as configuration and output processing seperate), are not mandatory in regards to functionality.)

                All right. One last thing: this sample is written using an ASP.NET server-side sample. I've borrowed from the code base of my client-side XML O'Reilly title a tiny bit. Not too much... I don't think O'Reilly would appreciate such things as me "pre-releasing" any of the actual code or content from the title. So I've watered things down and changed things such that I don't devalue the title in any way, while at the same time giving you all something to both think about and play with over the holidays.

                This will also be a good teaser of sorts as to the content of the title. One thing you can be absolutely certain about... if you like code, theres LOTS and LOTS of code to play with in this title. If not obvious, I kind of like writing... code and text alike. But if you think I write a lot of text... Oh my... just wait till you see how much more I like to write code. Believe it or not, writing blog entries is a hobby, not a profession... Code is Life, at least my life anyway :D

                OK, so with all of this stated, lets FINALLY look at some code.

                First, the server-side (ASP.NET) code:

                
                <%@ Page Trace="false" Language="C#" Debug="false"%>
                <%@ Import Namespace="System.Xml" %>
                <%@ Import Namespace="System.Xml.XPath" %>
                <script runat="server">
                    void Page_Load(Object sender, EventArgs e) 
                    {
                    String browser = Request.Browser["Browser"];
                    String UserAgentInvalidDoc = "./UserAgentInvalidDoc.xml";
                    String PItext = "type=\"text/xsl\" href=\"SessionConfig.xsl\"";
                    String compareBrowserStringDoc = "./compareBrowserString.xml";
                    XmlDocument xDoc = new XmlDocument();
                    xDoc.Load(Server.MapPath(compareBrowserStringDoc));
                    XPathNavigator xNav = xDoc.CreateNavigator();
                    
                    Response.ContentType = "text/xml";
                    
                    XmlTextWriter x = new XmlTextWriter(Response.Output);
                    x.Formatting = Formatting.Indented;
                    x.Indentation = 2;
                    x.WriteStartDocument();
                    x.WriteProcessingInstruction("xml-stylesheet", PItext);
                    x.WriteStartElement("my","session","http://channelxml.com/explorations/session");
                    x.WriteStartElement("my", "validation", "http://channelxml.com/explorations/session");
                    x.WriteStartElement("my", "UserAgentInvalidDoc", "http://channelxml.com/explorations/session");
                    x.WriteValue(UserAgentInvalidDoc);
                    x.WriteEndElement();
                    x.WriteStartElement("my", "browser", "http://channelxml.com/explorations/session");
                    x.WriteValue(browser);
                    x.WriteEndElement();
                    x.WriteNode(xNav, false);
                    x.WriteEndElement();
                    x.WriteEndElement();
                    x.Close();
                    }
                </script>
                
                

                Without spending time explaining how the above code works (its shouldn't be too hard to figure out, but if you're unfamiliar with ASP.NET or new to coding in general, I would HIGHLY recommend you pick up a copy of O'Reilly's ASP.NET In a Nutshell title. I use my copy often. A fantastic reference worth every penny (and I purchased my copy long before I gained any "free book" benefits from O'Reilly so I am stating this having spent cold hard cash to add it to my bookshelf.)

                It should be fairly obvious that what the ASP.NET code does upon each request is build out an XML file with the browser the requesting client claims to be, a default fallback file that can be transformed when its determined by the client-side XSLT that the browser its claiming to be and the browser it actually is are not the same, and then embedded XML data that is used as a way of comparing the 'claimed' browser string to a list of known browser strings that would normally match the XSLT vendor system-property. A significant point worth mentioning comes in the answer to the question "Why do we need to combine the static XML file and the dynamic data in the first place? Can't we simply return the dynamic data and access the static file from the client using the document() function?" and the answer is quite simply yes, we can. But the server cost of combining these XML files into one XML file is minimal, where as the cost in performance in regards to the initial load time of the the application is quite signficant.

                Why's that? Making that second request requires, well a second request. While this request does add a tiny bit of HTTP header overhead, its not exactly something we need to be overly concerned with. But the additional time it takes to make the additional request back to the server and have this same information returned in a separate XML data file? This has the potential to be fairly significant as when you add together the additional time it takes gain access to the requested file, as well as the additional time for the XML parser to parse the returned XML and make it available to the XSLT processor to continue forward... This all adds up to a human noticeable time lag. While time lag in making new requests once an application is loaded is expected, the initial load time of any given application has a significant weight on the perceived value, capability, and performance of any given application. This kind of thing REALLY matters. Finding ways to minimize the initial load time of any application is always the best philosophy. With that said you also don't want to burden your server with extensive processing as this obviously has an effect on the perceived performance as well given the fact that to the end user, time is time no matter if its the client or the server thats taking the time to do the processing. Obviously a balance needs to be struck. But such a balance is well beyond the scope of this post. Maybe for another post, but most definitely something you'll find as part of my O'Reilly title (insert cheezy "I'm so ashamed to be self-promoting" caption here... wait, I'm not ashamed to self promote... nevermind, just buy my Client-side XML title when it releases, K. ;)

                Moving back to the actual XML file produced by the above ASP.NET script... you might be asking "why do I care what browser the client is claiming to be? Can't I just use the value returned by system-property(xsl:vendor) to determine what browser it is and be done with it?" and the answer would be, "yes, you can." But having this information is actually fairly important as, for example, Mozilla-based browsers such as Firefox and Netscape (well, at least partially in the 8.0 release anyway) all report back as using the Transformiix processor. For transformation of XML using Transformiix this information is not all that important as there's no difference at this stage between what version of Transformiix each browser is using. This might change in the future, but thats not what we're concerned with at the moment. What we're concerned with is the version of the underlying Mozilla processing engine as well as various other assumptions that can be made when we have the combination of browser and vendor at our disposal.

                So then where is the browser version info? Good question. Given this code is influenced by code developed for the O'Reilly title, as well as the fact that this is really designed to merely showcase that this can be done, and done quite easily without tripling the code base for you to absorb. SO MUCH MORE is possible when you start using all of the tools you have at your disposal together, which is another purpose for this post... to showcase the fact that theres a whole new world of possibilities out there when you factor client-side XSLT into the mix, and all it takes is a bit of knowledge and a whole lot of imagination and... well, I'll leave the 'and' to your imagination. :)

                Continuing forward, whether familiar with ASP.NET or not, looking at a sampling of the output of any given code-base is usually pretty helpful in quickly gaining an understanding of how things work, or at very least what can be expected when making a processing request such that you can take this data and do something else with it (which is really the whole point of making the request in the first place.)

                With this in mind, the following is what would be returned by the above code when a request is made by Firefox:

                
                <?xml version="1.0" encoding="utf-8"?>
                <?xml-stylesheet type="text/xsl" href="SessionConfig.xsl"?>
                <my:session xmlns:my="http://channelxml.com/explorations/session">
                    <my:validation>
                        <my:UserAgentInvalidDoc>./UserAgentInvalidDoc.xml</my:UserAgentInvalidDoc>
                        <my:browser>Firefox</my:browser>
                        <bVend:bVendors xmlns:bVend="http://channelxml.com/explorations/browservendors">
                            <bVend:vBrowser name="IE">
                                <bVend:vendor sourceXML="validIE.xml">Microsoft</bVend:vendor>
                            </bVend:vBrowser>
                            <bVend:vBrowser name="Firefox">
                                <bVend:vendor sourceXML="validFirefox.xml">Transformiix</bVend:vendor>
                            </bVend:vBrowser>
                            <bVend:vBrowser name="Mozilla">
                                <bVend:vendor sourceXML="validMozilla.xml">Transformiix</bVend:vendor>
                            </bVend:vBrowser>
                            <bVend:vBrowser name="Netscape">
                                <bVend:vendor sourceXML="validNetscape.xml">Transformiix</bVend:vendor>
                            </bVend:vBrowser>
                            <bVend:vBrowser name="AppleMAC-Safari">
                                <bVend:vendor sourceXML="validSafari.xml">libxslt</bVend:vendor>
                            </bVend:vBrowser>
                            <bVend:vBrowser name="Opera">
                                <bVend:vendor sourceXML="validOpera.xml">Opera</bVend:vendor>
                            </bVend:vBrowser>
                        </bVend:bVendors>
                    </my:validation>
                </my:session>
                
                

                Without spending too much time on the details, a couple of things need to be understood in regards to the above XML output.

                First off, as mentioned above, the output is the result of a static XML file that has been intergrated with dynamic data specific to the request being made. This static XML file contains the information necessary for the client to determine if the browser is potentially being spoofed by comparing the value returned by the XSLT 1.0 function(parameter) combination of:

                
                system-property('xsl:vendor') 
                
                

                Also, to gain access to the actual real world name of the requesting browser in ASP.NET (instead of using the User-Agent string and your typical indexOf(char) function to loop through potential values found in the UserAgent string or RegEx object/function to determine the same thing (e.g. MSIE for Internet Explorer) you would use:

                
                Request.Browser["Browser"]
                
                
                or, more specifically, if this is something you plan to use often within a particular server-side script, set the value of a string to the value of this property:

                String browser = Request.Browser["Browser"];

                With this combined data we can now quickly look at the XSLT the browser is being asked to use as the basis for transforming the above XML:

                This XSLT file, by the way, is really two separate files merged to accomodate for the Transformiix issues with imported stylesheets. Combined, the two files look like this:

                
                <?xml version="1.0"?>
                <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:my="http://channelxml.com/explorations/session" xmlns="http://www.w3.org/1999/xhtml"
                    xmlns:html="http://www.w3.org/1999/xhtml"
                    xmlns:bVend="http://channelxml.com/explorations/browservendors"
                    xmlns:page="http://channelxml.com/page/output" exclude-result-prefixes="my html page">
                    <xsl:output doctype-system="/resources/dtd/xhtml1-strict.dtd" doctype-public="-//W3C//DTD XHTML
                        1.0 Strict//EN" cdata-section-elements="script" indent="yes" method="xml"/>
                    <xsl:output omit-xml-declaration="yes"/>
                    <xsl:template match="my:session">
                        <xsl:apply-templates/>
                    </xsl:template>
                    <xsl:template match="my:validation">
                        <xsl:variable name="browser" select="my:browser"/>
                        <xsl:apply-templates select="bVend:bVendors/bVend:vBrowser[@name = $browser]">
                            <xsl:with-param name="invalidDoc" select="document(my:UserAgentInvalidDoc)"/>
                        </xsl:apply-templates>
                    </xsl:template>
                    <xsl:template match="bVend:vBrowser">
                        <xsl:param name="invalidDoc"/>
                        <xsl:variable name="vendor" select="system-property('xsl:vendor')"/>
                        <xsl:choose>
                            <xsl:when test="bVend:vendor = $vendor">
                                <xsl:apply-templates select="document(bVend:vendor/@sourceXML)"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:apply-templates select="document($invalidDoc)"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:template>
                    <xsl:template match="page:output">
                        <xsl:apply-templates select="page:html"/>
                    </xsl:template>
                    <xsl:template match="page:html">
                        <html>
                            <xsl:apply-templates/>
                        </html>
                    </xsl:template>
                    <xsl:template match="page:head">
                        <head>
                            <xsl:apply-templates/>
                        </head>
                    </xsl:template>
                    <xsl:template match="page:title">
                        <title>
                            <xsl:apply-templates/>
                        </title>
                    </xsl:template>
                    <xsl:template match="page:body">
                        <body>
                            <xsl:apply-templates/>
                        </body>
                    </xsl:template>
                    <xsl:template match="page:heading">
                        <h1 style="font-size:{@size}">
                            <xsl:apply-templates/>
                        </h1>
                    </xsl:template>
                </xsl:stylesheet>
                
                

                This post is already too long so I'm going to leave you to figure out how the above XSLT works. To those who already understand XSLT, its obviously not difficult to figure out. To those who are new to XSLT if you have any specific questions, leave them as a comment and I will do my best to answer them as time allows.

                But don't worry, I'm not going to leave you hanging in regards to what is finally output to the browser. The one piece of missing XML data that is obviously pretty important in understanding what's taking place is the XML specific to each browser/XSLT processor combination. Given the Firefox example above, lets look at the Firefox specific XML file. If you look at the XML file we initially sent to the browser in the above example you'll notice that a browser/vendor combination of Firefox/Transformiix tells our XSLT processor to request the "validFirefox.xml" from the server. That files looks like:

                
                <?xml version="1.0" encoding="utf-8" ?>
                <page:output xmlns:page="http://channelxml.com/page/output">
                    <page:html>
                        <page:head>
                            <page:title>Hooray, Your a Valid Mozilla-based Browser (Firefox, to be more specific)! Here's a Cookie</page:title>
                        </page:head>
                        <page:body>
                            <page:heading size="large">Hooray, Your a Valid Mozilla-based Browser (Firefox, to be more specific)!  Here's a Cookie.</page:heading>
                        </page:body>
                    </page:html>
                </page:output>
                
                

                To showcase what this looks like when rendered, instead of providing a screen shot, I'm instead going to provide you a URL to test this out for yourself. In quick dislaimer, I've tested this code to work correctly on Internet Explorer 6.0 and Firefox 1.5 on top of a WinXP Pro box, and on Safari and Firefox 1.5 on a Mac/OSX Tiger box. As mentioned, the document function blows up Opera 9.0 preview, so considered yourself warned... again. What I don't know for sure is whether this code renders on Firefox running on a Linux-box. I assume it does given the fact that it runs just fine on OSX/Firefox, but if you discover this not to be the case, then please let me know and I will log into my Linux-box and figure out whats up.

                With that stated, you can access the live demo here. To help understand whats going on, try it on various browsers if you have any combination of Fx, IE, or Safari installed on your particular machine.

                Obviously pretty simple. But what should also be obvious is how much more you could be doing with this file. For example, referencing platform specific Javascript instead of banging your head against the wall trying build a cross-browser/platform Javascript solution. The same thing goes when speaking in terms of platform specific CSS files. Which, in fact, brings us right back to the original point of this post in the first place. To summarize, let's come up with a nice little catch phrase that we can all use in moving forward with our client-side browser-based application development. Just a suggestion, but how about something like:

                If Tantek says its OK, then its OK.

                I realize that if a phrase such as this were to be adopted, it puts a lot of potential power into Tantek's hands. But I think its pretty safe to state that if such a power is going to be given to anybody, then we're in pretty good hands with Tantek.

                Wait, I like the sound of that... Instead of the above, how about:

                We're in good hands with Tantek

                I like it... has a good sound, look, and feel to it. Plus, its true... Not that I'm really suggesting this as some sort of Mantra we all virtually chant every morning over IM, but paying attention to the things Tantek has to say, in and of itself, is a pretty good idea. So maybe we can just leave it at that.

                And to reiterate his comments that spawned this post in the first place:

                If only there were a way to send one width to IE5.x/Windows, and another width to modern browsers which supported the CSS box model... is a rough approximation of what Jeffrey said (emailed) to me at the time.

                Hey, there is!

                Cool :)

                ---
                Before I close out this post, there is something else I do want to point out... Whats interesting about using this "Anti-Spoofing" method is not so much the fact that the underlying accomplishment... theres nothing new I've presented that makes your development life all that much easier or better by sending the browser string back to the client for comparison against the returned value of system-property('xsl:vendor') and instead the fact that we've put the responsibility of processing the data into the hands of the client browser. In this case we're forcing the client to use its own resources to determine its own honesty. But again, even this doesn't suggest that any great battle has been won. But if the end goal is to push as much of the data processing to the client, and by doing so freeing up server resources that can now be spent on serving up a greater numbers of requests for data (which is an obvious side effect of pushing the data processing to the client... less data processing, more requests for data) our total performance gains become more than just the value of the saved server resources as the amount of resources necessary to serve simple requests for data, even in increased capacity, is several magnitudes less than what it costs to process that same data on the server, sending the result to the client for rendering. We also gain a reduction in bandwidth necessary to transfer raw data that can then be rendered by a stylesheet preloaded into memory which can in many ways be compared to the benefits gained in compressing HTML and images on the server and decompressing them on the client. While this is not what is technically taking place, it's an easy way to view the comparison to what is ultimatelly the same result... reduced bandwidth means more requests can be served over the same wire without increase in bandwidth costs at a relatively small cost in "decompressing" that data once it arrives at the client. In many ways this is really more of an excercise in training our minds to be be constantly thinking of cheap ways to reduce bandwidth (both server-side processing and over-the-wire) in which the cost increase to the client is minimal, and no where near the total cost of not using these methods.

                But thats not the only gained benefit.

                An equally important point to realize is that we are also retraining our minds to think in terms of classic client-server architectures. By forcing ourselves to push as much of the data processing to the client and returning our mindesets to classic client-server architecture we've actually accomplished something quite a bit more than this. Similar to the concepts of Grid Computing, classic client-server architectures are extremely efficient due to the fact that they spread the overall computing cost across a greater "surface area". Using an often referenced cliche catch phrase "the combined total is greater than the sum of all its parts."

                So have we suddenly just created our first Grid Computing application without realizing it? Well, close... but not exactly. There are plenty of elements of Grid Computing that have not been captured using this method. But what we have done is captured the "spirit" of Grid Computing, which if not already obvious, has it's roots in classic client-server application architecture. The fact that by using the above method we've turned the "tables of proof" back onto the client helps drive home the point that as we continue forward in the realm of web-based application development, we continue to bring ourselves closer and closer to the time tested and proven client-server architectures of years gone by, while at the same time building upon the ideals that make Grid Computing such an appealing end goal in the first place.

                The more things change, the more they stay the same. Isn't that how the phrase is termed? :)

                I'm pretty sure it is. ;)

                Enjoy your Browser-based XML processing with Client-side XSLT and browser specific CSS and Javascript enhanced day!

                ---
                [1] Until recently, Opera would send a User Agent string claiming it was Internet Explorer as to avoid being sent a 'stupified' code base, forcing it into a position of not being able to provide its user base with the same functionality that the IE user base had.

                I have to admit that at the time they were doing this (this is no longer the case, by the way) I had a hard time with the complaints that would follow that they were now having to deal with a 'sloppy' IE-only non standards-compliant code-base. My own feelings were that if you claim to be something you're not, you can't then come back and complain that you are being served the very code you 'requested' in the first place. Either complain you're being served stupified code, but continue to serve up the correct user-agent string, or spoof the user-agent, and then build a browser that handles the non-compliant code you're being served. It's a little much to expect everyone to adapt to you instead of the reverse of adapting to everyone else. I'd use the phrase " you can't have your cake and eat it too" but I hate that saying, so I won't.

                Besides, I don't have to anymore. Opera decided to take control of things and, to be honest, they're now my favorite browser. Why? Well, its always been the fastest browser... that's a 'no contest' type deal. With client-side XSLT (although there are some holes currently e.g. the document() function will blow up the browser, don't even try... and among others the functions name() and local-name() don't return anything, nor do they throw an error... my assumption is that these will be fixed given the fact that they are not optional in the XSLT 1.0 spec... however, if for whatever reason Opera decides not to provide support for these functions, and yet jump on top of their 'standards! standards! standards! bandwagon... I take all of this and what I am about to suggest back. Something tells me I won't have to do that though... I hope anyway ;) support in version 9.0 one of the last hold-ups I had with promoting Opera as the 'King of all browsers' was quashed and as such I feel fairly confident in stating that Opera is now the King of all browsers. At least they will be with the final 9.0 release.

                With that said, I will admit that I really wish they would directly support XForms first before WebForms 2.0. But I'm also not going to let this get in the way (mentally anyway) of promoting it as the 'King' as I am now of the belief that if enough people want the support, it will arrive, it's just a matter of time. If not obvious, my views on Opera have changed DRAMATICALLY since they added support for client-side XSLT. To have overcome the 'guilt-by-association' clause that came as part of the political battle between CSS and XSL proper (as in XSL Formatting Objects, XSL-FO, or, as the W3C still insists on calling the specification, XSL - which is obviously easily confused as being the same as XSL-T, or more commonly termed XSLT given it too is often refered to as just XSL) was a HUGE thing. By overcoming this I have come to believe that Opera (the company) is now in the business of serving up products that contain features and functionality the customer base (or potential customer-base) is desirous of. Before now, and to be completely honest, I pretty much put Opera into the same basket I put Apple... or in other words "we'll do it our way, we'll provide you with the features WE want to give you, and you'll either like it, or live with it... but either way, you have no say in the matter." Whether this was a fair 'basket' to place them in or not, thats the impression I had always had from them. But not anymore... and as such I now believe it can easily be stated that Opera is the 'King' of ALL browsers, and the rest of the browser world needs to start playing catch-up to them instead of the other way around.

                Believe it.

                Posted by m.david at 06:52 AM | Comments (0) | TrackBack

                December 22, 2005

                Not Sure How I Missed This, But Bob DuCharme's Blogging

                bobdc.blog: Scripting the addition of XML files to the eXist XQuery database

                ...and, as the above linked title suggests, has a nice intro into a fantastic open source XQuery database engine, eXist.

                Scripting the addition of XML files to the eXist XQuery database

                Saxon is great for getting to know XQuery syntax (see part one and part two of my "Getting Started with XQuery" articles in XML.com for more on this), but it reads all of the data to query into memory, and much of the point of XQuery is to work with large, indexed, disk-based collections of XML that won't fit into memory. I've started playing with the open-source eXist XML database for this.

                Sweet! (both the article, and the fact Bob's blogging.)

                Subscribed. [NOTE: This is the short summary Atom feed. If you visit the Bob's entry page, there's a full entry Atom feed as well. Oh, and RSS "2.0" too.

                BTW... why can't RSS "2.0" die a horrible "2.0" death? RSS 1.x/RDF is fine, but "2.0" really needs to just go away. Why?

                Well, beyond the confusion of the chosen naming conventions of two active RSS projects, theres the fact that the RSS 1.x/RDF folks actually care about an effort to build upon a standardized format. While I'm pretty sure-to-absolutely positive the RSS "2.0" data feed for Kurt's and my podcast is evily innaccurate and would probably be refused by the Feed Validator with a simple "come back when you have a clue" error message in place of what would normally be a listing of all that is wrong with it, I have a real problem with the "movement" behind the RSS "2.0" fork. To be completely honest, I created what I assume to be an invalid RSS "2.0" data format in protest.

                Huh? Well, I figure the best way to pay tribute to those in whom refuse to promote good practices in XML usage (see: my OPML post from a while back for more info) which includes usage of namespaces and an effort to standardize the specification is to take the same sort of attitude with the RSS "2.0" files I produce by hand. I mean if it looks (kinda) like an XML data feed and smells (even if the smell is more reminiscent of a data feed that just took a swim in the local sewage treatment plant and less like an actual standardized data feed) like an XML data feed, its an XML data feed, right?

                No. But if a "loosey-goosey" non-standardized format is the suggested "power of RSS '2.0'" then loosey-goosey it will be. If "RSS happened outside of the standards bodies for good reasons" then for the same "good reasons" I guess there's no need for me to make any effort at conforming to a specification that, if it exists, doesn't really NEED to exist in the first place, right? :)

                Of course, I'm not suggesting that this RSS "2.0" feed is all their will ever be for the eXplorations podcast. The Atom feed is something thats part of a much bigger "interactive podcast weblication" I'm working on. It's a small app that is about 1/3 of way done after 2 hours of work so it should be complete and live soon enough. But I can tell you right now I have no plans, desires, or intent to make the RSS "2.0" feed part of this app. It will be available, but I'm not going to spend my time trying to adhere to a spec that, if exists, I wouldn't even know where to find it.

                Oh, and please... don't show me. Honestly, I don't care. If I want a hack, I'll hack my own data feed format. I don't, so I'll use Atom instead and be done with it.

                Posted by m.david at 03:32 PM | Comments (0) | TrackBack

                Interesting... In Fact Kurt and I Recorded A Segment That Covers This Near Exact Topic

                Push Button Paradise

                Microsoft to partner with...

                Richard McManus reports that Microsoft is ready to partner with a "Tier 1 internet company" in order to take Google down a notch. He speculates it might be Yahoo!

                I have my doubts I can afford the time today to get this segment edited and posted... but it was a bit shorter in length than yesterdays 'office document format' debate, so if I can find a window I will spend some time editing this section and get it posted. Based on this info reported by Micah it seems now would be the time to get it posted such that we can see how it compares to what, if anything, does happen in this space...

                Either way, I'll be sure to make this segment the next one I edit as the other segments, while still timely, are not quite as timely as this segment would be.

                Posted by m.david at 03:15 PM | Comments (0) | TrackBack

                Definitely Not Just You, Eve... In Fact, Just Such An Event, If Televised, Would Be Reason Enough For Me To Turn The TV Back On... Momentarily, Anyway

                Pushing String ? Is it just me…

                In fact, I would even order it on pay-per-view...

                Is it just me…

                Filed under: General— Eve @ 7:26 pm

                …or are there others who think it would be a good idea, just to be absolutely above-board about all this, to openly strip-search the guy looking for bruises, and if they’re found, ceremoniously transfer him from the care of American guards to that of Iraqi guards, who will surely be much kinder to him after all he’s done for them

                Question to all single and closed minded bleeding heart's (as opposed to open minded bleeding hearts. You're/They're not the problem...):

                At what point in the known detailed history of EXTENSIBLE crimes against humanity cause you to feel the same way? Whether weapons of mass destruction were found or not, no one with credibility (obviously Saddam and a handful of other criminals suggest differently, but I would argue the previously stated credibility point and be done with it) has gone as far as suggesting Saddam to be an innocent "victim of the United States oppressive, aggressive,