Back to the Black Board with Tech Plans: Sketching out My Personal Production Lines

I showed off my last sketch which was really a mess. This one is a bit saner:

Back to the Black Board with Tech Plans

The number-one take-away: Windows Presentation Foundation will be the center of my production efforts. What’s liberating for me is that it does not matter that WPF is less popular than, say, Adobe Flash. The latest iPhone ‘revolt’ against Flash and the promise of HTML 5 encourages me to declare that WPF is the state of the art UI technology—so why not build the “concept car” with the best tool—then it should be an academic exercise to transfer the “concept” to other platforms.

There are multiple directions out of WPF land:

  • WPF to Silverlight
  • WPF split into ASP.NET MVC and Silverlight (this implies that a WCF service is in reuse)
  • WPF to Flex/AIR
  • Silverlight to Moonlight (should be ‘easy’)
  • ASP.NET MVC and Silverlight to Zend Framework and Silverlight (jQuery/CSS should travel without modification)

Songhay System Zend Sample Online (Part 2)

The content of this message is used by the SonghaySystem.com sample “Zend Framework Sample: Default Application.” The content of this message comes from an AJAX call against a server running the Zend Framework. This message should be reached from a link in the content of another Blog post. The Zend Framework sample is intercepting links indexed in OPML and rewriting them for rerouting. This ‘interception’ is taking place within the AJAX/YUI Client—it overrides the default behavior of selected links (anchor elements) in this Blog content.

The selection of links to override is driven by a subset of OPML ‘index’ data passed to the Client. In this particular example, any link containing the base URI of the Blog site where this content originates will be overridden. This allows the SonghaySystem.com sample Client to link among any number of Blog posts—all within a single, custom, aggregating ‘view.’ Clicking on a link in the ‘Related Resources’ section below demonstrates this capability…

Related Resources

“Zend Framework 1.9.0 Preview Release Now Available” and other links…

Buy this Book at Amazon.com!

Zend.com: “Zend_Rest_Route, Zend_Rest_Controller, and Zend_Controller_Plugin_PutHandler, which aid in providing RESTful resources via the MVC layer. …Zend_Feed_Reader, which provides a common API to RSS and Atom feeds, as well as extensions to each format, caching, and a slew of other functionality. …Zend_Queue and Zend_Service_Amazon_Sqs, which provide the ability to use local and remote messaging and queue services for offloading asynchronous processes. …Zend_Db_Table updates to allow using Zend_Db_Table as a concrete class by passing it one or more table definitions via the constructor. …Several new view helpers, including Zend_View_Helper_BaseUrl.”

“Zend_Service_PayPal”

A.J. Brown: “Zend_Service_PayPal is a Zend Framework interface to the PayPal on-line payment service, through PayPal’s exposed APIs. Initially, it is intended to support the lighter PayPal Name-Value Pairs (NVP) interface. Additionally, Zend_Service_PayPal will provide smaller "utility" classes for sending special requests to PayPal (eg. Payment Data Transfer requests) or receiving Instant Payment Notification messages from PayPal.”

“Zend Framework Page Caching: Part 1: Building A Better Page Cache”

Maugrim The Reaper: “It uses a lot of memory and CPU and that gets worse when PHP is called upon.…The next optimisation level therefore is avoiding PHP and/or Apache completely. If we can remove PHP from the equation, our Apache processes will use less memory. If we can remove even Apache from the equation we save even more. By relying on PHP to retrieve cached pages, neither of these is possible without some drastic change. …On a related note, one growing strategy to avoid Apache is to offload requests for static resources (images, css, etc.) onto a more efficient HTTP server which uses less memory and CPU than Apache. Only requests needing PHP would then go through Apache. Apache is already fast, but it’s not the fastest! Two common choices for alternative HTTP servers are lighttpd and nginx.”

Working for Songhay System ‘Ready State’

I am not a military scientist but I seem to insist that this concept I call ‘ready state’ comes from the military. ‘Ready state’ means that you have worked with your organization and have achieved a certain level of preparation. This level of preparation is ready to handle a certain set of known scenarios. For me this implies that there are (at least) two kinds of work: you work to obtain a certain level of preparation and you work to maintain a certain level of preparation.

I am not a Tibetan monk but I seem to know about this way of suffering called “the suffering of change.” This implies that whenever I use words of permanence like “maintain” I am making myself vulnerable to the suffering of change. Life is about constant change—and any “intelligent grasping” for the illusion of permanence is a recipe for the Blues, baby.

My clever grasping would suggest to any willing to listen that my two kinds of work are worth it. And, in fact, obtaining a realistic ‘ready state’ is a defense against the suffering of change. The delicate, professional, career-orienting move here is to prepare for these ‘known scenarios’ but also be ready to abandon them completely. So, with my Songhay System organization, I have been ‘suffering’ for years working toward reaching a level of preparation in these areas:

  • Building a generic solution (now called ‘GenericWeb’) that generalizes the document-centric Web application. This is largely server-side work in ASP.NET, XSLT and Microsoft SQL Server with a little bit of client-side AJAX/CSS under YUI.
  • Building a generic solution (with no fancy name—so let’s call it ‘Next-Generation Songhay UI’) for displaying content on the Web. This is largely a client-side effort, using AJAX/CSS under YUI, with a little bit of server-side Zend Framework/PHP/XSLT.

These two work areas described with the buzzwords above suggest the following:

  • The Songhay System is using XSLT to render user interfaces (with AJAX). This implies that XML must be used to represent data that “bound” to these interfaces. This further implies that an XSLT/XML “pipeline” had to be built in PHP and .NET.
  • The PHP-based solution described above mentions no database systems. This does not mean that databases (like SQLite) are not being used. What this means to imply is that something other than direct contact with a DBMS is the future here. Yes, we can speak of “cloud computing” but for the humble scale of the Songhay System we can look at a sample of how this ‘next-generation’ UI can connect to a WordPress Blog and pull data from an RSS feed.

Why prepare so much for some theoretical scenarios when you may have to abandon them completely? Well… why be born when you know you are going to die? The essentials of what I am grasping for here in this IT context are these:

  • XML is the preferred way of transporting data across tiers. This preference for XML influences the desire for user interface technologies that support XML-based, declarative, techniques (e.g. XAML, E4X in Flex, XHTML and HTML 5).
  • XML is the preferred way of transporting data across tiers. This preference for XML influences the desire for data management technologies that support XML-based, techniques (e.g. SQL Server 2005 and above).
  • The use of XSLT and certain “good parts” of JavaScript directs my work toward functional programming for purely pragmatic reasons.

So what’s ‘ready’? I think I am ‘close’ to ready-state nirvana. More journal entries to come… Here are some proposed milestones for this journey toward ‘ready state’:

  • An upgrade to my SonghaySystem.com web site will use this ‘next-generation’ UI. This release would be a strong indicator of readiness.
  • New .NET projects from me appearing in CodePlex.com or in the “MSDN Code Gallery” would be a strong indicator of readiness.
  • New, formal documentation for all the mess I’m talking here showing up at SonghaySystem.com is definite readiness.

These would-be achievements do not represent something I would impose upon you in order to justify its existence. These achievements represent my personal technology strategy—my proposed expression of sanity amidst crazy worlds of proprietary technologies. It is one thing to whine and complain about another strategy (supposedly outside of one’s “self”)—it is another matter (according to my illusions) to “possess” what represents a technology strategy that can be considered ‘ready.’ I even I am not concerned about you using “my” solution. My concern is that a solution—that is actually regarded by me as a solution—exists.

What I find, after almost twenty years in IT, is that I have solutions to problems that many don’t even regard as real. This is one of two reasons why my stackoverflow.com score is so low!

Songhay System Zend Sample Online

Buy this Book at Amazon.com! The content of this message is used by the SonghaySystem.com sample “Zend Framework Sample: Default Application.” The content of this message comes from an AJAX call against a server running the Zend Framework. The Zend_Feed_Rss class is used to read a WordPress news feed, containing this message—this Blog post. This feed class instantiates and object that contains one or more Zend_Feed_Entry_Rss objects.

Both the Zend_Feed_Rss class and the Zend_Feed_Entry_Rss class inherit from the Zend_Feed_Element class. The Zend_Feed_Element->saveXml() method can be used to return the raw XML of the item element in the RSS feed (conventionally stored in the PHP variable called $item).

For WordPress RSS 2.0 feeds, you should see the content:encoded element extending RSS in the ‘raw’ XML. The content of the message you are reading now is stored in this element. There are two of many ways to access this element directly from PHP. One is found in a Zend “bug” report called “Zend_Feed (RSS) Does Not Provide Access To <content:encoded>”—Kevin Golding in a comment refers to the $item->encoded() method.

The other way comes from the Zend documentation for Zend_Feed_Element->__get(). The documentation states that this method will “enable read access to content:encoded element.” An expression like $item->__get('content:encoded') should produce the expected results.

Related Resources