August 2004 - Posts
"Beginning ASP.NET 1.1 Databases"
By Damien Foggon and Daniel Maharry
Published by APress
One of the first books I bought as a classic ASP developer was the former Wrox's "Beginning ASP Databases", which greatly helped me understand the role, relationship and relevance of database systems in modern web applications. I attacked that title with reckless abandon and limited foundation, acquiring a ton of knowledge. It was with this same fervor that I launched into APress' "Beginning ASP.NET 1.1 Databases" - perhaps my over-exuberance, coupled with the fact that I know a lot more now than I did then, led to slight disappointment with this title.
Don't get me wrong, overall this is a great piece of work, and what it does cover it covers very well. But it did leave out some critical areas that one should know as an ASP.NET developer.
I give high marks for the book's breadth of examples with a variety of data stores, such as MSDE, Access, and MySQL, as well as Excel spreadsheets and CSV files. Curiously though, Microsoft SQL Server, Oracle and XML data sources were left out – I assume because MSDE so closely resembles SQL Server such would be redundant; and arguably describing XML is too tough to succinctly crunch into three paragraphs and then provide a working example.
The scaled choice of database platforms, highlighted by the fact that ASP.NET Web Matrix is featured exclusively as the IDE of choice, leads me to believe that the book's intended audience would be the migratory developer or the first-time ASP.NET coder without access to enterprise-level resources. This is cool, and necessary in today's market, as too many books these days assume a Visual Studio .NET/SQL Server/Windows 2000 Server setup, which obfuscates the hobbyist. The only caveat is that the book's code samples are so married to Web Matrix that the newbie programmer will be lost without it.
The book's case studies are greatly appreciated, and best practices in single-page coding and application design are enforced throughout. The authors make great use of Five Normal Forms (FNF) in the sample projects. The chapter on stored procedures is likewise great, as is the discussion on error handling, and introductory devs will also much from the samples dealing with transactions.
Unfortunately, the phrase "...will not be covered further in this book..." is uttered on too many occasions for topics this I feel are critical knowledge for an ASP.NET developer of any level. Examples of these are largely skipping many of the important members within the System.Data.SqlCommand class (notably the ExecuteXmlReader() method), and only mentioning the SQL GROUP BY and HAVING clauses, without an exhibition of their use in a query. These clauses are critical learning for database programming, and certainly warrant at least a brief example. Tragically, they were mentioned only and then discarded without exhibiting what they do. This was disappointing.
I also didn't see anything about using the SqlCommandBuilder within the text, which is a great topic for beginners, since it's one of the "ignorance is bliss" features of ADO.NET, doing all the work for you behind the scenes, and is a great way to learn SQL syntax. It's therefore the perfect candidate for this book's target audience. I felt this to be an odd omission, given the fact that the DataSet.Update() method was mentioned. For the same reasons, I was offset by the fact that concurrency was left out (in the .NET world, a topic of debatable complexity – some see it as critical learning, others think it's too far advanced for a beginning book).
Nonetheless, the authors both speak clear and concise about the subject matter, all samples feature code that's simple, consistent and non-intimidating, and the use of graphics and illustrations effectively reinforces the concepts. This book makes a great learning tool for a classroom environment, if not a helpful guide for a professional web shop. This book gives you a look at the options available to you and will get you started and give you the tools to get far enough - but doesn't get you all the way there.
At the time of this writing, the two topics arguably getting the most press, causing the most stir and generating the most buzz for web services aficionados are service-oriented architectures (SOA) for general audiences, and more specifically within Microsoft circles, Web Services Enhancements 2.0. Author Jeffrey Hasan (of whose work I'm a big fan, notably for his work in "Performance Tuning and Optimizing ASP.NET Applications" (http://www.apress.com/book/bookDisplay.html?bID=135)) paints a masterful picture of both topics in this outstanding work. This is a must-have if you've caught the WSE bug (pun accidentally intended) and need a practical guide to building better web services.
The material assumes a fair amount of .NET experience on the part of the developer, so the focus isn't on presenting exhaustive code examples and then describing them line by line; the intent is to give the seasoned .NET programmer a primer on how to make their apps more effective and more available to the rest of the world.
Using Microsoft .NET's associated technologies for XML Web services development, SOA is presented as being a maturation process for organizational web services, implementing a high level of abstraction, and therefore, a greater degree of universal appeal by promoting broad component reusability. WSE 2.0 is then tackled, diving into the major areas of consideration for SOAP messaging (security, encryption, routing, reliability, policy creation/enforcement etc.). Hasan describes the importance and role of SOA within large, disparate systems, preaching the gospel of interface-based systems and use of service agents (mid-tier objects managing communications between web services, business components and type/operation interfaces). This builds on the same concept discussed by Microsoft's Yasser Shohoud as a major building block for advanced web services development in his seminal book, "Real World XML Web Services" (http://www.awprofessional.com/articles/article.asp?p=30931).
Hasan also offers a refreshing, pragmatic discussion on the debatable misconception of the true "benefits" of loosely-coupled web services within enterprise-grade distributed applications, presenting a decent case for tight coupling in certain situations.
The book's prime example of an evolving stock quote service is appreciated a lot more than weak "Hello World" examples, and discrete enough to exhibit most of the advanced features of WSE 2.0 with a SOA slant. Although one of the prime tenets for WSE 2.0 is to facilitate web services in a transport-agnostic manner, many of the examples are geared toward SOAP messaging using HTTP, to the enjoyment of ASP.NET developers – something that's largely missing in the market today, with many current examples being WinForms apps. Desktop developers may grunt at the lack of representation in the book's examples for using other protocols (i.e., TCP, SMTP, etc.), but it's a minor price to pay.
Also, the book does sufficiently and consistently make mention of WSE 2.0 development for those of us not married to Visual Studio .NET environments, even though the preference of the author appears to prefer using the IDE.
This book is wonderfully written, using a voice that makes topics that can be quite difficult to wrap one's brain around easier to grasp. The chapters are very logically arranged. However, the book's major selling point is the working code and practicality of its theories, boasting a heavy dollop of both that experienced devs will appreciate and quickly put to use. With only a sparse amount of syntax-centric documentation, Microsoft Hands-On Labs, articles, and in-print books available at the moment for WSE 2.0 programming, this book is easily the leading resource for concepts and code today on the subject.
On that note, the chapter on the future of messaging with Indigo was an unexpected but welcome treat. I also found myself using the book's appendix more than I do most, which consists of a well-rounded collection of top platform-neutral papers on WS-* initiatives. Very nice touch.
This is an advanced book, but not so far out there that a developer with a few months of .ASMX work logged won't be able to pick it up without sacrificing their social lives and/or sanity. The book's writing style, arrangement of content and oft-brutal honesty (i.e., working with X.509 certificates in WSE 2.0 is pretty easy, but still far from completely painless; VS.NET's Add Web Reference option can royally screw up your proxy classes, et al.) make this a real winner and a great addition to your library.
Well, displaying a "most active members" strip displaying logins and the number of posts they've submitting in some ordered fashion isn't necessarily a .Text creation per se (you've seen variations throughout the Web for years), but I took note of it when building a community imaging service for my site, and just a couple of days ago wrapped a listing of the top posters within a membership communiy within a user control and dropped it on a page:
My users really love it. :)
One of the reasons I'm looking forward to the election season being over is the chance to get back working with a WS-Addressing project I'd started for a library of B2C mobile web apps I was doing using WSE. Months ago I began pondering and pining about a certain type of routing model I'd like to see worked into web services, specifically in terms of reliable messaging and controllable routing. Not being a very bright human being, I dubbed it the de facto "boomerang model" due to the nature of the message path involved. A web service using such a model (based on latter WS-Routing recommendations and eventually WS-Addressing) would send request/response messages in SOAP sequentially across a set number of known nodes, and wait for a response from one of them.
In the following example, I've got 4 nodes, each representing a SOAP router to receive a message, in an assignment service for a taxi cab company, wherein a dispatcher sends out notifications of new pending pickups to drivers in the field. The notification/confirmation service ("Homebase") sends a message through the chain of taxi drivers with smartphones in their cabs and waits for a response back. As each intermediary receives the message, it can either accept ignore and pass along the assignment (requiring transaction support for longer dormancy periods), or accept it, informing the server and terminating any further routing, which at that point would be unnecessary.
[ HOMEBASE ==> TAXICAB 1 ==> TAXICAB 2 ==> TAXICAB 3 ... TAXICAB n ]
The routers would be assigned in a non-arbitrary fashion to denote some sort of internally-defined precedence, listed within a WSE-powered web service's referral cache. Hence the name, the boomerang response would make its way around the nodes, and stop when a node in the router chain reported back after being notified. An arguably easier model to program would be using a protocol like SMTP and just mass-mail wireless clients in the field and assign the job on a first-come, first-serve basis. But such would be prone to perceived usability clashes, even when taking great pains to guard against update concurrency issues. Why alert someone unnecessarily when you can run it through a hierarchical chain-of-command and stop once the current node confirms? (The catch is altering the precedence levels dynamically, but that's for another day.)
It's a theoretical messaging model on which I plan to base a lot of the B2C apps I'm putting together in a marketing plan I developed for a local wireless services provider, including a mobile apps framework that'll power the following scenarios:
q An online classroom or collaborative team environment in which roll call must be taken to see who's present or get group consensus on an announcement
q A new order engine for a pizza delivery service
q An emergency alert service assigning the closest responder to the scene of an accident (your on your own to develop the GPS integration to determine who's where)
q An auctioning application
The big hurdle is emulating functionality traditionally available on desktop or device-specific applications to work over the Wireless Web. Really fun stuff.
The concept is that my company - not a for-hire IT shop or ISV, mind you - would be subcontracted by a wireless provider, who'd broker deals in which they'd sell their cell phones and smart devices to businesses in lieu of them having full-blown e-commerce web sites and/or applications with which to upscale/integrate. I'd provide the applications development and hosting, and charge the wireless provider a licensing fee to tap the secured services. They get revenue from selling phones and pagers, and from monthly airtime charges; I charge tenancy fees to ISPs and transaction rates from clients directly.
Since we'd host all our own apps, we'd also be free to offer such licensing to other providers as they get their acts together. So if you've ever wondered exactly what it is that I do, this is it.
Go big or go home, baby.
Maybe I'll pick this up and do a review on it...
There's been lots of understandable mourning after the public announcement that the much-ballyhooed DynamicImage control (among other features) that was supposed to ship with ASP.NET v.2.0 now joins Clippy in the Microsoft graveyard of good ideas that just didn't make it. At least for now.
But cheer up - there's hope for all of us, as dynamic web imaging is still do-able, albeit not in the drag-and-drop fashion we were hoping for. Nikhil Kothari and Vandana Datye's outstanding book "Developing ASP.NET Server Controls and Components" describe dynamic imaging using an HttpHandler and a couple of other tricks within a custom server control, and it's a really great, extensible example. I can't qualify it, but I'm sure Nikhil has a sample of some sort posted either on his site or somewhere on the Web.
Now, can someone pass a tissue?
In my "other" life as a broadcast journalist / TV personality, one of the questions I get asked the most is who in history I'd most like to interview. My colleagues and I also bounce this gem off each other every now and then and try to come up with the most impressive roster.
I've always appreciated people who go about life or do what they do while they walk this earth with great passion and great conviction. And in some way, no matter how minute, managed to change the world. Even if I, the moral majority, or the American legal system doesn't necessarily agree with their way of life, I've always wanted to sit down individually with a select group of people I've pegged as being those who've lived lives so extraordinary, others would like to hear of their experiences. It's my job as a storyteller to channel such information, so I've kept several people keenly and unwaveringly in mind.
So for all of you who've e-mailed me over the years, here goes:
- Joe Montana - the only person in my life who I've considered a hero. When I was a teen watching the San Francisco 49ers, he was a living god. People in their 50's have Mickey Mantle, I have Joe. The man could fall down the stairs and would be better and more graceful than anyone else at it.
- Jenna Jameson - quickly and tragically dismissed by the masses because of the moral implications of her infamy in adult entertainment, Jenna J is actually engaging, coherent, a savvy businessperson and a giant in her industry. Who can't respect that?
- Tupac Shakur - he redefined music and poetry. He was my generation's Jim Morrison. And his legend, as is true with the Lizard King, Jimi Hendrix, Janis Joplin, John Lennon, Bob Marley and Kurt Cobain is that much larger, having been taken from us too early.
- Bill Gates - to say that I sat down and chatted with the world's richest man would be something I'd carry with me happily forever. "Oops…sorry Bill, did I drop some papers? Can you pick those up, please? Oh, silly me, that's my resume…"
- Adolf Hitler - too often in the media we're matched up with interview subjects that we naturally gel with. I'd like to objectively interview someone whose belief system is the polar opposite of my own.
- Kirk Hammett of Metallica - in countless ways, his art has done so much for my own career.
- Trent Reznor of Nine Inch Nails - with apologies to Steve Jobs, NIN single-handedly saved Apple.
- Stephen Hawking - if he explained himself in a way in which I could even remotely grasp a fifth of his theories on astrophysics, such would be a testament to just how smart the man is.
I've been with ORCSWeb for more than a year now, after having more my site over from Interland, and I've never looked back. I liken it (no offense) to being in an abusive relationship and then finding your debutante. The only minor criticism I've had is the server-provoded POP3 mail service wasn't spam-filtered, which made for some rather uncomfortable downloads, and forced me to buy spam-blocking tools, which I'd have to install on all my LAN's machines.
I had been meaning to e-mail Scott Forsyth for the past couple of weeks to inquire about the possibility of getting such anti-spam tools installed on the server, but never got around to it until yesterday, to which he teased, "Ask me tomorrow". Not being clairvoyant but definetly picking up on his point, I was happy to get the announcement just now that ORCSWeb is going to be taking measure to reduce junk mail. Yeah!
The volume of spam has been increasing rapidly, and is a major concern today. We have investigated a number of spam solutions and are now ready to provide spam filtering service, based on the Barracuda Spam Firewall. Our internal testing and trial of this product was very successful; we're excited to offer this service enhancement to you at no additional charge. We expect that this product will be a great solution for you and your users.
We will be implementing the new spam filtering over the next 3 weeks. This solution offers you a great deal of flexibility in managing the impact of spam. Spam filtering can be enabled or disabled domain by domain, based on your preference. And if filtering is enabled for your domain, each user can also decide to enable spam filtering or not. Users can also adjust the filtering to their specific filtering preferences.
We have configured the Spam Firewall with very safe conservative settings; a few spam messages may get delivered, but legitimate messages should not be lost. However, you can adjust these settings to better meet your needs. A key feature of the spam filtering is the creation of a Quarantine account on the spam firewall that holds messages that are very likely to be spam. This
approach keeps most spam clutter out of your inbox. There is a description of this new spam filtering process and related FAQs at these URLs: http://www.orcsweb.com/barracuda_overview.aspx
Spam filtering will be implemented in phases over the next 3 weeks, based on the primary email domains hosted on our mail server. A group of domains will be implemented every few days. If you have multiple domain names set up as Host Aliases on the mail server, the Host Alias accounts will be done at the same time as the primary account.
If you run an ASP.NET site, get with these guys. They totally rock.
Although not the gamer I once was in my youth (aren't we all?), I've seen and appreciated the ads for Sega's ESPN NFL 2K5. But what really blew me away was the ending, with the assertion that a game that looked so good and got suvh positive reviews is selling for only $19.95??? Now there's savvy marketing!
Not bad for a title that, all things considered, has a lot of star power - celebrity voiceovers, NFL and ESPN licensing (which alone could drive the price way up), all coupled with the and insane visuals, smooth gameplay and supposed enhanced AI that I'm certain didn't come cheap.
I only own 3 games for the PS2 I bought 2 years ago and rarely rent, but this is definetly going to be title #4. Hell, for a day's pay (on my salary, at least...and I'm not bragging), I can score the game, grab a nice lunch, get my haircut and gas my car. Sweet!
I thnk Madden 2005 beats Sega's game to the shelves by a few days, but the price thing surely will dent EA's dominance....a little.
If there was one conference I'd like to attend this month it would Destination .NET, with the track on WSE. The awesome agenda looks to be really promising, and at $99, it's a bargain!
Now, personally shelling out the $2,600 it's going to take to get me out there from Guam is another story...
More Posts Next page »