Posts

Showing posts from May, 2005

Some Observations on Marketing, Intellectual Property Protection, and the "Optimal Price Point"

Recently I caved in to incessant badgering and the family went down to Epcot for the day. We live in the Orlando area so it's only about an hour's drive. It turned out to be a fantastic day, although I can tell you that 6 hours of walking in the late May Florida sun will give you two additional presents: 1) A sunburn, and 2) Tired Feet! While we were there, the kid got his photo taken by a "cast" photographer and his lovely aide at one of the UK country exhibit stores, sponsored by Disney and Kodak. Now this is kinda unique, the photog hands you a color card with a web address and a unique ID on the back of the card. You sign up, log in and - bang! there are your photos. The site is written in ASP.NET, by the way. Now of course, you and I as developers will instantly right-click to attempt to download the little boogers, but they have disabled the context menu with some script. And, they want $12.95 each for a 5X7 print, which I thought was quite excessive, considerin...

FeedSearchGator Up and Running!

FeedSearchGator is my newest creation based on the fact that there are now literally dozen of search engines that return results as RSS. What FeedSearchGator does, very simply, is to take your search query that you put on the QueryString, send it out to currently eleven (11) different engines on a threadpool asynchronously, aggregate the results, remove duplicate links, and return a single RSS feed containing up to several hundreds search results that you can subscribe to in your RSS Feed reader. The engines are: feedster.com, search.news.yahoo.com, beta.search.msn.com/news/, moreover.com, blogdigger.com, waypath.com, blogpulse.com, rocketnews (news), rocketnews (blogs) , newsisfree.com,and daypop.com. I am giving my custom threadpool a 20 second WaitAll timeout since occasionally, one or two of these seach engines take a long time to return results (a very long time, too long to wait for a page). I'm still refining this, but it is fully operational and I'm open to ideas (in...

Good News for SQLite Afficionados

Robert Simpson, an "early adopter" of the SQLite database and the .NET Framework 2.0 platform, has his first release of ADO.NET Provider 2.0 for SQLite up on SourceForge. Not only did it compile for me with BETA 2 right out of the box, he's really outdone himself. This thing supports user-defined functions, and the ProviderFactory model as well: To Quote: Features: DbProviderFactory support, just add the XML below at the machine.config and/or app.config level. Full support for ATTACH'ed databases.  Exposed as Catalogs in the schema.  When cloning a connection, all attached databases are automatically re-attached to the new connection. DbConnection.GetSchema(...) support includes the MetaDataCollections , DataSourceInformation , Columns , Tables , Views , Catalogs and Indexes keywords. Enhanced DbDataReader.GetSchemaTable() functionality returns catalog, namespace and detailed schema information ...

Quotations Page and RSS Feed Up!

Over the last few years, I"ve built up a database of quotations from famous and some not so famous entities, built from a variety of sources (yup - even Dexter Dotnetsky is in there!). My database now has over 43,000 quotations from nearly 8,000 authors organized by over 1,300 subjects. Up until now, I really haven't done anything with it but now that ASP.NET 2.0 is coming and I have my ASP.NET 2.0 "playground" site , myidentityplus.com , I've got a neat place to put my experiments. I have a random "Quote of the Day", which is available as an RSS Feed as well, and you can search the database by Author, Subject, or even by a word or phrase to be found within the quotation body. This page is written in ASP.NET 2.0. There is also a link to submit a quote for consideration in the database. You can Check out the quotations page here : It doesn't have a MasterPage yet but everything seems to be working correctly, so try it out. The Daily Quotation feed i...

When this came out, I was . . .

Tonite we watched Divorce, Italian Style , Pietro Germi's hilarious 1961 satire of Italian marital conventions that recently was issued on DVD. Ferdinando Cefalu, a handsome Sicilian nobleman (Marcello Mastroianni), longs to marry his beautiful young cousin Angela. There's only one problem: he's already married, and at that time you could not get a divorce in Italy. Living in a society that forgives crimes of passion, Ferdinando devises a plan. He plots to prove his wife an adulteress, after which he can kill her and marry his cousin with impunity. As one would expect, there are twists and turns, and a surprise ending. I swear, even though you are reading the English subtitles and listening to the Italian- only audio, you do not even notice that this movie is (gasp!) in black and white! Hollywood, what happened? You used to be able to put out movies of this quality. Too bad.

Intellisense on Steroids in ASP.NET 2.0

Image
Whoa! I'm working on some neat ScriptCallback stuff with a database of quotations I've been working with in Visual Studio.NET 2005, and I just noticed this. When you have client script in ASP.NET 2.0, and you need to debug it (even if it's dynamically generated script from the Page.ClientScript object), you get some really cool new Intellisense on it. This picture is debugging Client - side javascript, folks: -- by the way, if you are wondering why any of the script callback demos you've seen for ASP.NET 2.0 don't work, its because the GetCallbackEventReference method got moved into the Page.ClientScript class. So, Page.GetCallbackEventReference(this,"arg", "ReceiveServerData", "context"); now needs to be: Page.ClientScript.GetCallbackEventReference(this,"arg", "ReceiveServerData", "context"); If you are interested in working with script callbacks for ASP.NET 2.0 in a strongly-typed fashion, and would like...

VB.NET vs C# Debacle Rages On

There are a few "givens" that one must consider and accept when dealing with this obviously sensitive issue. First is that you aren't going to make case-sensitivity go away. It's built into too many languages, operating systems and standards. XML, UNIX, C++, and of course C# just to name a few. If you write VB.NET code you may wish to consider that fact, especially if you anticipate that programmers using other languages are going to be using the classes you write. Personally, I find case sensitivity to be a good thing. It forces me to think a bit more and serves as an additional check on writing quality CLS-Compliant code. Think of it as the "literary approach": If you are the kind of individual who -- through either laziness or lack of education -- can't spell, use proper English grammar, capitalize words correctly, and you do things in your language such as use the word "loose" when you really mean "lose", then probably VB.NET woul...

Dr. Dotnetsky must have gone to the movies too...

Image
I just got an email from Dexter Dotnetsky again. He says he's getting ready to do another rant on eggheadcafe.com (heh - that is, if we let him post it). He sent the photo below:

fil i bus ter != debate;

n. The use of obstructionist tactics, especially prolonged speechmaking, for the purpose of delaying legislative action. An instance of the use of this delaying tactic. An adventurer who engages in a private military action in a foreign country. --Term used to designate obstructionist tactics in legislative assemblies (who knows-- maybe even in .NET assemblies). It has particular reference to the U.S. Senate, where the tradition of unlimited debate is very strong. What's particularly interesting is the origin of the word: In the 17th cent. the term was applied to buccaneers who plundered the Spanish colonies in the New World. In the 19th cent. the word was used more in reference to adventurers who organized and led, under private initiative, armed expeditions into countries with which the country from which they set out was at peace. Complications between the governments involved were likely to result. There was a series of filibustering expeditions from the United States against C...

Xenophobic email attacks use mutiple NonDelivery messages as vehicle for D.O.S.

[Subtitle: "Invasion of the Zombie PC's"] Nearly a year ago , Joe Wein correctly predicted that if this security hole was not corrected, it would lead to huge abuse. And, wasn't he ever right! What is happening is this: Sober.G / Sober.H requests copies of its mails to be sent to 40 additional made-up addresses at a time and since most of these are invalid, whoever has his email address abused by Sober may end up with bounces (Non-Delivery Notifications, NDN). The email servers are mindlessly "doing their job" - and actually creating this flood of multiple DOS (Denial of Service) attacks. I quote Mr. Wein: "A combination of generating multiple bounces for a large number of invalid carbon copy addresses and attaching the complete original mail is dangerous. Unless such issues are addressed soon and on virtually all vulnerable mail servers, sooner or later someone will abuse this well-documented gaping security hole." This is an excellent exampl...

Team Development - a dying art? Not at Microsoft...

I don't know about you, but being a developer who has made a whole bunch of money by focusing on Microsoft development platform / technology, I have more than a casual interest in what is going on at Microsoft. I have a number of friends and acquaintances who work there, but I am not the kind of person who likes to bother people or ask prying questions. However, I've noticed a major sea-change at MS in the last couple of years, and I suspect that Ballmer is primarily responsible for it. This is the focus on "Customer -centric" -- and more specifically, "Developer-centric" information. I feel much more comfortable working with internal MS people; I've had intros through my MVP lead, Rafael Munoz, to some higher-ups that have been exceptionally forthcoming with information and help when I needed it, and I've tried not to abuse the privilege. The MS blogging phenomenon has contributed to this "binding" with the developer community. The Produc...

Generic T-SQL Stored Proc to generate RSS from any Table

This uses my UDF , "fnRFC822Date" from a previous post. You simply supply a tablename, the names of the columns for the various RSS items and channel items, a URL prefix for the link, and the maximum number of items, and you get back well-formed (I hope) RSS! if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_GenerateRSS1]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[usp_GenerateRSS1] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE PROC dbo.usp_GenerateRSS1 @RSSTableName varchar(50), @ChannelTitle varchar(250), @ChannelLink varchar(250), @ChannelDescription varchar(500), @ItemTitleColumnName varchar(50), @ItemLinkColumnName varchar(50), @ItemDescriptionColumnName varchar(50), @ItemPubDateColumnName varchar(50), @LinkUrlPrefix varchar(200), @maxItems int AS DROP TABLE TEMPRSS -- ("DOH" FIX THIS LATER) Declare @strSQL nvarchar(500) set @strSQL ='select top ' +cast(@maxItems as varchar(3...

SOA, DOA, AJAX, US of A?

Rich Turner of Microsoft blogs about his diatribe over the SOA acronymn "invented", hyped and promoted by the likes of Gartner and other groups over the last couple of years. ("AJAX" is the latest such gaffe, simply a marketer- packaged new "name" for something people have already been doing quite well for a long time, thank you). Specifically, I agree with Rich's posture "We do strongly subscribe to the notions of SO as abstract guidance and goals for building distributed systems. ...... but we don't have a SOA because we don't believe such a thing exists, and if it is, its too poorly defined for us to adopt." RIch continues to explain that SO(A) is only part of the story and talks only about part of building a solution: how to construct a system from loosely coupled, cooperative services, but makes no mention of how to visualize data, how to integrate devices, how to analyze and mine information, and so on. A real architecture (tha...

Transact-SQL RFC822 Date / Time Function for Stored proc RSS Generation

Have you ever wanted to generate RSS from a Stored procedure? It's easy, until you get to the RFC822 date requirement! Believe it or not, I could not find this anywhere-- I actually had to cobble it together from pieces myself. Enjoy: 5/17/05 NOTE: oj commented with a much better, shorter version which I've used to replace my original and is posted below: IF OBJECT_ID('[dbo].[fnRFC822Date]', 'FN') IS NOT NULL DROP FUNCTION [dbo].[fnRFC822Date] GO CREATE FUNCTION [dbo].[fnRFC822Date] ( @Date datetime ) RETURNS nvarchar(70) AS BEGIN RETURN(LEFT(DATENAME(dw, @Date),3) + ', ' + STUFF(CONVERT(nvarchar,@Date,113),21,4,' GMT')) END GO -- example: --print dbo.fnRFC822Date(getdate()) returns: Thu, 12 May 2005 21:29:29 GMT

"Mr. ASP.NET" Cranking hard on June 3 zero bug bounce for ASP.NET 2.0

http://weblogs.asp.net/scottgu/archive/2005/05/11/406515.aspx I especially like the part about: "One of the big changes we are making for RTM is to further enhance the migration wizard in Visual Studio 2005 to help handle a number of the common cases that weve seen when upgrading applications with Beta2. In particular, we are spending time making sure that all of the model changes we made (item #1 above) are automated so that existing customer apps should for the most part just work without manual changes required. A few of the cases of model change behavior that weve seen that have required manual developer changes in Beta2 but should now be automatic for RTM when first opening the project and running the migration wizard ..."

About the "Study Path" for new technologies

This is nothing earthshaking; its something I feel strongly about, however. This relates to your personal philosophy about how you handle new technologies as they move through the BETA and into the release phase. Specifically, I am talking about Visual Studio.Net 2005, Sql Server 2005, and .NET Framework 2.0. Your views may differ. Generally speaking, when you get to the point of a BETA 2 or later with some sort of "Go Live" permission license, it's time to crack the books and get serious. RTM is not far away, the Assembly version numbers will not change, and most of the changes (obsolete / new or deprecated) have already been "baked". What remains is tuning, fixing little things that are still not working 100%, and codebase optimizations that don't really affect method signatures, namespace or class names, and the like. What I guess I'm trying to say is that its OK to start developing production software with VS.NET 2005 Beta 2. 95% of the software yo...

SqlWebAdmin web app for ASP.NET 2.0 ready!

Here is my rebuild: http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=870 This is for SQL Server 2000 only! Enjoy.

Remember the old .NET Framework ASP.NET "Class Browser"?

Well, here's my take on an ASP.NET 2.0 version That's my new ASP.NET 2.0 "playground" courtesy of the nice folks at CrystalTech.com . Just a start, there will be a lot more soon! Enjoy. [NOTE TO SELF:] The Classbrowser is missing from the ASP.NET 2.0 Quickstarts. However, you can download the Samples from MS Downloads, and that one actually does have it. So, I'll update my little experiment to the actual, real one.

Debugging a .Net Framework Windows Service and ASP.NET 2.0 version switcher

I don't usually "parrot" other people's contributions, but in this case the solution is so elegant and simple, I'll make an exception. Lee Humphries has a short article on codeproject.com here about this. Essentially it boils down to telling your service to kick off and run in Debug mode - just not "as a service": // The main entry point for the process static void Main() { #if (!DEBUG) System.ServiceProcess.ServiceBase[] ServicesToRun; ServicesToRun = new System.ServiceProcess.ServiceBase[] { new Service1() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun); #else // debug code: allows the process to run as a non-service // will kick off the service start point, but never kill it // shut down the debugger to exit Service1 service = new Service1(); service. (); System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); #endif } Man, it doesn't get any simpler than that! Nice work, Lee! On an unrelated...

ASP.NET 2.0 QuickStart: That's what it is!

We get lots of posts on eggheadcafe.com from newbies asking how to perform very basic ASP.NET tasks. Almost without exception, when asked if they have looked at the "QuickStart" the answer is more or less, "what's that?". ASP.NET 2.0 also has a Quickstart. If you didn't install it, look here: C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\QuickStart If the folder and its files / subfolders are there (you installed the SDK), just fire up IIS, create a new "Virtual Directory", and point it to the above path. Name it "quickstart" Set the ASP.NET Tab on IIS to use the 2.XXXX Framework, and request "Http://localhost/quickstart", and you will be on your way. By the way, the "sourceview" element in the web.config is mistakenly left to the settings of the last Microsoft developer responsible for it before the build (most likely NOT where yours will be), so change it to : <sourceview> <add key="root" va...