Jeffery VeenJeffery Veen is going to help me with a problem I picked up during childhood. When I speak to people, I do not expect to be engaged and understood. Since I was the baby of the family, I was the cute one who was marveled at for just being able to talk and I served an entertainment purpose for comedy relief. I am not trying to “blame” my family I am just recounting the facts.

So I depend on guys like Jeffery Veen who may serve to get my point across. Veen preaches the same message I have been preaching since before 1998. This is the message: Web sites are not for Web masters. Many of my potential business clients are my family members (or they look like members of my family) and they often sit back and wait for me build their web site because they are not listening to my instruction (because—I guess—I am the baby of the family). Jeffery Veen in “Why Content Management Fails” clearly states that:

Your public-facing Web site is a publication. Treat it like one… If you’re not in the business of producing publications, you won’t be able to do better by plugging in a technology and crossing your fingers. Rather, solve the problem with people.

The “plugging in a technology and crossing your fingers” bit comes from a slavery mentality where we often slip into a trance of thinking we can get something for nothing—at least this is the case with members of my family.

The official list of Songhay System web sites can be found at I am still working with my uncle Azuka Ojini on My other uncle, the internationally known blues musician, Roy Gaines is trying to learn how to build a web site himself—and appears to be underway after my uncle was robbed by people he thought were professionals because his little nephew was saying some stuff but, well… that nephew is kind of weird you know…

We all need to evaluate Mambo, as the time of writing HTML by hand is looking more and more like writing PostScript by hand… Do you understand what I am saying or am I distracting you with my clownish vibe?

Arnaldo Tamayo-MendezArnaldo Tamayo-Mendez Cuban Pilot Cosmonaut. Born 29 January 1942.

Of note: First Cuban astronaut. First person of African descent to fly in space.

Personal: Male, Married, Two children. Born in Guantanamo, Cuba.
Affiliation: Cuban Air Force.

Astronaut Career

Astronaut Group: Intercosmos Group—1978.
Status: Inactive.
Entered space service: 1 March 1978.
Left space service: 1981.
Number of Flights: 1.
Total Time: 7.86 days.

Tamayo-Mendez Spaceflight Log

18 September 1980
Flight: Salyut 6 EP-8.
Flight Up: Soyuz 38.
Flight Back: Soyuz 38.
Flight Time: 7.86 days.

Tamayo-Mendez Chronology

18 September 1980
Soyuz 38 Assignment: Prime Crew.
Flight details: Salyut 6 EP-8, Salyut 6 EO-4.

Manned two crew. Docked with Salyut 6. Transported to the Salyut-6 station the seventh international crew under the INTERCOSMOS programme, comprising Y V Romanenko (USSR) and A. Tomaio Mendez (Cuba), to conduct scientific research and experiments.

26 September 1980—Landing of Soyuz 38
Assignment: Return Crew.
Flight details: Salyut 6 EP-8, Salyut 6 EO-4.

Soyuz 38 landed at 15:54 GMT.

This information is brought to you by The World Wide Floyd Webb.

The statistics page for has more than what most of us get from an Internet Hosting Service, its default statistics reports. This is because almost all Internet Hosting Services provide statistics for metrics on two extremes: either hit counts for the entire web site or hit counts for single documents. One way around this problem might be to divide a web site into sub-domains and then most Hosts will provide you with reports on each sub-domain—however this solution most likely creates the problem of aggregating all of these sub-domain reports into a single report. With these problems, all solutions point to something similar to the technology that produced the statistics page for This page is located here:

This page is not composed by hand with a tool like Dreamweaver or FrontPage. This page is produced by an ASP page (since it was first written in 1998 before the .NET revolution and the peak of PHP popularity), SQL Server and an HTML template. This publishing model is quite conservative. It is the edit-dynamic-publish-static model that will should quickly make sense to people who have worked in corporate environments dominated by Microsoft Office, Microsoft SQL Server, Microsoft Internet Information Server and data entry people since the mid-1990s.

At bottom, this statistics page writes itself. It is independent of the Hosting Service displaying the page. Apart from the home page, all of the pages at are created under this portable model. Generating static pages also allows those brave souls who can manage web sites by hand to take them over using their Dreamweaver- or FrontPage-like environment. Again, this happens not infrequently in corporate environments during political infighting among factions. In many cases, the technical people on a web project can get yanked out of the project by a marauding executive. This edit-dynamic-publish-static model goes a long way to avoid explaining the importance of a database to the victims of a politically savvy marauder!

This year forward, I intend to upgrade this system using .NET technology, XML and Web Services.

Creating the Enterprise InfoPath Solution—Level 300 is my shining example of why people would not understand or outright hate InfoPath out of ignorance fueled by the correct information. This program features a scenario with an Office Task Pane stuffed with an HTML page crammed with thousands of lines of JavaScript code and MSHTML kludges that would make HTA authors weep with nostalgia. The XAML team is sharpening their knives waiting for right moment to cut this down.

I’m being hard on the presenter from as he does take the time to condemn this design during the web cast. But, after clicking on two or more links just to see the program, I am already peeved and ready to criticize!

Because XML is the life blood of Web Services, I need to remember that XML passes one ‘real’ type, String. XML uses the String type to simulate every other type in the universe. This “simulation” is implemented by serialization on the .NET plane of reality (SOAP Serialization to be more exact). I’m sure Don Box warned me about this cost of doing business years ago but I wasn’t listening. I am beginning to understand a few consequences of this:

  • I created data classes that are designed to live in managed code interacting with SQL server. Members of these classes use types from the System.Data.SqlTypes namespace. This is great for handling nulls that SQL server can recognize. This is not so great for people that hate SQL Server. Moreover, these types cannot be serialized as they generate the “System.Globalization.CultureInfo cannot be serialized because it does not have a default public constructor” errors. It follows that ‘companion’ data classes had to be created that are designed for serialization. This adds an unexpected layer of complexity but I am not yet willing to give up my .NET intimacy with SQL Server! So, for example, I have a data class called Songhay.Data.WebSegment that works perfectly with SQL server. But I had to create a “companion” class called Songhay.Data.WebServiceSegment for serialization.
  • Because of this companion class stuff, I had to build a helper class of static members that, say, handle the translation from Songhay.Data.WebSegment to Songhay.Data.WebServiceSegment—and vice versa. When a member of the service-friendly class contains a zero-length string for a String property or when there is a zero assigned for an int property, this helper class decides when to assign SQL-friendly null values during translations of web service input destined for SQL Server.
  • Translation issues like this are probably best handled with custom serialization procedures featuring the ISerializable interface. But it appears I am a victim of crazy conspiracy theories promoted by Neil Davidson, his article, “Nine reasons not to use serialization.” So, to ‘liberate’ myself, I went straight to Jeffrey Richter who, in “Run-time Serialization, Part 3,” introduces me to the concept of a “surrogate type,” which almost appears to serve the same function as my aforementioned translation helper class. But in Jeffrey’s scenario, we are trying to serialize a class that can be serialized when it is properly marked for serialization. In my scenario, I do not have such Microsoft luck. Moreover, the use of serialization in his scenario is required when the developer does not have intimate knowledge of all classes involved. I do.
  • Because XML is being used to transport data across the wire, strings sent from the database with HTML markup must be ‘handled’ in ‘special’ ways—otherwise all of my angle brackets will escape to a bunch of < and > entities. The first “special” thing that has to be done is to convert all HTML to XHTML. Secondly, properties of type SQL String have to be translated into type XML Node—this type is recommended by Microsoft when exposing “Rich Text” from Web Services to InfoPath. So now, we can see just how these Web Service classes can freely diverge from the original SQL-friendly data classes because I am not using this “surrogate class” stuff.