Back to the Black Board with Tech Plans: Tabulating Technologies

Finally, some kind of big pictures emerge—some kind of expression of what I’ve been doing with most my adult life. This unimpressive rendition of a table started with the far left column as a list of data formats in decreasing disk space:

Back to the Black Board with Tech Plans

So, Apache log files are my largest set of data—then comes the Blog post data (you are reading now) in MySQL/WordPress. Notice how I still avoid storing my crap in “the cloud.”

The next column lists the technologies I use/built with the data forms in the first column. Here is where the organizational lousiness comes in because the order of items in this column has nothing to do with that in any of the columns. My struggle to compensate for this is through arrows going all over the place.

The arrows pointing to the third column intend to show me where the solutions in the first column will end up technologically. For example, DAR will use the Entity Framework, support WCF and maybe WF (Windows Workflow Foundation).

Another Tabular Attempt

Data Format Application of Data Format Future of Application
Apache log files DAR parses and loads these files into SQL Server 2008.

DAR will be modified to run on some kind of dependency injection framework—probably StructureMap or Unity.

SSIS and SSRS are being introduced for processing the results of the load.

SQL Server 2008 GenericWeb and DAR use various approaches in the Songhay.Data namespace. The Songhay.Data.Linq namespace will play a role here, featuring Entities Framework.
MySQL WordPress uses MySQL exclusively. No immediate plans to improve here.
SQLite SQLite.net and my custom PHP libraries approach. The Songhay.Data.Linq namespace should play a role here, featuring Entities Framework.
Word DOCX No released solutions approach. A WPF version of CleanXHTML is in the works.
OPML An internal InfoPath solution is used to generate list data. Newer PHP/Zend designs use OPML lists for lightweight site index data. A simple OPML editor for WPF and ASP.NET MVC is in the works.

“Google, Universal to Launch Music Hub ‘Vevo’” and other links…

'stashed! [github] wired.com: “‘Vevo will bring the most compelling premium music video content and services to the world’s single largest online video audience,’ Universal Music Group chief Doug Morris said in a statement. ‘We believe that at launch, Vevo will already have more traffic than any other music video site in the United States and in the world.’ …Unlike MySpace Music Vevo will not be a joint venture between Google and Universal, Google told Wired.com. The site will be wholly owned by Universal, the largest record label in the world, whose YouTube channel has more views than any other in the world (3.5 billion). Google will run all technology-related aspects of the service.” I had the pleasure of talking with Ken Chung and company last Wednesday about joining the team. The interview was quite a workout but almost totally fun!

“MvcContrib source code has moved to GitHub”

Eric Hexter: “We recently moved the MvcContrib projects source code over to GitHub. We are hoping that the ease of creating forks and pulling them back into the trunk will allow for more contributions to the project. I know that GIT seems to be a source control system that few developers in the .Net space seem to know about but Jeremy Skinner created a great tutorial specifically for the MvcContrib project.” This is, for me, a dramatic example of how times are a changin’: this high-profile Microsoft-technology project is rejecting (quite matter-of-factly) Microsoft technology! Moving to GitHub is a pro-Linux, pro-Open-Source smack-down for the Microsoft Team Foundation Server.

“Peer to Peer ASP.NET State Server”

CodeProject: “The peer to peer state server is fully backward compatible with the Microsoft provided state server and can transparently replace it. Peer state servers can transfer sessions to each other, improving the reliability of session state dependent web applications. Peer state servers also act as a security layer that protects session data on the network. …This project started out as a simple idea but quickly evolved into a complex task. Hopefully, this implementation and other ideas presented in this article will be valuable to developers interested in distributed systems. Due to the level of complexity, there will be bugs and kinks to work out. Contributions and bug reports will be appreciated.”

“ASP.NET MVC 1.0” and other links…

Buy this Book at Amazon.com!

ScottGu: “I’m excited today to announce that we are also releasing the ASP.NET MVC source code under the Microsoft Public License (MS-PL).  MS-PL is an OSI-approved open source license.  The MS-PL contains no platform restrictions and provides broad rights to modify and redistribute the source code.  You can read the text of the MS-PL at: http://www.opensource.org/licenses/ms-pl.html…”

“VB May Get a Big Push from ASP.NET MVC”

InfoQ: “An alternative to using aspx is Visual Basic. With its support for inline XML fragments, VB is well suited for this role. This isn’t the first time Visual Basic was used as a templating language, VBScript was the default language for classic ASP. But unlike asp files, VB.NET offers a much cleaner separation between HTML and code.”

“Tweening Equations for Silverlight”

Adam Kinney: “I remember the days back on the were-here forums (now sadly defunct) when there was this guy who went by the alias rpenner and he schooled us all in math and showed us how to do very cool things in ActionScript.  Robert Penner’s equations have been perfected, published and translated to C#.” I have not heard the name “Robert Penner” invoked in daily tech since the days of my writing of “Rants of a Robert Penner Flash MX Disciple” back in 2003. I still remain curious about what became of Penner. It’s like he’s meditating in the Himalayas or something…

Random Screenshot: A Solidified ASP.NET Server Design

This image represents the summary of the decisions made by me about how to design an ASP.NET Server application. These decisions are extremely important to me as it defines how my thoughts are able to function regarding this matter. In other words, without these decisions I am an empty set of hands blindly waiting for orders instead of taking initiative and the upper hand of pro-action. This image allows me to see my understanding of this matter.

Here are the strong words governing my understanding:

  • Post Data Handler—the Server will process RESTful post data, strings that are usually well-formed XML. This means that the client/cloud will prepare and send XML strings to the server. This is utterly ridiculous to “mainstream” programmers as they would rather have JSON or a SOAP wrapper taking care of them. So you can understand why I am little self-conscious about making this decision—but at the same time quite indignant and successful with this very flexible, server-agnostic approach. (Hint: in ASP.NET, read XML posts with HttpContext.Request.InputStream—you can also do the equivalent in PHP and surely in some Java container.)
  • Response Builder—the Server will build a response using defined responses. This promotes maintainability and code reuse.
  • Request Bag—the Server defines all incoming requests. This ‘bag’ captures all incoming query strings into a plain-old object. This promotes maintainability and contributes (somewhat) to security. This decision is similar to the reasons why database server designers use stored procedures and/or parameterized queries.
  • Server—you can see this strong word in today’s image in the word QuizStoryboardServer. So the decision here is that the Server (which extends HttpApplication) always has a prefix indicating the specific purpose of the application. In today’s case, the specific purpose (which has nothing to do with you) is serving up something I call a ‘Quiz Storyboard.’
  • Command—like Server, you can see this strong word with a prefix in StoryboardCommand. This represents another firm decision that a Server uses an enumeration of commands (an enum). The type StoryboardCommand is an enum defining the specific commands that this Server will respond to without exceptions (that is, without throwing an error message). The Server finds these commands in the Request Bag (Hint: the Enum.Parse() method turns a string (from the Request Bag) into an enum). In this particular case, StoryboardCommand.PassToDataLayer is the default Server command—so ‘passing to the data layer’ is what the Server does when it cannot find the requested command (see below). My data layers, by the way, also use Command enumerations.

Songhay System ASP.NET Server DesignI have been struggling for the last two weeks building this Quiz Storyboard Server. I have missed the deadline by three days. So I am totally pissed off. But this is cool: In the conventional App_Data folder you can see in the image two XML configuration files, QuizStoryboard.xml and TemplateDictionary.xml. Of course the Quiz Storyboard Server handles QuizStoryboard.xml. This file, for example, allows the Quiz Storyboard Server to gain access to the “data layer” through an interface. But the TemplateDictionary.xml file is completely generic.

The template dictionary maps Command names to XSL templates. Yes, that’s right: XSL templates. Look in the room full of .NET developers you may be in right now and I bet you can’t find more than one XSLT dude—most likely zero. XSLT allows me to handle the problem of data binding to a “view”—the V in Model View Controller in a Client-agnostic way. All I require is that the Client (another strong word) can send and receive XML messages (a stupid block of XHTML is an ‘XML message’ folks). As of today, these views are called by my implementation of the YUI library via AJAX.

It should be clear why I am likely to turn down a development position at your local, do-right company. Of course you don’t care but I prefer to use REST in a .NET world. I prefer to use XML in a .NET world. I prefer to use XSLT in a .NET world. This approach reduces vendor lock-in significantly and increases flexibility. (Most Microsoft shop heads—especially those dating back to the 1990s—are locked in to something horribly limiting and are arrogantly in denial.) And, no, Rocky Lhotka did not waste years of his life trying to master the frustration of Microsoft-approved data binding. Unless, of course, you call commanding six-figures year over year “frustration.”

In my Microsoft world, I can take one of my clients and point it at a completely different (non-Microsoft) server. I can take one of my servers and send messages to a completely different (non-Microsoft) client. So my preferences exist not because I am “smart” but because I do not have the luxury of predicting through political job security what technology I will be using. And I do not have the “privilege” of being responsible for raising the earnings of a software tooling company. XML and REST are about survival.

Only in the last two or three years has Microsoft revealed itself to be interested in what I am doing here. You can see this interest in ADO.NET Data Services, ASP.NET MVC Framework, XAML and other stuff. Ditto for Adobe, with E4X support in Flex. I blame Scott Guthrie for providing leadership in this new direction and I commend him for his efforts.

Scott Guthrie and the Zend Framework

Scott Guthrie (who will cut you) is for the brand-new ASP.NET MVC Framework. Owing to the digitized, oral tradition of Internet-based evangelism, I have seen it in action via Jeffrey Palermo and Scott Hanselman and am very impressed. What is most important for me is that the design does not force you to use ASP.NET pages to render views. And, eventually, what is natural for me is to look for parity in the “open” world—the world of PHP. Man, did I find parity!

I am convinced that the Zend Framework is the spec’—the technical blueprint—for Microsoft’s ASP.NET MVC Framework. After watching these introductory videos by Mitchell Hashimoto, I am flippantly certain that Scott Guthrie hung out with the folks at Zend as PHP support improves in IIS.

Here are my highlights showing my support for the Zend Framework:

  • To use the marketing language of the Zend people, “We designed Zend Framework with simplicity in mind.” This is true for me. I am too mature of a developer to impress myself with meaningless complexity.
  • I prefer this framework over, say, symfony because it is an elegant, minimalist descendant of Microsoft/IBM OOP patterns and practices (instead of being influenced by Ruby on Rails patterns). The Zend Framework, by the way, is younger than the Rails-based PHP frameworks like symfony and had the advantage of responding to these elders before its release in June 2007.
  • This framework does not force you to render views exclusively in PHP. By using viewRenderer->setNoRender(true), getResponse()->setHeader() and getResponse()->setBody(), the controller can return JSON or XML—or something else (like PDF). I took a screenshot of the Bradford Cottel, Stas Malyshev webinar, “Building Rich Internet Applications (RIAs) with PHP and Zend Framework,” to show this. Scott Guthrie’s ASP.NET MVC Framework does a similar thing, which is a huge change for me as .NET Web developers are no longer ‘coerced’ or ‘tricked’ into building massive, proprietary surface area into their network resources.
  • IBM supports and promotes the Zend Framework. This should make IT managers—especially ones over huge Java-based shops using IBM application servers—sit up and take notice. Read “Understanding the Zend Framework, Part 1: The basics” at ibm.com.

The promise here is that Zend Framework and ASP.NET MVC Framework will allow me to build in PHP and ASP.NET using overlapping concepts. Even though PHP and ASP.NET are “very different,” to me they will ‘feel’ more ‘the same’ under the MVC conceptual umbrella. This should go a long way toward reducing the IT information overload continually threatening my sanity and appealing to my corpulent American greed.